单片机 计时器

来源:百度知道 编辑:UC知道 时间:2024/05/28 10:19:36
我在程序里启动了两个timer(timer0,timer1),但不写定时器1的中断函数,这时,timer0也不能正常工作。为什么?

程序如下:
#include <regx51.h>

#define TIMER0_COUNT 0x3cb0
code seven_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char timer0_tick;

void Timer0() interrupt 1 using 1
{
TR0=0;
TL0=(TIMER0_COUNT & 0x00ff);
TH0=(TIMER0_COUNT >> 8);
TR0=1;

P0=seven_seg[timer0_tick/20];
P1=0xbf;

timer0_tick++;
if(timer0_tick==200)
{
timer0_tick=0;
}
}

void Initialize()
{
EA=0;
timer0_tick=0;
TMOD=0x21;
TR1=0;
ET1=0;
TL1=0xe5;
TH1=0xe5;
ET1=1;
TR1=1;
TR0=0;
ET0=0;
TL0=(TIMER0_COUNT & 0x00ff);
TH0=(TIMER0_COUNT >> 8);
ET0=1;
TR0=1;
EA=1;
}

void main(void)
{
Initialize();
while(1)
{
}
}
T1我是要来做串口通信的时钟的,要怎么办?

你在 Initialize() 里开启了TIMER1中断,但没有写T1的中断程序,导致T1溢出时程序跑飞。
只要加上一段如下程序就行了。
void timer1() interrupt 3 using 1
{
}
如果要让T1作波特率发生器,只要把T1设置成方式2,设好初值,把ET1关掉,把TR1打开就可以了,也不必理会T1的中断向量了。

回答的不错啊。