• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

郭天祥串口通信实验,如何修改程序使发送2个字符XY

泰国看星星 2017-05-19 浏览量:1360

如何修改程序使发送2个字符XY,单片机收到字符返回给上位机“I get xy”?


程序代码如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,i,a;
uchar code table[]="I get ";

void init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0;

for(i=0;i<6;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}

}
void ser() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • #include <reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    uchar flag,i,a;
    uchar code table[]="I get xy";
    
    void init()
    {
      TMOD=0x20;
      TH1=0xfd;
      TL1=0xfd;
      TR1=1;
      REN=1;
      SM0=0;
      SM1=1;
      EA=1;
      ES=1;
    }
    void main()
    {
      init();
      while(1)
      {
        if(flag==2)
        {
           ES=0;
    
           for(i=0;i<8;i++)
           {
             SBUF=table[i];
             while(!TI);
             TI=0;
           }
           SBUF=a;
           while(!TI);
           TI=0;
           ES=1;
           flag=0;
        }
      }
    
    }
    
    void ser() interrupt 4
    {
      RI=0;
      a=SBUF;
      if(a=='X')
         flag=1;
      else if(a=='Y' && flag==1)
         flag=2;
    }
    
    以上答案 
    • 发布于 2017-05-20
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 只需简单修改即可,只需修改程序最后面的中断服务函数以及while(1)循环里面的处理函数

    #include <reg52.h>
    #define uchar unsigned char
    #define uint unsigned int

    #define is_cont_it 1
    uchar rxdata,flag_x=0,flag_y=0;
    uchar code table[]="I get xy";

    void init()
    {
    TMOD=0x20;
    TH1=0xfd;
    TL1=0xfd;
    TR1=1;
    REN=1;
    SM0=0;
    SM1=1;
    EA=1;
    ES=1;
    }

    int main()
    {
    int i;
    init();
    while(1)
    {
    if(flag_y==1)
    {
    ES=0;
    for(i=0;i<9;i++)
    {
    SBUF=table[i];
    while(!TI);
    TI=0;
    }
    ES=1;
    }
    }

    }


    void ser() interrupt 4
    {
    RI=0;
    rxdata=SBUF;
    if(rxdata=='X')flag_x=1;
    if((is_cont_it==1)&&(rxdata!='Y')&&(flag_x==1))flag_x=0;
    if(rxdata=='Y'&&flag_x==1)flag_y=1;
    }

    简单修改了中断服务函数的处理机制,如果宏定义is_cont_it为1,则单片机只会在连续收到“XY”的情况下才会发送“I get xy”字符串给上位机,如果是类似收到“XAY”或者“X1Y”的话均不会发送“I get xy”字符串给上位机;如果宏定义is_cont_it为0,则单片机只要累计接收到X和Y就会发送字符串。

    如果觉得满意就采纳吧,谢谢


    • 发布于2017-05-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

郭天祥串口通信实验,如何修改程序使发送2个字符XY