设计思路:
1.单片机收到电机启动命令号,调用启动电机程序,启动电机。电机启动后通过行程标志判断电机是否到达预定行程,如果到达,停止电机,调用电机停止函数。
2.行程计算是通过中断函数用定时器来实现的。假设到达预定行程需要5s,则在5s的时候,置位中断标志位。主函数判断标志位,如果为1,则调用电机停止函数。
/********************T1定时器定时中断**************************/
if(TMR1IF&&TMR1IE)
{
TMR1IF=0;
t1_count++;
TMR1H=0xb;
TMR1L=0xdb;//延时时间:100ms
t1_flag=0;//进入中断清除T1定时器标志位;定时时间到后置位T1定时器标志位。
if(t1_count>=20)
{
t1_count=0;
LED1=~LED1;
t1_flag=1;
}
}
switch(Receive_Array[3])
{
case 0x33://启动电机
BagData_uart(0x33,2,Motor_OK);//返回启动成功后的数据包
motor_start();
while(!t1_flag);
motor_stop();
//while(t1_flag==0);
//jiansu=1;
//while(t1_flag)
//{
// motor_stop();//debug执行不到此语句
//break;//终止while循环
//}
break;
|