本帖最后由 标记重捕 于 2024-6-29 07:48 编辑
一 实验目标
使用定时器0的模式0,控制P20 P21 P22所连接的LED亮灭。
二 工作原理和硬件连接
2.1 定时器0工作原理

图片来自STC8H系列技术手册

图片来自STC8H系列技术手册
2.2 LED的连接
 LED18 LED19 LED20 分别连接在P20 P21 P22。
三 代码步骤及实现
3.1 LED功能的封装
LED功能的封装可以参考下文:
3.2 Timer0功能的封装

定义Timer0中断时间的枚举类型; 定义Timer0封装的结构体类型。

定时器0初始化。
3.3 Timer0中断函数

图片来自STC8H系列技术手册
Timer0中断号为1

使用STCISP的“定时器计算器”功能,可以自动生成Timer0的寄存器配置代码,非常方便。

定时器0中断函数,关键字为“interrupt 1”,1为Timer0中断号。
Timer0每1ms中断一次,每中断一次Timer0.TimerCnt加1,当加到500(即间隔500ms)时,控制三个LED电平翻转。表现为LED每1S亮一次。
3.3 中断初始化

在StartUpInit结构体成员IE_Init中,打开Timer0中断。
3.3 系统初始化

在StartUpInit.SYS_Ready()中依次进行GPIO初始化、中断初始化及定时器0初始化。
3.4 系统运行

由于LED的亮灭运行在Timer0的中断函数中,而中断在系统中持续运行,所以System.Run()中不做任何操作。
四 实验现象
可以看到,P20 P21 P22所连接的3个LED在进行闪烁,达成实验目标
|