STC02 定时器0计时中断控制LED闪烁
本帖最后由 标记重捕 于 2024-6-29 07:48 编辑一 实验目标
使用定时器0的模式0,控制P20 P21 P22所连接的LED亮灭。
二 工作原理和硬件连接
2.1 定时器0工作原理
https://pic2.zhimg.com/80/v2-12c7a28ffd8fe0ea9aa34d58e4a986e1_720w.webp
图片来自STC8H系列技术手册
https://pic4.zhimg.com/80/v2-52b160c83dad84010121909bc53aee2b_720w.webp
图片来自STC8H系列技术手册
2.2 LED的连接
https://pic2.zhimg.com/80/v2-3f3408588c04aec8c7bd39ae8bd52c55_720w.webpLED18 LED19 LED20 分别连接在P20 P21 P22。
三 代码步骤及实现
3.1 LED功能的封装
LED功能的封装可以参考下文:
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=9221 (出处: 国芯技术交流网站)]STC01 控制LED闪烁 https://www.stcaimcu.com/forum.php?mod=viewthread&tid=9221 (出处: 国芯技术交流网站)
3.2 Timer0功能的封装
https://pic1.zhimg.com/80/v2-30a8bf9d8bcd7cfb46f84277fad1e8fc_720w.webp
定义Timer0中断时间的枚举类型;定义Timer0封装的结构体类型。
https://pic1.zhimg.com/80/v2-c929db295b0e5d1583ee9f374b1e1ae8_720w.webp
定时器0初始化。
3.3 Timer0中断函数
https://pic4.zhimg.com/80/v2-0aa9dfe9faec206ff62b985777a4aaab_720w.webp
图片来自STC8H系列技术手册
Timer0中断号为1
https://pic2.zhimg.com/80/v2-da679c63d792c385e3a956576e539b6d_720w.webp
使用STCISP的“定时器计算器”功能,可以自动生成Timer0的寄存器配置代码,非常方便。
https://pic2.zhimg.com/80/v2-e2eda66309512f23ae1deab326e80555_720w.webp
定时器0中断函数,关键字为“interrupt 1”,1为Timer0中断号。
Timer0每1ms中断一次,每中断一次Timer0.TimerCnt加1,当加到500(即间隔500ms)时,控制三个LED电平翻转。表现为LED每1S亮一次。
3.3 中断初始化
https://pic2.zhimg.com/80/v2-65cd9ce239ee2c127b5387f3657260e5_720w.webp
在StartUpInit结构体成员IE_Init中,打开Timer0中断。
3.3 系统初始化
https://pic4.zhimg.com/80/v2-9d5365e2d312f8e8cf535625e73a6b7f_720w.webp
在StartUpInit.SYS_Ready()中依次进行GPIO初始化、中断初始化及定时器0初始化。
3.4 系统运行
https://pic4.zhimg.com/80/v2-82bba20119a0cd0ed390c959c6cbd1cb_720w.webp
由于LED的亮灭运行在Timer0的中断函数中,而中断在系统中持续运行,所以System.Run()中不做任何操作。
四 实验现象https://pic1.zhimg.com/v2-d17d5e2be51e36e816436b96755c8754_b.webp
可以看到,P20 P21 P22所连接的3个LED在进行闪烁,达成实验目标
这个方法不错啊,学习了 soma 发表于 2024-6-29 08:44
这个方法不错啊,学习了
客气了,互相学习{:5_300:} 清晰明了
页:
[1]