编了一个程序,mega16的三个定时器都用上了,TIMSK=0x41;T1产生PWM波驱动步进电机,T0和T2定时功能,同样定的是最大值35ms,T0溢出计数n1+1,直到n1=1D时向计算机传输数据,也就是大概1s向上发送数据,T2计数统计PWM波的个数,没有开T2的比较匹配中断是因为PWM频率过高,开了比较中断的话很容易出现中断嵌套,计数程序如下
void time2ovf(void)
{
TIMSK&=0xbf;
n2=n2+1;
if(n2==76)
{
n2=0;
s=s+1;
}
TIMSK|=0x40;
}
76这个数值是根据时钟选择外部晶振7.3728M计算出来的,s表示步进电机位移;实验结果为隔1s有上传数据,可位移s始终为0,不知道什么原因,难道是把两个定时器用在相同模式相同时间会有冲突吗?望高手指点,或者有什么更好的计算PWM脉冲个数的方法呢?求帮助 |