我想用CH552定时器0,配置成8位自动重装载模式,100us产生一次中断,然后1s切换LED状态,但是设置完LED是4s才切换状态,不知道是哪里配置错了呢?
代码:
sbit LED = P3^4;
void main(void)
{
//设置时钟
SAFE_MOD = 0x55; //进入安全模式
SAFE_MOD = 0xAA;
CLOCK_CFG &= ~bOSC_EN_XT; //关闭外部晶振
CLOCK_CFG |= bOSC_EN_INT; //使能内部晶振
CLOCK_CFG = CLOCK_CFG & (~MASK_SYS_CK_SEL) | 0x06; //24M
SAFE_MOD = 0x00;//退出安全模式
//LED配置
//LED -- P3.4 -- 推挽输出
P3 &= ~(1 << 0x04);
P3_DIR_PU |= (1 << 0x04);
P3 |= (1 << 0x04);//关闭LED
//定时器0初始化
T2MOD &= ~bT1_CLK; //系统时钟12分频
TMOD = TMOD & 0xF0 | bT0_M1; //模式2
TL0 = 0x38; //赋初值 100us
TH0 = 0x38;
ET0 = 1;
TR0 = 1;
EA = 1;
while(1);
}
//定时器中断
void
time0Interrupt(void) interrupt INT_NO_TMR0 using 1
{
static uint16_t cnt = 0;
cnt++;
if(cnt >= 10000)
{
cnt = 0;
LED ^= 1;
}
} 之后我用串口线接到LED引脚,引脚每次从高电平到低电平跳变时,串口会收到0x00
前后收到0x00的时间基本都是8s,也就是LED闪烁的时间间隔为4s,TH0和TL0的初值手算和工具算出来都是这个值。