我想用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的初值手算和工具算出来都是这个值。
热门产品 :
CH32L103: 32位PDUSB低功耗单片机