我要效果是,5s内接收第一次大于额定值的数据,小车启动,进入下一个5s,如果接收第二次大于额定值的数据,小车加速,一直这样下去,知道在5s内没有接收到大于额定值的数据,小车停止,为什么我程序没反应,求大神指出程序哪里存在问题,采用的是定时器0中断,中断时间为50ms
#include "stc12c5a60s2.h"
#include "pwm.h"
#include "car_control.h"
#include "uart.h"
#include <intrins.h>
#define const_data 475
unsigned int jishi=0,cishu=1,uiDataTemp=0;
void system_init(void)
{
pwm_init();
pwm_open();
set_pwm_duty(0,140);
set_pwm_duty(1,140);
uart_init();
}
void main(void)
{
system_init();
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x4C; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA=1;
while(1);
}
void time() interrupt 1
{
jishi++; //定时5S内,jishi变量最大20
uiDataTemp=uart_service();//获取处理后接收到并处理的数据
if(jishi<=20&&cishu==1&&uiDataTemp>=const_data)//第一次接收数据且在5s内,则开启小车
{
cishu++; //接收数据次数
CAR_FORWARD; //小车启动
uiDataTemp=0;//及时清零 防止重复触发
jishi=0; //计时变量清0,进入下一个5s
}
else if(jishi<=20&&cishu>=2&&uiDataTemp>=const_data)//第二次及多次接收数据,小车加速
{
cishu++;
set_pwm_duty(0,140+cishu*5); //小车PWM调速
set_pwm_duty(1,140+cishu*5);
uiDataTemp=0; //及时清0
jishi=0; //计时变量清0,进入下一个5s
}
else if(jishi>20)//如果超过5s没接收到数据,小车停止
{
CAR_STOP; //小车停止
TR0=0; //关中断
}
}
|