本帖最后由 virtuallion 于 2024-1-3 22:06 编辑

开发板是STC89C52时钟11.0592的,定时器计时1ms,循环1000次,对LED控制位取反,理论上应该LED闪烁周期为2s,但是实际上看开发板上的灯是1.1s左右,我数了9次闪烁大概10s,找了半天原因了,找示例程序也是类似的写法,没理解这个时间怎么会差这么多,但是我用定时器做4800的串口通讯,与电脑工具通讯都正常,运行都是用的PZ-51tracker,要不对应该都不对啊,运行参数里也都是12T
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;


sbit led=P2^0; //D1


void Timer0init()
{
TMOD|=0X01; //工作方式寄存器,选择T0、方式1,16位定时/计数器
TH0=0xfc; //高8位寄存器
TL0=0x66; //低8位寄存器
ET0=1; //T0中断允许位
EA=1; //CPU中断允许位
TR0=1; //T0运行控制位,1开始工作
}


void main()
{
Timer0init();
while(1);
}


void Timer0() interrupt 1
{
static u16 i;
TH0=0xfc;
TL0=0x66;
i++;
if(i==1000)
{
led=~led;
i=0;
}
}