串口通信(SBUF&代码&原理详解)

这里写目录标题

  • 基本概念
    • 读取数据手册
      • 串口中断
      • 代码讲解

基本概念

前言:
时钟对于单片机来说是非常重要的,它能为单片机提供一个稳定的机器周期从而使系统能够正常工作。它就像我们人类的心脏一样重要,一但有了问题那么系统就会崩溃。我们在使用单片机的时候,常常会使用默认的时钟频率,然而在一些特殊的场合(例如串口通讯或者实时时钟),则需要特殊的时钟频率,这时芯片自带的振荡器就无法满足我们的需求。这个时候,就可以选择外部晶振作为时钟源。

波特代表每秒的调制数,它是对符号传输速率的一种度量,n波特即指每秒传输n个符号(传符号率)
人话:波特率就是发送二进制数据位的速率,习惯上用 baud 表示,即我们发送一位二进制数据
的持续时间=1/baud。
有关波特率的设置:
串口通信(SBUF&代码&原理详解)_第1张图片可以利用stc_isp生成软件,生成代码,注意使用的串口助手波特率设置一定要和此时生成代码的波特率一致。

在通信之前,通信双方的波特率需要设置相同,才能实现正常通信。

时钟频率的理解:
RC振荡器与晶振的区别
串口通信(SBUF&代码&原理详解)_第2张图片
串口通信(SBUF&代码&原理详解)_第3张图片

我们利用stc-isp会设置用户运行的内部时钟RC的频率,一般来说蓝桥杯是12MHZ,但对于串口通信来说11.0592Mhz可以是波特率计算中证书更多,误差更小。

串口通信(SBUF&代码&原理详解)_第4张图片
利用软件,我们设置为12分频串口通信,同时Fosc/12
串口通信(SBUF&代码&原理详解)_第5张图片对于初值的计算,是有TL1 = 256 - FOSC / 12 / 2 baud

读取数据手册

在这里插入图片描述

在这里插入图片描述

串口中断

串口通信(SBUF&代码&原理详解)_第6张图片
由上图,我们知道串口中断号为4

代码讲解

void uart_sendstr(uint8 *str)   //串口发送一般用查询
{
	uint8 *s;    //副本,定义一个指针,指向str的一个字符
	s = str;     //s指向str的第一个字符
	while(*s != '\0')  //s是一个指针,与*结合说明,s指针指向的地址里的内容
	{
		SBUF = *s;  //s这个地址里的内容发送给接受缓冲器
		while(TI == 0); //等待数据发送完毕    因为TI=1表示数据发送完毕   SBUF在左边说明是接受缓冲区
			TI = 0;  //手动TI置0
			s++;    //s指向的地址++
	}
}
                                                                                                                                                                                                                                    一般发送数据是用查询方式,也就是在main函数里一直循环我们的发送代码。

串口通信(SBUF&代码&原理详解)_第7张图片在这里插入图片描述

void UART_Interrupt(void) interrupt 4
{
	if(RI)			//如果接收到
	{
		RI = 0;		//手动清零接收中断标志位
		SBUF = SBUF+1;	//接收到后+1再发送回去,左边是发送SBUF右边的SBUF就是接收缓冲区的数据,是电脑发送给单片机,
	}
	
	if(TI)			//如果发送完毕
	{
		TI = 0;		//手动清零发送中断标志位
	}
}

串行发送数据时,CPU向SBUF写入数据,此时99H表示串行口的发送缓冲寄存器;
串行接收数据时,CPU从SBUF读出数据,此时99H表示串行口的接收缓冲寄存器。

串口调试助手的实质就是利用电脑上的 UART 通信接口,发送数据给我们的单片机,也
可以把我们的单片机发送的数据接收到这个调试助手界面上。

由上面两段话,我们可以了解到接收缓冲区和发送缓冲区的作用(信息发送方向):
串口通信(SBUF&代码&原理详解)_第8张图片
串口通信(SBUF&代码&原理详解)_第9张图片

你可能感兴趣的:(蓝桥杯,单片机,串口通信)