- #include
-
- sbit LED1 = P1^0; // 设置LED1灯的接口
- sbit LED2 = P1^1; // 设置LED2灯的接口
-
- unsigned int cnt1 = 0; // 设置LED1灯的定时器溢出次数
- unsigned int cnt2 = 0; // 设置LED2灯的定时器溢出次数
-
-
- // 定时器T0
- void Init_Timer0()
- {
- TMOD |= 0x01;; // 定时器T0工作在模式1
- TH0 = 0xB8; // 设置重置值,高位 定时0.02秒 a = 1/11.0592(时钟周期) b = 12* a (机器周期) (256*256 -1) - ( 0.02 / b )
- TL0 = 0x00; //设置重置值,低位
- TR0 = 1; // 启动T0
- }
-
- // 定时器T1
- void Init_Timer1()
- {
- TMOD |= 0x10; // 定时器T1工作在模式1
- TH1 = 0xB8; // 参照定时器T0
- TL1 = 0x00; // 参照定时器T0
- TR1 = 1; // 启动T1
- }
-
- void main()
- {
- Init_Timer0();
- Init_Timer1();
-
- while(1)
- {
-
- if(TF0) // 定时器T0溢出
- {
- TF0 = 0; // 清除溢出标志
- TH0 = 0xB8; // 设置重置值,定时1s
- TL0 = 0x00;
- cnt1++;
- // 间隔 0.02*50 = 1秒
- if(cnt1 > 50){
- cnt1 = 0;
- LED1 = !LED1; // 翻转LED1状态
- }
-
- }
-
- if(TF1) // 定时器T1溢出
- {
- TF1 = 0; // 清除溢出标志
- TH1 = 0xB8; // 设置重置值,定时2s
- TL1 = 0x00;
- cnt2++;
- // 间隔 0.02*100 = 2秒
- if(cnt2 > 100){
- cnt2 = 0;
- LED2 = !LED2; // 翻转LED2状态
- }
- }
- }
- }
使用51单片机控制T0和T1分别间隔1秒2秒亮灭逻辑