4334|8

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助:单片机串口接收 [复制链接]

大家好,我是刚来的,也是一个新手,有个问题想请教一下,哪位大虾帮我看看,
  ……
  if(RI)                                   //等待应答信号,接收判断标志   
                {       
                    RI=0;
            for(j=0;j<7;j++)                        //串口接收到的7组数据
              {
                          
                mid=SBUF;                     //接收到的应答信号
                rcv_data[j]=mid;
                if(rcv_data[j]==rcv_request[j])
                  LED2=0;                              //正常通信的话LED2灯亮
                Delay(100);
                  }
                    RB8=0;
               
                }
我编的是一个串口中断接收程序:我发出去一组数据后等待应答信号,并判断是否正确,用指示灯来显示,可总是行不通!
我积分少,请多见谅!

最新回复

还是不对,呜…… 我发送一组握手信号后,等待接收端的应答信号,有七个数组成的数组, 现在有两个问题没有解决: 1,我不知道怎么处理这七个数,由指示灯来显示的话也是一个数一个数的显示,而不是都正确时才显示灯亮 2,我的接收应答信号程序是不是有问题? 请大虾们多指教,我很苦恼,谢谢了先!     ……                            while(1)         {                      TR1=1;                                      //启动定时器1                       for(i=0;i  详情 回复 发表于 2008-8-21 17:30
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
void Wrbuf(char tmp)
{
  rcv_data[j]== tmp;
   写在数据组里,注意数据顺序
}


中断中:

if(RI)                                  //等待应答信号,接收判断标志  
{
    RI=0;
  wrbuf(SBUF);      //接收到的应答信号
}

处理:

if (strcmp(rcv_data,rcv_request) = 0)
{
    LED2=~LED2;                              //正常通信的话LED2灯亮
     Delay(100);
}
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
没有人解答?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
你好
我感觉你的格式很好,可是我也觉得我和你写的是一个意思,我错在哪里了?嘿嘿,谢谢
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
你的程序好像有点问题, for循环里的SBUF会随j变化?供参考。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(中级)

6
 
我需要判断七组数据,你觉得我怎么处理好呢?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
一种简单的方法就是不要把j定义成局部变量。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
for(j=0;j <7;j++)                        //串口接收到的7组数据
              {
  while(!Ri);
                mid=SBUF;                    //接收到的应答信号
            RI=0;   
  rcv_data[j]=mid;
                if(rcv_data[j]==rcv_request[j])
                  LED2=0;                              //正常通信的话LED2灯亮
                Delay(100);
          }



我给大家特别推荐的两款产品,非常棒!!!

1. c8051f 单片机(c2 ,jtag)和at89s5x单片机(isp)二合一串口编程下载线,支持3伏(c8051f 单片机),5伏(at89s5x单片机)电源,
目前通过实际验证可编程下载的芯片:c8051f310、c8051f320、c8051f330D、c8051f340、c8051f350、c8051f360、c8051f410、c8051f020、c8051f120、at89s51、at89s52、at89s8253等。

2. c8051f320 usb demo 板(是目前学习和应用usb 性价比特别高的一款单片机,资料全!上手快!)软硬件资源丰富:可提供硬件原理图;USB demo板上位机应用软件源代码(VB6 和VC6),以及usb底层驱动和驱动安装信息;USB demo板单片机固化程序的c51源代码。同样可以提供在keil下串口isd51源代码,可以硬件单步,连续运行和仿真!!!

陕西杨工c8051f单片机博客
手机 13002928013
http://c8051fmcu.blog.sohu.com
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
还是不对,呜……
我发送一组握手信号后,等待接收端的应答信号,有七个数组成的数组,
现在有两个问题没有解决:
1,我不知道怎么处理这七个数,由指示灯来显示的话也是一个数一个数的显示,而不是都正确时才显示灯亮
2,我的接收应答信号程序是不是有问题?
请大虾们多指教,我很苦恼,谢谢了先!
    ……                       
    while(1)
        {   
                  TR1=1;                                      //启动定时器1
      
               for(i=0;i<5;i++)                            //发送5组数据到串口
              {
                  SBUF=Send_serial_Data;
                   while(TI==0)                             //等待每个数据发送完毕
                    {}
                  TI=0;
                  Delay(200);
             }
        LED1=~LED1;                                  //发送数据状态为LED1闪烁         
            
        if(RI)                                       //等待应答信号,接收判断标志   
          {       
            RI=0;
            for(j=0;j<7;j++)                         //串口接收到的7组数据
              {
                mid=SBUF;                            //接收到的应答信号
                rcv_data[j]=mid;
                if(rcv_request[j]^rcv_data[j]==0)         //判断节点是否准备完毕
                  LED2=~LED2;                              //正常通信的话LED2灯亮
                Delay(100);
                  }
                    RB8=0;
               
                }
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表