找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2741|回复: 4
打印 上一主题 下一主题
收起左侧

单片机通讯问题,(如发送:1,回复:完成)

[复制链接]
跳转到指定楼层
楼主
ID:54750 发表于 2013-9-8 20:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面程序,可以实现收发。现在我想给单片机发送一个代码,然后要求单片机回复一个我自己定义的字符或者文字。(比如发送:1,单片机回复:完成)
小弟初学单片机,不知道能不能实现?希望各位大侠指教!感激不尽!
/******************************
十六进制发送和接收数据                              


******************************/
#include <REG52.H>
bit Flag;
unsigned int ReData,SenData;
void main (void) {
        SCON = 0x50;             //REN=1允许串行接受状态,串口工作模式1                             
            TMOD|= 0x20;        //定时器工作方式2                    
                PCON|= 0x00;                                                           
                TH1 = 0xFD;        //baud*2  /*  波特9600、数据位8、停止位1。效验位无 (12M)
            TL1 = 0xFD;         
                TR1  = 1;                                                            
                ES   = 1;        //开串口中断                  
                EA   = 1;        // 开总中断
                                    // IE = 0x0;
        while(1)
    {
          if (Flag==1)
          {  
             SBUF=SenData;             //SUBF接受/发送缓冲器
            while(TI==0);
         TI=0;
                 Flag=0;
          }
}
}
/****************************************************
               串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
if(RI == 1)                //RI接受中断标志
{
        RI = 0;                    //清除RI接受中断标志
        ReData = SBUF;      //SUBF接受/发送缓冲器
        SenData=ReData;
        Flag=1;
}
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2013-9-9 14:19 | 只看该作者
本帖最后由 ahshmj 于 2013-9-9 18:04 编辑

你自己仿真了没有?提出的问题要清晰明了。

照这样修改一下:
/******************************
十六进制发送和接收数据                              


/******************************
十六进制发送和接收数据                              


******************************/
#include <REG52.H>
bit Flag;
unsigned char ReData;
unsigned char i,SenData[]="完成";
void main (void)
{
        SCON = 0x50;             //REN=1允许串行接受状态,串口工作模式1                              
            TMOD|= 0x20;        //定时器工作方式2                    
                PCON|= 0x00;                                                           
                TH1 = 0xFD;        //baud*2  /*  波特9600、数据位8、停止位1。效验位无 (12M)
            TL1 = 0xFD;         
                TR1  = 1;                                                            
                ES   = 1;        //开串口中断                  
                EA   = 1;        // 开总中断
                                    // IE = 0x0;
        while(1)
        {
          if (Flag==1 /*& ReData == 1*/)    //  可能要根据你接收的字符或数字应加上 & ReData =='1'  或  & ReData == 1
             {                        // if (Flag==1 & ReData == 1)
                ES=0;                     //关闭串口中断
                for(i=0;i<4;i++)
                   {SBUF=SenData;
                    while(!TI);        //等待发送结束
                    TI=0;              //软件清发送中断标志位
                   }
//             SBUF=SenData;             //SUBF接受/发送缓冲器
//            while(TI==0);
//         TI=0;
                 Flag=0;
                 ES   = 1;        //开串口中断
             }
         }
}
/****************************************************
               串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
   if(TI == 1)
       { TI=0; }
     else
        { if(RI == 1)                //RI接受中断标志
         {
        RI = 0;                    //清除RI接受中断标志
        ReData = SBUF;      //SUBF接受/发送缓冲器
//        SenData=ReData;
        Flag=1;
          }
}
}

回复

使用道具 举报

板凳
ID:7485 发表于 2013-9-9 18:03 | 只看该作者
本帖最后由 ahshmj 于 2013-9-9 18:09 编辑

{SBUF=SenData;            //再试一次     {SBUF=SenData;                //这一语句在草稿里是有的,发出去就没有了,怪事!
回复

使用道具 举报

地板
ID:7485 发表于 2013-9-9 18:07 | 只看该作者
   {SBUF=SenData[i]; //这一句本来草稿里是有[i]的,只要一发出去,就没有了,怪事!

上面一个帖子第一次发出去的时候是对的,又编辑一次有没有了!
回复

使用道具 举报

5#
ID:7485 发表于 2013-9-9 18:43 | 只看该作者
楼主注意:回复的完整的帖子里面的那一句,应该是上面的帖子里的那样{SBUF=SenData[i]........完整的程序里面无法纠正。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表