前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C51 单片机开发单片机发数据给 PC

C51 单片机开发单片机发数据给 PC

作者头像
码农UP2U
发布2024-07-04 14:07:35
410
发布2024-07-04 14:07:35
举报
文章被收录于专栏:码农UP2U码农UP2U

本篇文章整理了串口的波特率的初始化,以及向 SBUF 发送数据的代码实现。

0x01:串口发送数据的准备

串口发送数据给电脑,那么按照约定会设置串口相关的参数,比较重要的就是波特率。设置波特率并不是单片机一方进行设置,而是单片机和电脑都要进行设置。

波特率表示每秒传送二进制代码的位数,所以两端要一致。

波特率的初始化,也是一系列寄存器的设置,这里可以使用 STC-ISP 来生成,如下图:

从图中我们可以看出,波特率设置为 9600,串口使用的是 串口1,数据位是 8位数据,波特率跟晶振相关,那么就需要用到定时器,这里我们使用 定时器1(8 位自动重载),定时器时钟使用 12T。

然后我们发送数据时,我们就一秒发送一个字符,那么让 STC-ISP 来给我们生成一个软件延时,如下图:

有了上面这两部分,我们就可以完成我们要的功能了。

0x02:代码实现

我们发送的数据是小写字母 a ~ z,然后循环发送,一秒钟发送一个字母。

代码如下:

代码语言:javascript
复制
#include <intrins.h>
#include "reg52.h"

sfr AUXR = 0x8e;    /* 声明AUXR寄存器的地址 */

void UartInit(void)  //9600bps@11.0592MHz
{
 PCON &= 0x7F;
 SCON = 0x50;
 AUXR &= 0xBF;
 AUXR &= 0xFE;
 TMOD &= 0x0F;
 TMOD |= 0x20;
 TL1 = 0xFD;
 TH1 = 0xFD;
 ET1 = 0;
 TR1 = 1;
}

void Delay1000ms()  //@11.0592MHz
{
 unsigned char i, j, k;

 _nop_();
 i = 8;
 j = 1;
 k = 243;
 do
 {
  do
  {
   while (--k);
  } while (--j);
 } while (--i);
}

void main()
{
    char data_msg = 'a';
    
    UartInit();
    
    while (1)
    {
        Delay1000ms();
        SBUF = data_msg;
        data_msg ++;
        if (data_msg > 'z')
        {
            data_msg = 'a';
        }
    }
}

然后通过 STC-ISP 将代码生成的 hex 文件写入单片机,然后打开 STC-ISP 的 串口助手,选择连接单片机的串口,选择相同的 波特率、校验位 和 停止位。最后点击 打开串口 按钮,就可以收到单片机发来的数据了。如下图所示:

我是一个程序员,了解 C、PHP、Java、ASM、Python,有 信安、CISP 证书,写小白也能看得懂的文章,感谢关注!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农UP2U 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01:串口发送数据的准备
  • 0x02:代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档