//实验例程 大虾(DX-51)学习板 定时器0、1使用例程
#include #include //MCU51嵌入式专业仿真器占用3个字节程序空间0x003b,0x003c,0c003d, //使用code数组声明防止编译器将函数定位于此三字节所在程序空间上 unsigned char code DX58[3] _at_ 0x003b; unsigned char count; unsigned char direction; unsigned char delay1; unsigned char delay2; void timer0(void) interrupt 1 using 0 { TL0=0x06; TH0=delay2; /* 定时器0中断 */ if (++delay1 > 4){ delay1 = 0; if (++count > 7) count = 0; P1 |= 0x0ff; P1 &= ~(0x01 << count); } /* 定时器0中断 */ } void timer1(void) interrupt 3 using 0 { TL1=0x06; TH1=0x00; /* 定时器1中断 */ if (direction){ if (++delay2 == 128)direction = 0; } else { if (--delay2 == 0)direction = 1; } /* 定时器1中断 */ } // 定时器功能演示程序 // P01、P02、P03、P04脚接发光二极管led1、led2、led3、led4 // 每个发光二极管串上电阻接到5V电源上, 运行本演示程序 // 将会看到发光二极管被依次点亮和熄灭, 比街上的彩灯好看 // 多了,不信你试试看。 void main(void){ ET0 = 1; /* 允许定时器0中断 */ ET1 = 1; /* 允许定时器1中断 */ TMOD = 0x11; /* 定时器工作方式选择 */ TL0 = 0x06; TH0 = 0x00; /* 定时器赋予初值 */ TL1 = 0x06; TH1 = 0x00; /* 定时器赋予初值 */ TR0 = 1; /* 启动定时器 */ TR1 = 1; /* 启动定时器 */ EA = 1; /* 开总中断 */ delay2 = 0; direction = 1; while(1){ _nop_ (); /* delay for hardware */ } }
相关文章