51单片机串口通信介绍

发布者:Yuexiang666最新更新时间:2021-05-27 来源: eefocus关键字:51单片机  串口通信  串行接口 手机看文章 扫描二维码
随时随地手机看文章

这节我们主要讲单片机上串口的工作原理和如何通过程序来对串口进行设置,以及根据所给出的实例实现与PC 机通信。


一、原理简介


51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。其缺点是传输速度较低。


与之前一样,首先我们来了解单片机串口相关的寄存器。


SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。


串行口控制寄存器SCON(见表1) 。


表1 SCON寄存器


表1 SCON寄存器


表中各位(从左至右为从高位到低位)含义如下。


SM0 和SM1 :串行口工作方式控制位,其定义如表2 所示。


表2 串行口工作方式控制位


表2 串行口工作方式控制位


其中,fOSC 为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。


SM2 :多机通信控制位。 该仅用于方式2 和方式3 的多机通信。其中发送机SM2 = 1(需要程序控制设置)。接收机的串行口工作于方式2 或3,SM2=1 时,只有当接收到第9 位数据(RB8)为1 时,才把接收到的前8 位数据送入SBUF,且置位RI 发出中断申请引发串行接收中断,否则会将接受到的数据放弃。当SM2=0 时,就不管第位数据是0 还是1,都将数据送入SBUF,并置位RI 发出中断申请。工作于方式0 时,SM2 必须为0。


REN :串行接收允许位:REN =0 时,禁止接收;REN =1 时,允许接收。


TB8 :在方式2、3 中,TB8 是发送机要发送的第9 位数据。在多机通信中它代表传输的地址或数据,TB8=0 为数据,TB8=1 时为地址。


RB8 :在方式2、3 中,RB8 是接收机接收到的第9 位数据,该数据正好来自发送机的TB8,从而识别接收到的数据特征。


TI :串行口发送中断请求标志。当CPU 发送完一串行数据后,此时SBUF 寄存器为空,硬件使TI 置1,请求中断。CPU 响应中断后,由软件对TI 清零。


RI :串行口接收中断请求标志。当串行口接收完一帧串行数据时,此时SBUF 寄存器为满,硬件使RI 置1,请求中断。CPU 响应中断后,用软件对RI 清零。


电源控制寄存器PCON(见表3) 。


表3 PCON寄存器




表3 PCON寄存器


表中各位(从左至右为从高位到低位)含义如下。


SMOD :波特率加倍位。SMOD=1,当串行口工作于方式1、2、3 时,波特率加倍。SMOD=0,波特率不变。


GF1、GF0 :通用标志位。


PD(PCON.1) :掉电方式位。当PD=1 时,进入掉电方式。


IDL(PCON.0) :待机方式位。当IDL=1 时,进入待机方式。


另外与串行口相关的寄存器有前面文章叙述的定时器相关寄存器和中断寄存器。定时器寄存器用来设定波特率。中断允许寄存器IE 中的ES 位也用来作为串行I/O 中断允许位。当ES = 1,允许 串行I/O 中断;当ES = 0,禁止串行I/O 中断。中断优先级寄存器IP的PS 位则用作串行I/O 中断优先级控制位。当PS=1,设定为高优先级;当PS =0,设定为低优先级。


波特率计算:在了解了串行口相关的寄存器之后,我们可得出其通信波特率的一些结论:


① 方式0 和方式2 的波特率是固定的。


在方式0 中, 波特率为时钟频率的1/12, 即fOSC/12,固定不变。


在方式2 中,波特率取决于PCON 中的SMOD 值,即波特率为:



当SMOD=0 时,波特率为fosc/64 ;当SMOD=1 时,波特率为fosc/32。


② 方式1 和方式3 的波特率可变,由定时器1 的溢出率决定。



当定时器T1 用作波特率发生器时,通常选用定时初值自动重装的工作方式2( 注意:不要把定时器的工作方式与串行口的工作方式搞混淆了)。其计数结构为8 位,假定计数初值为Count,单片机的机器周期为T,则定时时间为(256 ?Count)×T 。从而在1s内发生溢出的次数(即溢出率)可由公式(1)所示:



从而波特率的计算公式由公式(2)所示:



在实际应用时,通常是先确定波特率,后根据波特率求T1 定时初值,因此式(2)又可写为:





二、电路详解


图1 串行通信实验电路图


下面就对图1 所示电路进行详细说明。


图1 串行通信实验电路图


最小系统部分(时钟电路、复位电路等)第一讲已经讲过,在此不再叙述。我们重点来了解下与计算机通信的RS-232 接口电路。可以看到,在电路图中,有TXD 和RXD 两个接收和发送指示状态灯,此外用了一个叫MAX3232 的芯片,那它是用来实现什么的呢?首先我们要知道计算机上的串口是具有RS-232 标准的串行接口,而RS-232 的标准中定义了其电气特性:高电平“1”信号电压的范围为-15V~-3V,低电平“0”


信号电压的范围为+3V~+15V。可能有些读者会问,它为什么要以这样的电气特性呢?这是因为高低电平用相反的电压表示,至少有6V 的压差,非常好的提高了数据传输的可靠性。由于单片机的管脚电平为TTL,单片机与RS-232 标准的串行口进行通信时,首先要解决的便是电平转换的问题。一般来说,可以选择一些专业的集成电路芯片,如图中的MAX3232。MAX3232 芯片内部集成了电压倍增电路,单电源供电即可完成电平转换,而且工作电压宽,3V~5.5V 间均能正常工作。其典型应用如图中所示,其外围所接的电容对传输速率有影响,在试验套件中采用的是0.1μF。


值得一提的是MAX3232 芯片拥有两对电平转换线路,图中只用了一路,因此浪费了另一路,在一些场合可以将两路并联以获得较强的驱动抗干扰能力。此外,我们有必要了解图中与计算机相连的DB-9 型RS-232的引脚结构(见图2)。


图2 DB-9连接器接口图


图2 DB-9连接器接口图


其各管脚定义如下(见表4)。


表4 DB-9型接口管脚定义


表4 DB-9型接口管脚定义


三、程序设计


本讲设计实例程序如下:


#include "AT89X52.h" (1)


void Init_Com(void) ( 2)


{


TMOD = 0x20; ( 3)


PCON = 0x00; ( 4)


SCON = 0x50; ( 5)


TH1 = 0xE8; ( 6)


TL1 = 0xE8; ( 7)


TR1 = 1; ( 8)


}


void main(void) ( 9)


{


unsigned char dat; ( 10)


Init_Com(); ( 11)


while(1) ( 12)


程序详细说明:


(1)头文件包含。


(2)声明串口初始化程序。


(3)设置定时器1 工作在模式2,自动装载初值(详见第二讲)。


(4)SMOD 位清0,波特率不加倍。


(5)串行口工作在方式1,并允许接收。


(6)定时器1 高8 位赋初值。波特率为1200b/s(7)定时器1 低8 位赋初值。


(8)启动定时器。


(9)主函数。


(10)定义一个字符型变量。


(11)初始化串口。


(12)死循环。


(13)如果接收到数据。


(14)将接收到的数据赋给之前定义的变量。


(15)将接收到的值输出到P0 口。


(16)对接收标志位清0,准备再次接收。


(17)将接收到的数据又发送出去。


(18)查询是否发送完毕。


(19)对发送标志位清0。


四、调试要点与实验现象


接好硬件,通过冷启动方式将程序所生成的。hex文件下载到单片机运行后,打开串口调试助手软件,设置好波特率1200,复位单片机,然后在通过串口调试助手往单片机发送数据(见图3),可以观察到在接收窗口有发送的数据显示,此外电路板上的串行通信指示灯也会闪烁,P0 口所接到LED 灯会闪烁所接收到的数据。


图3 串口软件调试界面


图3 串口软件调试界面


另外串口调试助手软件使用时应注意的是,如果单片机开发板采用串口下载而且和串口调试助手是使用同一串口,则在打开串口软件的同时不能给单片机下载程序,如需要下载,请首先点击“关闭串口”,做发送实验的时候,注意如果选中16 进制发送的就是数字或者字母的16 进制数值,比如发送“0”,实际接收的就应该是0x00,如果不选中,默认发送的是ASCII 码值,此时发送“0”,实际接收的就应该是0x30,这点可以通过观察板子P0 口上的对应的LED 指示出来。


五、总结


本讲介绍了单片机串口通信的原理并给出了实例,通过该讲,读者可以了解和掌握51 单片机串口通信的原理与应用流程,利用串口通信,单片机可以与计算机相连,也可以单片机互联或者多个单片机相互通信组网等,在实际的工程应用中非常广泛。从学习的角度来说,熟练的利用串口将单片机系统中的相关信息显示在计算机上可以很直观方便的进行调试和开发。

关键字:51单片机  串口通信  串行接口 引用地址:51单片机串口通信介绍

上一篇:51单片机中断应用与编程方法
下一篇:基于AT89S51 的密码锁设计

推荐阅读最新更新时间:2024-11-09 01:28

51单片机对盒仔机器人的控制设计
一、盒仔机器人 BOXZ,昵称盒仔,是一款开源的互动娱乐平台!百度一下,有很多盒仔的制作教程,基本都是用arduino制作完成的。假期没事,带着宝宝们用51制作了一个廉价的BOXZ。先上张图: 从图上不难看出,为了宝宝们易于接受,我把盒仔的手机摇控改成了用线控的方法,做了一个简易的摇控器。 二、材料准备 名称型号及参数数量备注5V稳压模块LM78051 充电电池12V1 电容22pf2 按钮 4 自锁按钮 1 51单片机 stc12c2052ad 1 晶振 11.0592Mhz 1 电机驱动 L298N模块 1 降压模块 可调,选择12v在可输入范围内,给l298N供电1 小车轮子 直接65mm,胎宽在26mm或者以下2
[单片机]
<font color='red'>51单片机</font>对盒仔机器人的控制设计
51单片机学习:矩阵按键实验
实验名称:矩阵按键实验 接线说明: 实验现象:下载程序后,按下“矩阵按键”模块中S1-S16键,对应数码管最左边显示0-F 注意事项: ***************************************************************************************/ #include reg52.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; #define KEY_MATRIX_PORT P1 //使用宏定义矩阵按键控制口 #define SMG_A_DP_PORT P0 //使用宏定义数
[单片机]
51单片机编程环境搭建方法
前言 本教程将向大家介绍KEIL C51软件的安装,通过本教程的学习,我们可以在电脑上安装一个KEIL C51 软件,为后面学习程序的开发做好铺垫。 一、KEIL C51安装 1.软件获取 要在电脑上成功安装KEIL C51,首先必须要有安装包,我们可以通过万能的百度,搜索关键字“KEIL C51 下载”,上面会有很多下载渠道,也可以在KEIL的官网上下载,打开界面如下图所示。 使用我们提供下载好的软件包,其内部含有如下图所示文件。 C51V901.exe:是KEIL C51 软件的安装文件。 keygen_new2032.zip:KEIL C51 破解软件,在KEIL C51 不破解的情况下只 能编译2K 大小文件,如果
[单片机]
<font color='red'>51单片机</font>编程环境搭建方法
8051单片机串口波特率计算方式
STC12C5A60S2单片机兼容80C51单片机,其串口波特率可以由定时器产生,也可以由独立波特率发生器产生。其波特率模式可以是固定的,也可以是可变的。 固定波特率:当 模式0的通信速度设置 位UART_M0x6/AUXR.5 = 0时,其波特率 = SYSclk/12 当 模式0的通信速度设置 位UART_M0x6/AUXR.5 = 1时,其波特率 = SYSclk/2 可变波特率:使用串行通信模式2,即可自定义串口通信波特率,其计算公式为:波特率 = 2^SMODE /64×( SYSclk 系统工作时钟频率) 当SMOD=1时,波特率=2/64( SYSclk) =1/32( SYSclk) ; 当SMOD
[单片机]
51单片机温度控制调速风扇仿真设计
原理图:Altium Designer 仿真版本:proteus 7.8 程序编译器:keil 4 / keil 5 编程语言:C语言 设计编号:S0010 功能说明: 1.本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机 2.采用DS18B20温度传感器测温,74HC573驱动数码管显示温度和风扇的档位。 3.共3个按键:设置、加、减。按一下设置可以设置上限,再按下设置下限,均可以按键加减调整。 4.利用PWM调速,当温度低于下限时,风扇不转动,当温度处于上、下限之间时1档转动(50%的转速),当温度超过上限时,全速转动。 仿真电路: 打开仿真工程,双击proteus中的单片
[单片机]
<font color='red'>51单片机</font>温度控制调速风扇仿真设计
89c51单片机和89s51单片机的区别,89s51单片机新增功能汇总
  AT89S51 是一个低功耗,高性能CMOS 8位 单片机 ,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统供给高性价比的解决方案。   AT89S51具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先
[单片机]
如何利用MCS-51单片机对周期波频率进行测量
对于周期波频率的测量方法很多,但大多是通过测量间接计算频率。本文介绍了用目前应用比较广泛的MCS-51系列单片机对周期波频率进行测量,并通过LED以数字形式直观地示出频率,实现测量的智能化,省去间接对频率计算的麻烦与错误。文章对其测量原理,设计和实现作了说明,介绍了主要程序,并进行了误差分析。 目前单片机广泛应用到国民经济建设和日常生活的许多领域,成为测控技术现代化不可缺少的重要工具。而本文适应这一发展趋势,把MCS-51系列单片机应用于对周期波频率的测量,并通过LED显示器自动显示出来,这对于频率的测量带来了极大的方便。 设计思想 利用施密特触发器将边缘缓慢变化的周期性信号如正弦波、三角波或任意形状的模拟信号变换成同频率
[单片机]
如何利用MCS-<font color='red'>51单片机</font>对周期波频率进行测量
8051单片机实战分析(以STC89C52RC为例) | 02 - LED延时约5s闪烁
代码修改如下: #include reg52.h //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit led=P2^2; //将单片机的P2.2端口定义为led /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *************************
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved