定时器不够用怎么办?当然是吧一个定时器分成多个使用,用定时器中断记录定时器中断次数,所要的定时的时间=中断次数*单次定时时长。例如1s定时=20*50ms
例如用一个定时器控制两个led灯以不同频率闪烁,不用使用软件延时,不占用CPU资源
单片机源程序如下:
- #include <reg52.h>
- sbit LED1 = P1^2;
- sbit LED2 = P1^4;
- unsigned char t,s;
- void time0_Init()
- {
- TMOD = 0x01;
- TH0 = 0x3C; //50ms
- TL0 = 0xB0;
- TR0 = 1;
- EA = 1;
- ET0 = 1;
- }
- void timer0() interrupt 1 //2个分频器
- {
- t++;
- s++;
- TH0 = 0x3C;
- TL0 = 0xB0;
- if(s==5) //250ms
- {
- s = 0;
- LED1 = !LED1;
- }
- if(t==20) //1000ms
- {
- t = 0;
- LED2 = !LED2;
- }
- }
- void main()
- {
- time0_Init();
- while(1);
- }
复制代码
|