引用: 人中狼 发表于 2018-1-25 12:41
程序里没看出来有什么死循环之类的导致跳不出中断,你应该描述一下异常现象,以及你所想达到的目的是什么。
就程序来看,不考虑定时器的话,程序里的delay(300);应该也不会延时很长时间,所以执行完head(); 之后可能很快就会执行stop();。
对电机类的控制程序调试,需要给电机等有足够的时间执行相应的动作,不然会产生错误 ...
引用: 人中狼 发表于 2018-1-25 13:01
把定时器中断里的两个对TR0的赋值去除,不需要在定时器中断里关闭定时器。
另外测试一下关闭定时器后程序是否能达到预定的效果,也可以测定一下delay的时间,可以在加入定时器中断后做对比。
引用: 人中狼 发表于 2018-1-25 13:30
函数的说明和函数体不一样,不知道是不是错误,先改一下吧。
void delay(uint);
void head();
引用: lee_st 发表于 2018-1-25 13:42
每个中断函数里面都会有个清除中断标志的代码,你的中断里面我没有发现,
引用: 泥月月 发表于 2018-1-25 13:50
time++;
if(time>=100) time=0; //50hz
这里,这个是清除中断标志,当time=100时清零
更多回帖