【摘要】:异步串口通信的字符格式数据传送分为串行和并行,通信又分为异步和同步。异步串行通信是一帧接一帧进行的,传送既可以是连续的,也可以是断续的。串行通信的传送速率及通信波特率的计算MCS51系列单片机串行接口组成的通信系统是一种异步通信系统。波特率在串行口异步通信中是一个由用户决定的保证通信可靠的重要参数。1)串行接口控制寄存器SCON设置串行接口控制寄存器SCON是一个可位寻址的专业寄存器,用于串行数据通信控制。
MSC51系列单片机具有一个全双工串行接口,即P3.0(RXD)串行接收和P3.1(TXD)串行发送。所谓“全双工”即发送和接收可以同时进行。“半双工”也可以发送和接收,但不能同时进行。“单工”只具有发送或接收一种功能。串行接口可以在单片机之间进行通信,也可以与PC进行通信。利用串行接口将主MCU与各分MCU组成一套复杂的系统。例如,汽车控制系统就是一种网络化的综合控制系统。由于单片机的显示和存储功能有限,因而与PC通信就是非常必要的,对一些复杂的控制系统需要以局部单片机组成一套控制网。本节将分别介绍这两种通信方式。串行接口的最重要功能就是通信能力,当然P3.0/P3.1也可以作为通用端口进行输入和输出。
1.单片机之间通信
(1)【例3-62】 单片机串行接口自发自收数据并在P1口显示该数据的编程
实例程序运行效果:在完成了源文件建立、汇编、下载的步骤后,用飞线将P3.0与P3.1短接。当单片机运行该程序后,P1口的灯按照数据89H=10001001B亮灭(0表示亮,1表示灭)。
程序点评:程序中使用了计数器0,对应的外部脉冲输入端是P3.4,并选择了计数器工作方式2。计数溢出采用中断方式。因为计数初始值TH0=0FFH,TL0=0FFH。所以,每当有一个外部计数脉冲就产生一次中断,8个灯往返闪烁一次。计数0中断程序入口时000BH,IE赋值总中断、计数中断、外中断开启。
(2)异步串口通信的字符格式
数据传送分为串行和并行,通信又分为异步和同步。单片机使用的是串行异步方式。它以字符为单位,一个字符一个字符地传送。在通信格式中有两种:8位UART和9位UART,如图3-5所示。
图3-5 异步通信格式
8位UART格式中,起始位(1)+数据位(8)+停止位(1),共10位作为1帧进行传送。9位UART格式中,起始位(1)+数据位(8)+奇偶位(1)+停止位(1),共11位作为1帧进行传送。一般异步通信按8位UART格式。从起始位开始到停止位结束的全部内容称为一帧。帧是一个字符的完整通信格式。异步串行通信是一帧接一帧进行的,传送既可以是连续的,也可以是断续的。
UART(Universal Asynchronous Receiver Transmitter)是非同步接收发送器,也就是异步通信方式。
(3)串行通信的传送速率及通信波特率的计算
MCS51系列单片机串行接口组成的通信系统是一种异步通信系统。通信双方在发送与接收时,只靠通信双方的软件控制同步。有两个条件必须保证,即通信双方传送的数据格式必须一致,通信双方传送的数据传输速率(也就是波特率)必须一致。
波特率(Baud)定义为每秒传送的二进制位的个数,单位是bit/s。例如,波特率为2400bit/s,就是每秒传送2400个二进制位。
波特率在串行口异步通信中是一个由用户决定的保证通信可靠的重要参数。波特率的确定一般可分为以下两个步骤:
1)定时器设置。在异步通信方式中,常用定时器作为波特率发生器。定时器必须设置为定时器T1。定时器的工作方式选择工作方式2。TL1作为工作8位计数器,TH1作为预置8位计数器。当TL1计数满溢出后,TH1预置的内容自动装入TL1内,保证连续工作。因此,定时器控制寄存器TMOD=0010 0000B=20H。
2)波特率计算。确定T1作为波特率发生器后,接下来要根据波特率要求值计算出TH1=TL1的数值。再根据实际TH1、TL1的值计算出实际波特率,并与标准波特率的误差要不大于2.5%。波特率越高,通信速度越快,效率也就越高,但稳定性、正确性的保证就越困难。一般对单片机的数据通信要求不很高,用串行接口即可达到,为2400~9600bit/s范围。下面按步骤进行波特率计算。
①波特率计算公式:Buad=(2smod/32)(fosc/12(256-n))。
式中,smod是电源控制PCON寄存器的PCON.7位,复位后PCON.7=0,若计算需要也可设为1;fosc是MCU的晶体振荡频率,取fosc=6MHz=6×106Hz;n是TH1(TL1)定时常数。
②若Baud=2400bit/s,则
n=256-(2smodfosc)/(12×32×Baud)
n=256-(20×6×106)/(12×32×2400)
n=256-6.5=249.5
因定时常数必须为整数,所以取n=249。
将n代入公式反算Baud:Baud=(20×6×106)/12×32×(256-249)bit/s=2232bit/s,与标准波特率2400bit/s的误差为e=(2400-2232)/2400=7%,超出了不大于2.5%误差的要求。
设smod=1,即电源控制PCON寄存器的PCON.7位为1,则PCON=10000000B=80H此时重新计算n:
n=256-(2smodfosc)/(12×32×Baud)
n=256-(21×6×106)/(12×32×2400)
n=256-13=243
将n代入公式反算Baud:Baud=(21×6×106)/12×32×(256-243)bit/s=2403bit/s,与标准波特率2400bit/s的误差为e=(2403bit/s-2400bit/s)/2400bit/s=0.125%,在≤2.5%误差的范围内。因而,取smod=1,PCON=10000000B=80H是合适的。
③若Baud=9600bit/s,n=256-(21×6×106)/(12×32×9600)=256-3=253,TL1=TH1=253=0FDH即可满足要求,且PCON=10000000B=80H。
(4)串行通信控制寄存器
MCS51系列单片机提供给用户的串行通信控制寄存器有3个,在设计使用串行通信服务程序前首先要对所选定的串行通信寄存器进行正确初始化(值)的设置。
1)串行接口控制寄存器SCON设置 串行接口控制寄存器SCON是一个可位寻址的专业寄存器,用于串行数据通信控制。单元地址为98H,位地址为9FH~98H。寄存器内容及位地址表示如下:
①SM0和SM1是串行接口工作模式选择位,共有4种模式见表3-3。
表3-3 串行接口工作模式选择
②SM2:是多机通信使能位,通常设为0。
③REN:允许接收位。由软件设置,REN=1,允许接收;REN=0,禁止接收。
④TB8:发送数据的第9位。可以由软件置“1”或置“0”,也可以作为奇偶校验位。
⑤RB8:接收数据的第9位。
⑥TI:发送结束标志。当TI由0变为1时,表示SBUF缓冲区一帧数据发送结束,可以作为查询标志,也可以作为中断申请标志,但TI必须由软件清“0”,准备下一次发送。
⑦RI:接收结束标志。当RI由0变为1时,表示SBUF(串行数据缓冲专业寄存器)缓冲区一帧数据接收结束,可以作为查询标志,也可以作为中断申请标志,RI由软件清“0”。
2)电源控制寄存器PCON。专业寄存器PCON是MCS51系列单片机为电源控制设置的。单元地址位为87H,不可位寻址。其内容如下:
在CMOS的单片机中,该寄存器除最高位之外其他位都没有意义。最高位SMOD是串行接口波特率的倍增位。当SMOD=1时,串行接口波特率加倍,单片机复位后SMOD=0。
3)中断允许寄存器IE。寄存器IE已经介绍过,在串行数据通信中的应用如下:
①EA为中断总允许控制位。若EA=0,禁止一切中断;EA=1,中断条件总允许。(www.chuimin.cn)
②ES为串行接口中断允许位。若ES=0,此位禁止;ES=1,此位允许有效(EA=1时)。
单片机复位后,IE=00H禁止一切中断。
(5)串行接口数据发送与接收过程的设置步骤
单片机串行通信工作对工作方式1、2、3只是数据传输的帧格式不同,但过程机制是相同的。在设置串行控制寄存器SCON时注意这一点。
1)确定SCON。若用工作方式1,发送和接收有效,SCON=01010000B,REN=1允许接收。
2)确定TCON。设置定时器T1作为波特率发生器,定时器的工作方式选择方式2,则定时器控制寄存器TCON=00100000B。
3)按确定的波特率计算TL1,TH1(TL1=TH1)。
4)TR1=1,启动波特率发生器。
5)数据送ACC。
6)ACC数据送串行数据缓存寄存器SBUF;单片机(MCU)立即开始从串行接口发送数据。直到TI=1表示一帧数据发送结束,且TI清“0”。
7)查询RI是否等于1。若为1表示一帧数据接收完成,RI清“0”,并将SBUF中的数据送ACC,转数据处理。
注意:串行接口的SBUF作为发送和接收共用的缓冲区。波特率发生器只能用定时器T1。
2.单片机与PC之间通信
要更好地发挥单片机(MCU)的能力与PC的通信是不可缺少的。MCS51系列单片机本身具有一个串行接口,而且是TTL/CMOS电平标准(即逻辑“1”为5V,逻辑“0”为0V)。但PC串行接口的通信标准却使用的是RS-232C协议标准,其电平与TTL/CMOS电平不同。
RS-232C是计算机与MCU之间进行通信的协议标准是由美国电子工业协会制订的。RS(Recommended Standard)意思为推荐标准,232是一个标识号码,C表示该标准已被修改的次数。
实验机安装有型号MAX232的电平转换芯片,任务是将MCU串行接口的TTL/CMOS电平(高电平5V,低电平0V)转换为RS-232C电平(低电平-3~-15V,高电平+3~+15V)。因此,若PC有D形插座(9脚)可以直接用本款单片机提供的下载线连接单片机与PC。
对于没有D形插座(9脚)的PC,仅有USB接口的用户可以选用一款USB/RS-232转换器,再通过与本款单片机提供的下载线连接单片机与PC。
实验机与PC连接与调试请查看本书的第一章相关内容。
(1)串行口调试助手的下载与安装
在调试MCU与PC的串行通信时,PC要发送数据到MCU,并且要接收MCU发送来的数据。单片机与PC之间的通信是通过PC的通信界面软件完成的。通常PC端的应用软件要独立设计,为了调试方便可以借助“串口调试助手”软件单独调试MCU部分。串行接口调试助手可以由互联网上下载。
(2)单片机与PC之间的通信练习
【例3-63】 MCU发送16个十六进制数50H,由PC接收后显示在屏幕上
1)MCU侧发送源程序如下:
2)将上面源程序下载到STC89C51RD片内。
3)启动“串口调试助手”。
读者注意:若STC用COM1串口下载,而“串口调试助手”也用COM1,为避免冲突,要在STC下载后,重启计算机。若“串口调试助手”已安装在计算机上,则双击UartAssist(异步接收发送器助手),显示“串口调试助手”界面。
设置通信参数:
串口号:COM1(若用USB/RS232转换器,则按系统的串口号设置);
波特率:2400(若用11.059MHz晶体,则为9600);
校验位:NONE(无);
数据位:8位;
停止位:1位;
接收区设置:“”十六进制显示。
PC设置完后打开屏幕串行接口,显示红色标志表示串行接口已通。
SXX-1机上电并复位后,按“+1”键(P2.0),开始发送字符,在PC的接收区屏幕上立即显示50 50 50 50…50共16个字符,如图3-6所示。
【例3-64】 PC发送16进制数50H,由MCU接收后显示在P1口
1)MCU侧接收源程序如下:
图3-6 PC串口接收
2)将上面源程序下载到STC89C51RD片内。
3)执行。先重启计算机,双击UartAssist,进入“串口通信助手”界面。串口参数设置同例3-63,打开屏幕串口显示红色标志,十六进制发送。
4)SXX-1机上电,复位后按下“+1”键进入接收状态。在屏幕的发送区键入50,点击“发送”,在SXX-1机的P1口显示01010000B,表示MCU接收正常,如图3-7所示。
图3-7 PC发送字符
也可以单击“清除显示”,SXX-1机复位,按下“+1”进入接收状态.在屏幕发送区键入50,点击“发送”SXX-1机应重复出现0101 0000B。
以上各例,其硬件资源范围只限于实验机本身。
相关推荐