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

怎么改51单片机中的‘I get x’程序能传输任意2个字符

470772643@qq.com 2017-05-30 浏览量:1098

下载以下这段程序到单片机后,在串口通信助手任意输入一个字符(比如k),结果就会显示“I get k”;现在是想如何通过修改以下程序可以使得任意输入两个字符(比如cy),结果就会显示“I get cy”,求助各路大神解惑。

程序代码如下:

#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)
最佳答案
  • 改要改的部分...


    uchar j=0;
    uchar a[2]={""};
    void main()
    {
    	init();
    	while(1)
    	{
    		if(flag==1)
    		{
    			ES=0;
    
    			for(i=0;i<6;i++)
    			{
    				SBUF=table[i];
    				while(!TI);
    				TI=0;
    			}
    			for(i=0;i<2;i++)
    			{
    				SBUF=a[j];
    				while(!TI);
    				TI=0;
    			}
    			ES=1;
    			flag=0;
    		}
    	}
    }
    void ser() interrupt 4
    {
    	RI=0;
    	a[j++]=SBUF;
    	if(j>=2)
    	{
    		j=0;
    		flag=1;
    	}
    }
    以上
    • 发布于 2017-05-31
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 改好了,程序如下:

    #include <reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    uchar flaga=0,flagb=0,i,a,b,flagrx;
    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(flaga==1&&flagb==1&&flagrx==1)
    {
    ES=0;
    flagrx=0;
    for(i=0;i<6;i++)
    {
    SBUF=table[i];
    while(!TI);
    TI=0;
    }
    SBUF=a;
    while(!TI);
    TI=0;
    SBUF=b;
    while(!TI);
    TI=0;
    ES=1;
    flaga=0,flagb=0;
    }
    }

    }
    void ser() interrupt 4
    {
    RI=0;
    flagrx=1;
    if(flaga==0&&flagb==0)
    {
    a=SBUF;
    flaga=1;
    }
    if(flaga==1&&flagb==0)
    {
    b=SBUF;
    flagb=1;
    }
    if(flaga==1&&flagb==1)
    {
    a=SBUF;
    flaga=0,flagb=0;
    }
    }

    当单片机收到一个字符(比如‘A’)时,单片机不会有任何反应;
    当单片机收到两个字符(比如“AB”)时,单片机会发送“I get AB”。

    • 发布于2017-05-30
    • 举报
    • 评论 4
    • 0
    • 0
8769cc5bd61fb0d7 回复了 donatello :大哥,我把这段程序下载到单片机里,功能实现不了,在串口通信助手里输入AB,结果没有东西显示出来 回复
8769cc5bd61fb0d7 回复了 donatello :然后一直没想通为什么最后要加个if语句(让a=SBUF以及让flaga=0,flagb=0)?求解惑 回复
donatello 回复了 8769cc5bd61fb0d7 :稍微修改了下,你再看看效果如何? 回复
donatello 回复了 8769cc5bd61fb0d7 :最后这个语句的作用是让单片机接收够两个字符之后能够继续接收新的字符 回复

相关问题

问题达人换一批

怎么改51单片机中的‘I get x’程序能传输任意2个字符