各位前辈好,最近发现一个问题,那就是单片机定时器的定时时间。请各位解答 一下,谢谢!程序如下:
1.51单片机的,晶振频率12MHz,程序只摘录与定时器0有关的程序片段。
void main(void)
{
char key;
flag=0;
P3_4 = 1;
count = 0;
EA = 1; //允许CPU中断
TMOD = 0x11; //设定时器0和1为16位模式1
ET0 = 1; //定时器0中断允许
TH0 = 0xFF;
TL0 = 0xE6; //设定时值0为38K 也就是每隔26us中断一次
TR0 = 1;//开始计数
}
//定时器0中断处理
void timeint(void) interrupt 1
{
TH0=0xFF;
TL0=0xE6; //设定时值为38K 也就是每隔26us中断一次
count++;
}
void SendIRdata(char p_irdata)
{
int i;
char irdata=p_irdata;
//发送9ms的起始码
endcount=223;
Flag=1;
count=0;
P3_4=0;
do{}while(count<endcount);
//发送4.5ms的结果码
endcount=117;
Flag=0;
count=0;
P3_4=1;
do{}while(count<endcount);
//后面还有其他地址,数据,反码处理等
}
我想问下,定时器0,每个26us中断一次,count加1。9ms的起始码为count=223,那么就是223*26us=5798us,这样计算也不等于9ms,是不是我遗漏了什么。请问这个具体应该怎样计算,我用attiny2313做遥控器时也发现同样的问题。 |
|