本帖最后由 VCC 于 2024-11-29 17:53 编辑
根据你的思路,这样可以做到让你的灯每50ms切换一次。
- void zhongduan() interrupt 1
- {
- if(TF0){ // 检查TF0是否为1
- P60 = !P60; // 切换P60引脚状态
- TF0 = 0; // 清除溢出标志
- }
- }
复制代码
表现为灯急速闪烁,几乎无法观察
如果你想每20次,灯切换一次的话,代码要复杂一点点
- #include <STC32G.H>
-
- unsigned char counter = 0; // 定义一个计数器变量
-
- void sys_init()
- {
- P4M0=0X00; P4M1=0X00; P6M0=0X00; P6M1=0X00; P40=0; WTST=0X00; EAXFR=1;
- }
-
- void time()
- {
- TM0PS=0; TMOD=0X00; TH0=0X3C; TL0=0XB0; TF0=0; TR0=1;
- }
-
- void zhongduan() interrupt 1
- {
- if(TF0){ // 检查TF0是否为1
- counter++; // 每次中断增加计数器
- if(counter >= 20){ // 检查计数器是否达到20
- P60 = !P60; // 切换P60引脚状态
- counter = 0; // 重置计数器
- }
- TF0 = 0; // 清除溢出标志
- }
- }
-
- void main()
- {
- ET0=1; // 使能定时器0中断
- EA=1; // 使能全局中断
- sys_init(); // 系统初始化
- time(); // 初始化定时器
- while(1);
- }
复制代码
另外建议你核实一下你的定时器配置,最好用这个创建
|