keilc51软件如何进行串口通信?

要求:单片机收到 PC 发送过来的数据后,将该数据直接回送给 PC。被特率和晶振已给。
如何用keilc51软件实现PC向单片机发送数据?然后再显示屏幕上?

img


#include"REG52.H"
void Init(){
    PCON |= 0x80;//SMOD=1
    SCON=0x50;//方式一,且REN=1
    TMOD=0x20;
    TH1=-6;
    TL1=-6;
    TR1=1;
}
void main(){
    unsigned char dat;
    Init();
    while(1){
        while(RI==0);
        dat=SBUF;
        RI=0;
        SBUF=dat;
        while(TI==0);
        TI=0;
    }
}

这个需要用串口调试助手的软件,,,详细的找本书下载下随书光盘💿一般第二章就是调试uart串口的,,

推荐金沙滩的51单片机学习指南,清华大学出版社

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: [单片机] KeilC51单块数码管演示与原理中的 让数码管循环显示0-9数字 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    开启数码管对应的LED即可显示不同的数字,该方法和我们开启流水灯代码是基本一致的,思路也相同,具体内容这里不再赘述,详细可看“单片机”分类下的文章:《Proteus电路基础》


    打开keil uvision5开始编写代码

    有两处新增不同之处,这里做出解释

    1. #define out P0 定义一个输出IO口P0的宏,它的名称为out
    2. uchar code seg[]是一个数组,注意code关键词不可以漏掉!seg才是该数组的标识符
    3. 这里使用数组类似于程序设计的“打表法”,也就是把显示对应LED的十六进制代码都放进数组里面,等到我们需要显示对应数字时,直接调用数组元素即可!
    4. 0xc0对应显示数字0,0xf9显示数学1,以此类推直到0x01,它是复位标志,下文会讲
    #include<reg51.h>
    #include<intrins.h>
    
    #define uchar unsigned char
    #define uint unsigned int
    #define out P0
    
    uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x01};
    

    添加一个delay延迟函数,这里不细说他家自己写就好

    循环显示代码详解:

    1. out=seg[i]更改IO口P0下属管脚的电平,来显示对应的LED数字
    2. i++ 每次i都递增一次,以便下次取出数组下一位来显示下一个数字
    3. if(seg[i]==0x01) i=0当检测到复位标志后,立即将i设置为0,这样子就可以循环重复从0开始再走一遍了!
    void main(){
    	uchar i;
    	while(1){
    		out=seg[i];
    		delay(100);
    		i++;
    		if(seg[i]==0x01) i=0;
    	}
    }
    

    完整代码

    #include<reg51.h>
    #include<intrins.h>
    
    #define uchar unsigned char
    #define uint unsigned int
    #define out P0
    
    uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x01};
    	
    void delay(uint k){
    	uchar i,j;
    	while(k--){
    		for(i=0;i<255;i++);
    		for(j=0;j<255;j++);
    	}
    }
    
    
    void main(){
    	uchar i;
    	while(1){
    		out=seg[i];
    		delay(100);
    		i++;
    		if(seg[i]==0x01) i=0;
    	}
    }
    
    
    
    
  • 以下回答来自chatgpt:

    回答:

    要实现串口通信,您需要按照以下步骤进行操作:

    1. 在Keil C51中,打开您的工程,并添加串口通信的库文件。您可以找到keilc51中自带的serial.h和serial.c文件,这是串口通信的库文件。

    2. 编写代码,为串口进行初始化,设置波特率和晶振等参数。我们可以使用serial.c文件中的serial_init()函数来创建一个初始化串口的函数。

    #include <reg52.h>
    #include "serial.h"
    void main()
    {
        serial_init();//初始化串口
        while(1);
    }
    
    1. 编写代码,使单片机可以接收来自PC机的数据,使用serial.c中的serial_getchar()函数即可实现。如果有数据到达串口缓存,这个函数会返回这个数据,否则会一直等待数据到达。
    #include <reg52.h>
    #include "serial.h"
    void main()
    {   
        unsigned char c;
    
        serial_init();//初始化串口
        while(1)
        {
            c = serial_getchar();//等待数据
        }
    }
    
    1. 编写代码,使单片机能够将接收到的数据直接回送给PC机,使用serial_putstring()函数即可实现。
    #include <reg52.h>
    #include "serial.h"
    void main()
    {   
        unsigned char c;
    
        serial_init();//初始化串口
        while(1)
        {
            c = serial_getchar();//等待数据
            serial_putstring(&c, 1);//发送数据
        }
    }
    
    1. 在PC机上使用串口调试工具,设置相同的波特率和晶振等参数,并打开端口监听单片机发出的数据。

    以上代码可以实现单片机与PC机之间的串口通信,如果需要在电脑屏幕上看到单片机回送的数据,还需要对serial_putstring()函数进行修改。可以使用PC串口调试器来实时监控单片机的接收数据和发送数据。

    注意事项:

    • 请注意单片机和PC机之间的通讯波特率和晶振,必须保证两个设备使用相同的波特率和晶振。
    • 在使用Keil C51的时候,请确保正确安装串口库文件,否则程序无法正确编译。
    • 如果串口通信不正常,建议使用示波器检查串口通讯线路是否正常。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^