3597|6

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

哪位大虾帮忙看看这个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);
                          }
                        }

                   }
   
               }
   }
}

最新回复

关注  详情 回复 发表于 2009-11-8 21:53
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
UART始终没有收到数据?
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
仿真中收发都正常,但是给temp赋值后,无法触发相应temp值的if事件。

在硬件上跑的时候反应为,串口每隔5秒接收到一次0xBB,但发什么信息都没用。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
信息发出去没有?发出去是什么?
 
 
 

回复

46

帖子

0

TA的资源

一粒金砂(初级)

5
 
while(WaitCMD==0)
          {
  ENA=1;IN1=1;IN2=1; //电机停转
  SBUF=0xBB; //检查
            Delay(5000);
        
      串口是没有问题的,说明就只运转了上面这一小段程序。SBUF=0xBB

 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

6
 
是的,但是如果我通过串口助手往串口发数据(比如0x61),RI置1,应该能触发相应事件的对么?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
关注
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表