wulin 发表于 2020-9-2 06:08 谢谢师傅指点 |
截屏会更好 |
本帖最后由 wulin 于 2020-9-2 06:34 编辑 定时器/计数器1外部脉冲高电平计数。3秒计时周期,脉冲个数小于2,led点亮输出,否则led熄灭。 #include "reg51.h" sbit LED=P2^1; unsigned char count=0; void main() { TMOD= 0x51; //设置定时器模式 TL0 = 0xB0; //50毫秒@12.000MHz TH0 = 0x3C; TL1 = 0; TH1 = 0; TR0 = 1; //定时器0开始计时 TR1 = 1; //定时器0开始计数 ET0 = 1; //开定时器0中断 EA = 1; //开总中断 while(1); } void Timer0() interrupt 1 { TL0 = 0xB0; //设置定时初值 TH0 = 0x3C; //设置定时初值 count++; if(count>=60) //3秒 { count=0; if(TL1>=2) { LED=0; TL1=0; } else LED=1; } } |
P3.2外部中断,下降沿触发。3秒计时周期,脉冲个数小于2,led点亮输出,否则led熄灭。 #include "reg51.h" sbit LED=P2^1; unsigned char num=0,count=0; void main() { TMOD= 0x01; //设置定时器模式 TL0 = 0xB0; //50毫秒@12.000MHz TH0 = 0x3C; TR0 = 1; //定时器0开始计时 ET0 = 1; //开定时器0中断 IT0 = 1; //外部中断下降沿触发 EX0 = 1; //开外部中断0 EA = 1; //开总中断 while(1); } void Timer0() interrupt 1 { TL0 = 0xB0; //设置定时初值 TH0 = 0x3C; //设置定时初值 count++; if(count>=60) //3秒 { count=0; if(num>=2) { LED=0; num=0; } else LED=1; } } void exint0() interrupt 0 { num++; } |