- /*********************************************************************************************
- 编写:刘海龙
- 程序名:定时器中断控制led闪烁
- 硬件支持:
- 2016.10.26
- /*********************************************************************************************/
- #include<reg52.h>
- unsigned char m;
- sbit led = P1^7;
- sbit key3 = P1^2;//key3按下灯会亮500毫秒灭500毫秒、key3再次按下灯保持状态
- /*******************************************/
- void delay1ms (unsigned int a){ // 1ms延时程序
- unsigned int i;
- while( --a != 0){
- for(i = 0; i < 125; i++);//STC单片机在外部晶振为12MHz时i值上限为600
- } //AT89C51单片机在外部晶振为12MHz时i值上限为125
- }
- void main(void)
- {
- TMOD = 0x11; // 定时/计数器0,1工作于方式1
- TH0 = 0x3c; // 预置产生50ms时基信号
- TL0 = 0xb0;
- EA = 1; // 开总中断
- TF0= 0;
- ET0 = 1; // 定时/计数器0允许中断
- TR0 = 0; // 开闭定时/计数器0
- while (1)
- {
- if(key3==0)
- { //K3按下计时器计时/停止
- delay1ms(10);
- if(key3==0)
- {
- TR0 = ~TR0;//计时器计时/停止
- while(!key3);
- }
- }
- }
- }
- /*************************************************/
- void tiem0(void) interrupt 1 //50毫秒@12.000MHz
- {
- m++;
-
- if (m>9)//500毫秒到
- {
- m=0;
- led=~led; //led亮500毫秒灭500毫秒
- }
- TL0 = 0xB0; //设置定时初值
- TH0 = 0x3C; //设置定时初值
- }
复制代码 |