//实验例程 大虾(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 */
}
}
相关文章









