解决了精度问题,让我们再次回到我们的电机控制程序上吧。上面给出的两个例程都不是实用的程序,为什么?因为程序中存在大段的延时,而在延时的时候是什么其它的事都干不了的,想想第二个程序,整整 200 秒什么别的事都干不了,这在实际的控制系统中是绝对不允许的。那么怎么改造一下呢?当然还是用定时中断来完成了,既然每个节拍持续时间是2ms,那我们直接用定时器定时 2ms 来刷新节拍就行了。改造后的程序如下:
- #include <reg52.h>
- unsigned long beats = 0; //电机转动节拍总数
- void StartMotor(unsigned long angle);
- void main(){
- EA = 1; //使能总中断
- TMOD = 0x01; //设置 T0 为模式 1
- TH0 = 0xF8; //为 T0 赋初值 0xF8CD,定时 2ms
- TL0