C51定时器计数不准
搜知游识 2015-06-07 03:37:20 代码用的数据手册上的,计数1S,总是要慢一些。代码如下,实在找不到原因。
#include "STC11XX.H"
#include "usart.h"
#define FOSC 22118400L
#define uint8 unsigned char
#define uint16 unsigned int
uint16 Cnt1sFlag = 0;
void UartIni(void)
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = TL1 = -(FOSC/12/32/baud);
TR1 = 1; ES = 1;
EA = 1;
}
void main()
{
AUXR = 0X80;//定时器0为1T模式
TMOD = 0x01;//16位自动重装载模式
TL0 = (65536-FOSC/1000);
TH0 = (65536-FOSC/1000) >> 8; //设置定时器定时1ms
ET0 = 1;
TR0 = 1;
UartIni(); // 串口初始化
while(1)
{
if(Cnt1sFlag >= 1000)
{
Cnt1sFlag = 0;
UARTSendByte(0xff);
}
}
}
//定时器0中断服务程序
void Timer0_Routine(void) interrupt 1
{
Cnt1sFlag++ ;
}