|
哪位大虾帮忙看看这个keilC51程序,串口通讯相关的。
[复制链接]
第一次写keil程序,还望不吝赐教。现在的问题是,仿真正常temp可以正确赋值,但是仿真到判断temp值的时候都是直接跳过,无法识别。将判断条件设为temp==0,可以触发也就是说,temp的值始终是0。
烧到51里实测也是一样一直停在
ENA=1;IN1=1;IN2=1; //电机停转
SBUF=0xBB; //检查
Delay(5000);
串口助手不断的接收到0xBB,但发0x61和0x62都不作用。
麻烦解决下这个问题,如果程序中有什么不合理的地方也请一并指出。,谢谢
#include
#include
#include
#include
#include
sbit IN1 = P2^0;
sbit IN2 = P2^1;
sbit ENA = P2^2;
sbit FW = P1^0;
sbit WaitCMD = P1^1;
sbit LastCount =P1^3;
unsigned char temp;
void Delay(unsigned int i)//延时程序,i是时间参数
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}
void main(void)
{
SCON=0x40; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD=0x20; //TMOD: timer 1, mode 2, 8-bit reload
PCON&=0x80; //SMOD=1;
TH1=0xFD; // 9600bps
TL0=0xFD;
TR1=1 ; //timer 1 run
REN=1; //receive enable
ENA=1;IN1=1;IN2=1;
SBUF=0xAA; //启动信息
Delay(300);
while(1)
{
/*
if(WaitCMD==0||LastCount==0||FW==0)
{
Motor(1,1,0);//如果一开始机内有东西遮住光电门,电机反转5秒清除
Delay(5000);
}
*/
ENA=1;IN1=1;IN2=1;
while(FW==0)
{
ENA=1;
IN1=0;
IN2=1; //电机正转
while(WaitCMD==0)
{
ENA=1;IN1=1;IN2=1; //电机停转
SBUF=0xBB; //检查
Delay(5000);
if(RI)
{
temp=SBUF;
RI=0;
if(temp==0x61) //键盘输入a=0x61
{
ENA=1;IN1=1;IN2=0;
Delay(2000);//正转2秒送入
SBUF=0xCC;//送入
Delay(300);
}
if(temp==0x62) //键盘输入b=0x62
{
ENA=1;IN1=0;IN2=1;
Delay(2000);//反转2秒退出
SBUF=0xEE;//退出
Delay(300);
}
}
}
}
}
}
|
|