单片机的T0与T1中断计时不一

来源:百度知道 编辑:UC知道 时间:2024/05/22 19:49:29
利用proteus仿真软件模拟.
在12MHz下,用T0计时能准确延时1s,但是用T1却延时了1.3s
程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
uchar num=0;

void main ()
{
TMOD = 0x10;
TH1 = (65536-50000)/256;
TL1 = (65536-50000)%256;
EA = 1;
ET1 = 1;
TR1 = 1;
while (1)
{
if (num == 20)
{
num = 0;
led1 = ~led1;
}
}
}

void T1_time() interrupt 3
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
num++;
}
与T0延时程序不同的只有定时器的初始化变量而已,数值上并无任何不一.
为什么T0可以准确定时1s,但T1会定时1.3s呢?
求高人指点.!

失误处在此此:
void T1_time() interrupt 3
{
TH0 = (65536-50000)/256; TH1
TL0 = (65536-50000)%256; TL1
num++;
}

应改为
void T1_time() interrupt 3
{
TH1 = (65536-50000)/256;
TL1 = (65536-50000)%256;
num++;
}

每次定时器初值 成了0
延时 = 65535 * 20 us 大概是1.3s

分数拿上来

TMOD = 0x11; 试试。