本篇文章整理了串口的波特率的初始化,以及向 SBUF 发送数据的代码实现。
串口发送数据给电脑,那么按照约定会设置串口相关的参数,比较重要的就是波特率。设置波特率并不是单片机一方进行设置,而是单片机和电脑都要进行设置。
波特率表示每秒传送二进制代码的位数,所以两端要一致。
波特率的初始化,也是一系列寄存器的设置,这里可以使用 STC-ISP 来生成,如下图:
从图中我们可以看出,波特率设置为 9600,串口使用的是 串口1,数据位是 8位数据,波特率跟晶振相关,那么就需要用到定时器,这里我们使用 定时器1(8 位自动重载),定时器时钟使用 12T。
然后我们发送数据时,我们就一秒发送一个字符,那么让 STC-ISP 来给我们生成一个软件延时,如下图:
有了上面这两部分,我们就可以完成我们要的功能了。
我们发送的数据是小写字母 a ~ z,然后循环发送,一秒钟发送一个字母。
代码如下:
#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 证书,写小白也能看得懂的文章,感谢关注!!!