程序略有修改,实测完美复现
- #include "Ai8051U.H"
- #include "intrins.h"
-
- unsigned int num;//计数变量
- bit flag;//中断标志
-
- void Timer11_Isr(void) interrupt 67
- {
- if(++num>=500) // 500ms中断
- {
- num=0;
- flag=1;
- }
- }
-
- void Timer11_Init(void) //1毫秒@11.0592MHz
- {
- P_SW2 |= 0x80; //使能访问XFR寄存器
- T11CR &= 0xf3; //选择时钟源 (系统时钟SYSclk)
- T11CR |= 0x10; //定时器时钟1T模式
- T11L = 0xCD; //设置定时初始值
- T11H = 0xD4; //设置定时初始值
- T11CR |= 0x80; //定时器11开始计时
- T11CR |= 0x02; //使能定时器11中断
- }
-
- void main(void)
- {
- // 将所有I/O设为准双向口
- P0M1 = 0x00; P0M0 = 0x00;
- P1M1 = 0x00; P1M0 = 0x00;
- P2M1 = 0x00; P2M0 = 0x00;
- P3M1 = 0x00; P3M0 = 0x00;
- P4M1 = 0x00; P4M0 = 0x00;
- P5M1 = 0x00; P5M0 = 0x00;
- P6M1 = 0x00; P6M0 = 0x00;
- P7M1 = 0x00; P7M0 = 0x00;
- Timer11_Init();
-
- EA = 1; // 打开总中断
-
- while (1)
- {
- if(flag)
- {
- flag=0;
- P20=!P20; //闪烁
- }
- }
- }
复制代码
|