给PWMB_CCR5赋值超出0xFF出现错误
芯片:STC8HPWMB_CCR5 = 0;
Delay_ms(2000);
while(PWMB_CCR5 < 600)
{
PWMB_CCR5 += 10;
Delay_ms(1000);
printf("%d\r\n",PWMB_CCR5);
}
程序如上:PWMB_CCR5循环自增,在小于255以下的情况没有问题,超出则出现随机值,请问这是如何造成的。程序开头已经加了 P_SW2 |= 0x80;//扩展寄存器(XFR)访问使能。
打印信息:
220
230
240
250
\0270
\0290
\0310
\0330
\0350
\0370
\0390
410
430
450
204
470
224
234
244
254
\0274
\0294
\0314
\0334
\0354
\0374
\0394
218
需要改为:printf("%d\r\n",(int)PWMB_CCR5);//否则printf就会出现一些问题 加了(int)强制转换,问题依旧,超过255以后还是每隔一行输出错误,不知道是printf的问题,还是PWMB_CCR5赋值的问题。 确定是PWMB_CCR5赋值的问题,PWM外接阻容滤波,接万用表看电压,250之前确实电压稳步升高,再到后面就变随机值了,证明确实是PWMB_CCR5赋值的问题,由于随机值造成循环次数也会出错。 armfans 发表于 2025-2-3 12:13
确定是PWMB_CCR5赋值的问题,PWM外接阻容滤波,接万用表看电压,250之前确实电压稳步升高,再到后面就变随 ...
如果使用PWMB_CCR5H和PWMB_CCR5L分开赋值试试呢?
同时,可以使用PWMB_CCMR1 = 0x68;以开启预装载
要求是先写高字节然后再写低字节
CCR5的值必须小于ARR/100,你看看ARR是多少。 王昱顺 发表于 2025-2-3 12:25
如果使用PWMB_CCR5H和PWMB_CCR5L分开赋值试试呢?
同时,可以使用PWMB_CCMR1 = 0x68;以开启预装载
要求是 ...
可以了,原来16位寄存器需要分高低字节分别赋值,多谢
页:
[1]