STC15W404AS 单片机,T2 + 外部中断0,出现BUG
STC15W404AS 外部中断0 + T2 读取PWM脉宽和周期,出现脉宽在255的倍数的时候会出错,比如PWM在1275(255*5)的时候数据会显示1020,而在1020的时候数据会显示765.。。。什么情况?/**************************************************************************************************
函数名:Timer2Init( )
功能: 定时器初始化函数
作者:
时间:
备注: 1T
/***************************************************************************************************/
void Timer2Init(void) //1000微秒@12.000MHz
{
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0; //设置定时初值
T2H = 0; //设置定时初值
// IE2 |= 0x04; //开启定时器2中断
// AUXR |= 0x10; //定时器2开始计时
AUXR &= 0xEF; //定时器2停止计时
}
/**************************************************************************************************
函数名:INT0_Init( void )
功能: 外部中断0初始化
作者: 数码人科技
时间: 2018-4-5
备注:
/***************************************************************************************************/
void INT0_Init( void )
{
IT0 = 0; //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
EX0 = 1; //使能INT0中断
// INT_CLKO |= 0x10; //使能外部中断2
PX0 = 1 ; //设置中断优先级
}
void exint0() interrupt 0 //INT0中断入口
{
if( INT0 == 1 ) { AUXR &= 0xEF;;PWM_ALL = T2H*255 + T2L ;T2H = T2L = 0 ; AUXR |= 0x10; }
else { PWM_H = T2H*255 + T2L;}
}
也许你读的时候T2L正在向T2H进位,建议多读两次判断 一下,或者干脆把T2关掉再读。 lcw_swust 发表于 2018-12-10 18:13
也许你读的时候T2L正在向T2H进位,建议多读两次判断 一下,或者干脆把T2关掉再读。 ...
试一下,关掉再读!!! 刚好出现进位了,要关闭T2再读。经常看到有人出现这个问题,就怀疑到MCU了,常见的是测频率,刚好差了256HZ。 小李非刀 发表于 2018-12-12 23:40
刚好出现进位了,要关闭T2再读。经常看到有人出现这个问题,就怀疑到MCU了,常见的是测频率,刚好差了256HZ ...
是的,解决了!关闭之后正常!
页:
[1]