单片机的串行口及其应用课件_第1页
单片机的串行口及其应用课件_第2页
单片机的串行口及其应用课件_第3页
单片机的串行口及其应用课件_第4页
单片机的串行口及其应用课件_第5页
已阅读5页,还剩147页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2022/11/261项目6单片机的串行口及其应用串行口的结构串行口控制寄存器单片机串行口的设计方法本章主要内容:2022/11/261项目6单片机的串行口及其应用串行口的本章目录6.1任务1认识串行通信与串行口6.2任务2单片机的双机通信6.3任务3单片机与PC串行通信6.4任务4远程控制交通灯的设计

本章目录6.1任务1认识串行通信与串行口2022/11/2636.1任务1认识串行通信与串行口

6.1.1串行通信的概念通信的基本方式分为并行通信和串行通信两种。2022/11/2636.1任务1认识串行通信与串行口并行通信是构成数据信息的各位同时进行传送的通信方式。例如8位数据或16位数据并行传送。优点是传输速度快。缺点是需要多条传输线,当距离较远、位数又多时,导致通信线路复杂且成本高。并行通信是构成数据信息的各位同时进行传送的通信方式。例如8位串行通信是数据一位接一位地顺序传送。特点是通信线路简单,只要一对传输线就可以实现通信(如电话线),从而大大地降低了成本,特别适用于远距离通信。缺点是传送速度慢。串行通信是数据一位接一位地顺序传送。串行通信可分为异步传送和同步传送两种基本方式。1.串行通信的分类(1)异步通信异步传送的特点是数据在线路上的传送不连续,在传送时,数据是以字符为单位组成字符帧进行传送的。在异步通信中,接收端是依靠字符帧(CharacterFrame)格式来判断发送端是何时开始发送,何时结束发送的。字符帧格式是异步通信的一个重要指标,是CPU与外设之间事先的约定。字符帧也叫数据帧,由起始位、数据位、奇偶校验位和停止位4个部分组成。串行通信可分为异步传送和同步传送两种基本方式。1.串行通图6-2串行异步传送的字符格帧式在串行通信中,两相邻字符帧之间,可以没有空闲位,也可以有若干空闲位,这由用户来决定。图6-2(a)为无空闲位的字符帧,图6-2(b)表示有3个空闲位的字符帧格式。

图6-2串行异步传送的字符格帧式在串行通信中,两相邻字符帧之(2)同步通信同步通信是一种连续串行传送数据的通信方式,1次通信只传输一帧信息,即1次传送1组数据。这里的信息帧和异步通信的字符帧不同,通常有若干个数据字符,如图6-3所示。图6-3(a)为单同步字符帧结构,图6-3(b)为双同步字符帧结构图6-3同步通信的字符帧格式(2)同步通信同步通信是一种连续串行传送数据的通信方式,12.串行通信的制式在串行通信中数据是在两个站之间进行传送的,按照数据传送方向,串行通信可分为单工、半双工和全双工三种制式。

(1)单工制式:在这种制式下,通信线的一端接发送器,另一端接接收器,数据只能按照一个固定的方向传送。(2)半双工制式:数据可实现双向传送,但不能同时进行。(3)全双工制式:全双工通信系统的每端都有发送器和接收器,可以同时发送和接收。2.串行通信的制式在串行通信中数据是在两个站之间进行传送3.串行通信的接口电路串行接口电路的种类和型号很多。能够完成异步通信的硬件电路称为UART,即通用异步接收器/发送器;能够完成同步通信的硬件电路称为USRT;既能够完成异步又能同步通信的硬件电路称为USART.从本质上说,所有的串行接口电路都是以并行数据形式与CPU接口,以串行数据形式与外部逻辑接口。它们的基本功能都是从外部逻辑接收串行数据,转换成并行数据后传送给CPU,或从CPU接收并行数据,转换成串行数据后输出到外部逻辑。3.串行通信的接口电路串行接口电路的种类和型号很多。6.1.2串行通信的接口异步串行通信接口标准主要有三类:RS-232C接口RS-449、RS-422和RS-485接口20mA电流环1.RS-232C接口

(1)RS-232C信息格式标准6.1.2串行通信的接口异步串行通信接口标准主要有三类:1(2)RS-232C总线规定及其电平转换器RS-232C采用的是负逻辑,即:

逻辑“0”:+5V~+15V逻辑“1”:-5V~-15V因此,RS-232C不能和TTL电平直接相连,使用时必须进行电平转换。常用的电平转换集成电路是传输线驱动器MC1488和传输线接收器MC1489。图6-6接收器和发送器电平转换集成电路(2)RS-232C总线规定及其电平转换器RS-232C采用(3)RS-232C总线规定RS-232C标准总线为25根,采用标准的DB-25或DB-9的D形插头座。目前计算机上只保留有两个DB-9插头,即COM1和COM2两个串行接口。图6-8RS-232C引脚图(3)RS-232C总线规定RS-232C标准总线为25根,表6-1DB-9连接器各引脚各引脚定义引脚名称功能引脚名称功能1DCD载波检测6DSR数据准备完成2RXD发送数据7RTS发送请求3TXD接收数据8CTS发送清除4DTR数据终端准备完成9RI振铃指示5SG(GND)信号地线在最简单的全双工系统中,仅用发送数据、接收数据和信号地三根线即可,对于MCS-51单片机,利用其RXD(串行数据接收端)线、TXD(串行数据发送端)线和一根地线,就可以构成符合RS-232C接口标准的全双工通信口。表6-1DB-9连接器各引脚各引脚定义引脚名称功在远距离通信时,一般要加MODEM(调制解调器),当计算机与MODEM连接时,只要将编号相同的引脚连接起来即可。图6-9RS-232-C(DB9)与调制解调器的连接图在远距离通信时,一般要加MODEM(调制解调器),当计算机与在距离较近(小于15m)的情况下进行通信时,不需要使用MODEM,两个计算机的RS-232-C接口可以直接互连。图6-10两个RS-232C(DB9)终端设备的连接图在距离较近(小于15m)的情况下进行通信时,不需要使用MOD2.RS-449、RS-422A、RS-485标准接口RS-449标准除了与RS-232C兼容外,在提高传输速率,增加传输距离,改善电气性能等方面有了很大改进。

(1)RS-449标准接口RS-449在很多方面可以代替RS-232C使用。RS-449与RS-232C的主要差别在于信号在导线上的传输方法不同:RS-232C是利用传输信号与公共地的电压差,RS-449是利用信号导线之间的信号电压差,在1219.2m的24-AWG双铰线上进行数字通信。RS-449规定了两种接口标准连接器,一种为37脚,一种为9脚。RS-449可以不使用调制解调器,它比RS-232C传输速率高,通信距离长,且由于RS-449系统用平衡信号差传输高速信号,所以噪声低,又可以多点或者使用公共线通信,故RS-449通信电缆可与多个设备并联。2.RS-449、RS-422A、RS-485标准接口R(2)RS-422A接口RS-422A输出驱动器为双端平衡驱动器,如图6-11所示。如果其中一条线为逻辑“1”状态,另一条线就为逻辑“0”,比采用单端不平衡驱动对电压的放大倍数大一倍。RS-422A传输速率(90Kbps)时,传输距离可达1200米。图6-11RS-422A接口(2)RS-422A接口RS-422A输出驱动器为双端平衡(2)RS-485接口RS-485的信号传输采用两线间的电压来表示逻辑1和逻辑0,如图6-12所示。由于发送方需要两根传输线,接收方也需要两根传输线。传输线采用差动信道,所以它的干扰抑制性极好,又因为它的阻抗低,无接地问题,所以传输距离可达1200米,传输速率可达1Mbps。图6-12RS-485接口

(2)RS-485接口RS-485的信号传输采用两线间的电6.1.3单片机串行口的结构与控制寄存器MCS-5l单片机的串行口主要由两个独立的数据缓冲器SBUF、一个输入移位寄存器PCON(9位)、一个串行控制寄存器SCON和一个波特率发生器T1等组成。其结构见图6-13。

图6-13串行口结构框图6.1.3单片机串行口的结构与控制寄存器MCS-5l单片1.串行口数据缓冲器SBUFSBUF是两个在物理上独立的接收、发送寄存器,是可以直接寻址的专用寄存器。一个用于存放接收到的数据,另一个用于存放欲发送的数据,可同时发送和接收数据。两个缓冲器共用一个地址99H,通过对SBUF的读、写指令来区别是对接收缓冲器还是发送缓冲器进行操作。CPU在写SBUF时,就是修改发送缓冲器;读SBUF,就是读接收缓冲器的内容。接收或发送数据,是通过串行口对外的两条独立收发信号线RXD(P3.0)、TXD(P3.1)来实现的,因此可以同时发送、接收数据,其工作方式为全双工制式。串口的接收/发送端具有缓冲的功能,由SBUF特殊功能寄存器实现该功能。接收缓冲器是双缓冲的,发送缓冲器为单缓冲。1.串行口数据缓冲器SBUFSBUF是两个在物理上独立2.串行口控制寄存器SCON该专用寄存器的主要功能是选择串行口的工作方式、接收和发送控制以及串行口的状态标志指示等,可以位寻址,字节地址为98H。收发双方都有对SCON的编程,单片机复位时,SCON的所有位全为0。SCON的各位含义如图6-14所示。2.串行口控制寄存器SCON该专用寄存器的主要功能是选择串(1)SM0、SM1(SCON.7、SCON.6)

串行口的工作方式选择位。其定义如表6-2所示。SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/120l方式l10位UART可变10方式211位UARTfosc/64或fosc/3211方式311位UART可变表6-2串行方式的定义(1)SM0、SM1(SCON.7、SCON.6)串行口的(2)SM2多机通信控制位,用于方式2和方式3中。在方式2和方式3处于接收时,若SM2=1,且接收到的第9位数据RB8为0时,则不激活RI;若SM2=1,且RB8=1时,则置RI=1;若SM2=0,不论接收到第9位RB8为0还是为1,TI、RI都以正常方式被激活。在方式1处于接收时,若SM2=1,则只有当收到有效的停止位后,RI才置1。在方式0中,SM2应为0。(3)REN允许串行接收控制位。由软件置位或清零。REN=1时,允许接收;REN=0时,禁止接收。(4)TB8发送数据的第9位。在方式2和方式3中,由软件置位或复位,一般用做奇偶校验位。在多机通信中,可作为区别地址帧或数据帧的标识位,一般约定地址帧时TB8为1,数据帧时TB8为0。(2)SM2(5)RB8接收数据的第9位。功能同TB8。(6)TI发送中断标志位。在方式0中,发送完8位数据后,由硬件置位;在其它方式中,在发送停止位之初由硬件置位。因此TI是发送完一帧数据的标志,可以用指令来查询是否发送结束。TI=1时,也可向CPU申请中断,响应中断后必须由软件清除TI。(7)RI接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其它方式中,在接收停止位时由硬件置位。因此RI是接收完一帧数据的标志,也可以通过指令来查询是否接收完一帧数据。RI=1时,也可向CPU申请中断,响应中断后也必须由软件清除RI。(5)RB83.电源和波特率控制寄存器PCONPCON是一个特殊功能寄存器,其字节地址为87H,只能进行字节寻址,不能按位寻址。其格式如下图6-15所示。PCON的最高位D7位作为SMOD,是串行口波特率的选择位。在工作方式1、2、3时,串行通信的波特率与SMOD有关。当SMOD=1时,波特率加倍,当SMOD=0时,波特率不变。系统复位后,SMOD位为0。其他各位用于电源管理。3.电源和波特率控制寄存器PCONPCON是一个特殊功能6.1.4单片机串行口的工作方式MCS-51的串行口有4种工作方式,通过SCON中的SM1、SM0位来决定。1.方式0在方式0下,串行口作同步移位寄存器用,以8位数据为一帧。无起始位和停止位。其波特率固定为fosc/12。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式常用于扩展I/O口,外接移位寄存器实现数据并行输入或输出。6.1.4单片机串行口的工作方式MCS-51的串行口有4种2.方式1当SM0=0、SM1=1时,串行口被定义为方式1。在方式1下,串行口为波特率可调的10位通用异步接口UART,发送或接收的一帧信息,包括1位起始位0,8位数据位和1位停止位1。图6-18方式1下10位数据帧格式2.方式1当SM0=0、SM1=1时,串行口被定义为方式1。3.方式2当SM0=1、SM1=0时,串行口被定义为方式2。方式2下,串行口为11位通用异步接口UART,这种方式可接收或发送11位数据,传送波特率与PCON的最高位SMOD有关。发送或接收的一帧数据包括1位起始位0,8位数据位,1位可编程位(D8)和1位停止位1,共11位。第9个数据位即D8位可以通过软件来控制它。图6-19方式2下11位数据帧格式3.方式2当SM0=1、SM1=0时,串行口被定义为方式4.方式3方式3为波特率可变的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。串行口工作于方式2和方式3时,与方式1不同之处是,进入RB8的是第9位数据,而不是停止位。接收到的停止位的值与SBUF、RB8或RI是无关的。这一个特点可用于多机通信。注意:4.方式3方式3为波特率可变的11位UART通信方式,除了波6.1.5串行口的波特率串行口通过编程可以有4种工作方式,其中,方式0和方式2的波特率是固定的,方式1和方式3的波特率可变,由定时器1的溢出率决定。1.方式0和方式2在方式0中,波特率为时钟频率的1/12,即,固定不变。在方式2中,波特率取决于PCON中的SMOD值,当SMOD=0时,波特率为;当SMOD=1时,波特率为,即波特率6.1.5串行口的波特率串行口通过编程可以有4种工作方式2.方式1和方式3在方式1和方式3下,波特率由定时器T1的溢出率和SMOD共同决定。即:波特率2.方式1和方式3在方式1和方式3下,波特率由定时器T1的表6-3定时器T1产生的常用波特率波特率(b/s)SMOD定时器T1方式初始值方式0:1M12××××方式2:375K121×××方式1、3:62.5K12102FFH19.2K11.0592102FDH9.6K11.0592002FDH4.8K11.0592002FAH2.4K11.0592002F4H1.2K11.0592002E8H137.5K11.9860021DH110600272H11012001FEEBH表6-3定时器T1产生的常用波特率波特率(b/s)SM6.2任务2单片机的双机通信采用两台AT89C51单片机甲和乙进行双机串行通信设计。单片机甲的按键K1产生控制码,通过串行口TXD端将控制码以方式1的方式发送至单片机乙的RXD端,乙机再利用该控制码分别实现LED1闪烁、LED2闪烁、LED1和LED2同时闪烁、关闭所有LED功能。通过本任务的学习,使读者掌握MCS-51系列单片机串行通信的基本原理及控制方法、波特率设计等串行口应用知识。6.2任务2单片机的双机通信采用两台AT89C51单6.2.1硬件电路与软件程序设计1.硬件电路设计根据单片机双机通信距离、抗干扰性等要求,可以选择直接TTL电平传输、RS-232-C、RS-422A等串行接口方法。本设计采用标准RS-232接口芯片MAX232进行通信,硬件电路如图6-20所示。6.2.1硬件电路与软件程序设计1.硬件电路设计根据图6-20单片机串行口双机通信硬件电路图6-20单片机串行口双机通信硬件电路2.程序设计程序设计时,首先需要进行串口初始化,主要任务是设置定时器1,串口控制和中断控制等。本任务中,两片单片机的串口均工作在方式1下,所以甲机程序中设置SCON=0X40,乙机程序中设SCON=0X50,两者都设为方式1,但乙机还将REN位设为1以允许接收。需要说明的是,本例甲机不接收数据,因此两机的SCON都设成0X50也不影响运行结果;程序中设TH1=TL1=0XFD(即253),PCON=0X00(PCON的最高位SMOD=0,波特率不倍增);本例中两单片机均使用查询方式,甲机通过循环查询TI标志判断是否发送完毕,乙机通过查询RI判断是否接收到数据。每一次收发前都需要通过程序将TI和RI清零。2.程序设计程序设计时,首先需要进行串口初始化,主要任务甲机程序代码:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P0^0;sbitLED2=P0^3;sbitK1=P1^0;//延时voidDelayMS(uintms){uchari;while(ms--)for(i=0;<120;i++);}//向串口发送字符voidPutc_to_SerialPort(ucharc){SBUF=c;while(TI==0);TI=0;}甲机程序代码:#include<reg51.h>//主程序voidmain(){ucharOperation_No=0;SCON=0x40;//串口模式1TMOD=0x20;//T1工作模式2PCON=0x00;//波特率不倍增TH1=0xfd;TL1=0xfd;TI=0;TR1=1;//启动T1while(1){if(K1==0)//按下K1时选择操作代码0,1,2,3{while(K1==0);Operation_No=(Operation_No+1)%4;}//主程序switch(Operation_No)//根据操作代码发送A/B/C或停止发送{case0:LED1=LED2=1; break;case1:Putc_to_SerialPort('A'); LED1=~LED1;LED2=1;

break;case2:Putc_to_SerialPort('B'); LED2=~LED2;LED1=1;

break;case3:Putc_to_SerialPort('C'); LED1=~LED1;LED2=LED1; break;}DelayMS(100);}}switch(Operation_No)//根乙机程序代码:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P0^0;sbitLED2=P0^3;//延时voidDelayMS(uintms){uchari;while(ms--)for(i=0;i<120;i++);}乙机程序代码:#include<reg51.h>//主程序voidmain(){SCON=0x50;//串口模式1,允许接收TMOD=0x20;//T1工作模式2PCON=0x00;//波特率不倍增TH1=0xfd;//波特率9600TL1=0xfd;RI=0;TR1=1;LED1=LED2=1;while(1){if(RI)//如收到则LED闪烁{ RI=0;//主程序switch(SBUF)//根据所收到的不同命令字符完成不同动作{case'A':LED1=~LED1;LED2=1; //LED1闪烁 break;case'B':LED2=~LED2;LED1=1;//LED2闪烁 break;case'C':LED1=~LED1;LED2=LED1;//双闪烁}}elseLED1=LED2=1;//关闭LEDDelayMS(100);}}switch(SBUF)//根据所收到的不同命令字符完成不6.2.2调试与仿真运行图6-21单片机串行口双机通信仿真图6.2.2调试与仿真运行图6-21单片机串行口双机通信6.3任务3单片机与PC串行通信6.3.1任务与计划(1)单片机接收PC机发来的数字串,并逐个显示在数码管上,为了显示接收到的数据,在单片机的P0口连接数码管。(2)当按下单片机系统的按键时,会有一串中文字符由单片机串口发送给PC机,并显示在接收窗口。6.3任务3单片机与PC串行通信6.3.1任务与6.3.2硬件电路与软件程序设计1.硬件电路设计图6-22单片机与PC之间串行通信硬件电路6.3.2硬件电路与软件程序设计1.硬件电路设计图6-22.程序设计(1)PC机控制程序PC主机的通信程序可以采用TurboC、VC、VB、Delphi等高级语言编写,也可以直接借助于现有的“串口调试助手”应用软件完成,用户要由PC机向单片机发送数据,只要把波特率参数设置好就行了,无须自己编程。(2)单片机串口通信程序使用Keil软件建立“receive”工程项目,建立源程序文件“receive.c”,输入如下源程序:2.程序设计(1)PC机控制程序#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharReceive_Buffer[101];//接收缓冲ucharBuf_Index=0;//缓存空间//数码管编码ucharcodeDsy_code[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};//延时voidDelay(uintx){

uchari;

while(--x)for(i=0;i<120;i++);}#include<reg51.h>voidmain()//主函数{ uchari; P0=0x00; Receive_Buffer[0]=-1; SCON=0x50;//串口模式1,允许接收

TMOD=0x20;//T1方式2 PCON=0x00; TH1=TL1=0xFD;//波特率=9600EA=1;EX0=1;IT0=1;//允许外部中断0,下降沿触发

ES=1;//允许串口中断

IP=0x01;//外部中断0为高优先级

TR1=1;//启动定时器

while(1) {

for(i=0;i<100;i++) {

if(Receive_Buffer[i]==-1)break;//有-1结束显示

P0=Dsy_code[Receive_Buffer[i]]; Delay(200); } Delay(200); }}voidmain()//主函数//接收中断函数

voidSerial_INT()interrupt4{ ucharc;

if(RI==0)return; ES=0;//关闭串口中断

RI=0;//清除接收标志位

c=SBUF;//读字符

if(c>=‘0’&&c<=’9’) {

//接收每个字符后存放-1为结束标志

Receive_Buffer[Buf_Index]=c–‘0’; Receive_Buffer[Buf_Index+1]=-1; Buf_Index=(Buf_Index+1)%100; } ES=1;//允许串口中断}//接收中断函数//外部中断0

voidEX_INT0()interrupt0{ uchar*s=“单片机发送的字符串!\r\n”; uchari=0;

while(s[i]!=‘\0’) { SBUF=s[i];

while(TI==0); TI=0; i++; }}//外部中断06.3.3调试与仿真运行图6-23单片机与PC通信仿真图6.3.3调试与仿真运行图6-23单片机与PC通信仿真图6-24串口调试助手图6-24串口调试助手6.4任务4远程控制交通灯的设计6.4.1任务要求设计并实现单片机交通灯控制系统,实现以下三种情况下的交通灯控制。(1)正常情况下双方向轮流点亮,交通灯的状态如表6-4所示。(2)特殊情况时A道运行。(3)有紧急车辆通行时,AB道均为红灯。紧急情况优先级高于特殊情况。6.4任务4远程控制交通灯的设计6.4.1任务表6-4交通灯显示状态东西方向(简称A方向)南北方向(简称B方向)状态说明红灯黄灯绿灯红灯黄灯绿灯灭灭亮亮灭灭A方向通行,B方向禁行灭灭闪烁亮灭灭A方向警告,B方向禁行灭亮灭亮灭灭A方向警告,B方向禁行亮灭灭灭灭亮A方向禁行,B方向通行亮灭灭灭灭闪烁A方向禁行,B方向警告亮灭灭灭亮灭A方向禁行,B方向警告表6-4交通灯显示状态东西方向(简称A方向)南北方向(简称本任务实现用PC作为控制主机、单片机控制信号灯为从机的远程控制系统。主、从机双方除了要有统一的数据格式、波特率外,还要约定一些握手应答信号,即通信协议,如表6-5所示。表6-5交通灯控制系统PC与单片机通信协议主机(PC)从机(单片机)发送命令接收应答信息接收命令回发应答信息01H01H01H01H命令含义:紧急情况,要求所有方向均为红灯,直到解除命令02H02H02H02H命令含义:解除命令,恢复正常交通指示灯状态本任务实现用PC作为控制主机、单片机控制信号灯为从机的远程控6.4.2电路及元器件表6-6交通灯控制端口线分配及控制状态

P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0P1端口数据状态说明无关无关A红灯A黄灯A绿灯B红灯B黄灯B绿灯000011000CH状态1:A通行,B禁行00000、1交替10004H或0CH状态2:A绿灯闪,B禁行0001010014H状态3:A警告,B禁行0010000121H状态4:A禁行,B通行00100000、1交替20H或21H状态5:A禁行,B绿灯闪0010001022H状态6:A禁行,B警告6.4.2电路及元器件表6-6交通灯控制端口线分配及控制单片机的串行口及其应用课件表6-7交通灯控制电路元器件清单表6-7交通灯控制电路元器件清单6.4.3程序设计1.程序设计流程图①①②②图6-27正常情况程序流程

6.4.3程序设计1.程序设计流程图①①②②图6-27图6-28中断情况下交通状态流程图6-28中断情况下交通状态流程图6-29通信程序流程

图6-29通信程序流程2.源程序#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharled[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};ucharDispX[]={0x04,0x0c,0x04,0x0c,0x14,0x20,0x21,0x20,0x21,0x22};

voidAFangXing(void); //函数声明

voidShanShuo(uchar*PTR);

voidJingGao(uchar*PTR);

voidBFangXing(void);

2.源程序#include<reg51.h>voiddelay_5ms(void)//5ms定时

{ uchari;

for(i=0;i<5;i++)//T0方式1,定时1毫秒,循环5次即实现5毫秒定时

{ TH0=0xfc; TL0=0x18; TR0=1; //T/C0开始工作

while(!TF0); TF0=0;}}voiddelay_5ms(void)//5ms定时voidint_0()interrupt0{ uinti,x,y,l,m; EA=0;//关中断

i=P1;l=TH1;m=TL1; EA=1;P1=0x24;

for(x=10;x>0;x--) {

for(y=100;y>0;y--) { P2=0x01; P0=led[x%10]; delay_5ms(); P2=0x02; P0=led[x/10];//紧急情况倒计时

delay_5ms();}} EA=0;P1=i;TH1=l;TL1=m; EA=1;}voidint_0()interrupt0voidint_1()interrupt2//特殊情况中断{ uinti,l,m,x,y; EA=0;//关中断

i=P1;l=TH1;m=TL1; EA=1;P1=0x21;

for(x=10;x>0;x--) {

for(y=100;y>0;y--) { P2=0x01; P0=led[x%10];delay_5ms(); P2=0x02; P0=led[x/10];//特殊情况倒计时

delay_5ms();}} EA=0;P1=i; TH1=l;TL1=m; EA=1;}voidint_1()interrupt2//特殊情voidmain()//主函数{ uchar*PTR=&DispX; TMOD=0x21; //工作方式寄存器TMOD用于选择定时器/计数器的工作模式和工作方式

TH1=0xf4;//由波特率为2400kb/s,晶振为11.0592MHz,//可知定时器T1的初值,T1采用方式2,8位初值自动重装入

TL1=0xf4; TR0=1; TR1=1; SCON=0x50;

//SCON为串行口控制寄存器,采用方式1,允许串行接收

PCON=0x00; //设置波特率SMOD IE=0x95;//IE为中断允许寄存器,允许串行口中断,//允许外部中断1中断,允许外部中断0中断

IP=0x11;//串行口中断、外部中断0设定为高优先级中断

IT0=1;//外部中断0的中断请求信号为边沿触发voidmain()//主函数

IT1=1;//外部中断1的中断请求信号为边沿触发

while(1){ AFangXing();//A道绿灯,B道红灯(计时55秒)

ShanShuo(PTR);//A绿灯闪烁4次(2秒),B道红灯

ShanShuo(++PTR); ShanShuo(++PTR);ShanShuo(++PTR); JingGao(++PTR);//A道黄灯(2秒),B道红灯

BFangXing(); //B道绿灯,A道红灯(计时55秒)

ShanShuo(++PTR);//B绿灯闪烁4次(2秒),A道红灯

ShanShuo(++PTR); ShanShuo(++PTR);ShanShuo(++PTR); JingGao(++PTR);//B道黄灯(2秒),A道红灯

PTR=&DispX;//重新给PTR指针赋值,开始新的一轮

}} IT1=1;//外部中断1的中断请求信号为边沿触发 wvoidAFangXing(void)//A向通行函数{ uchari,j; P1=0x0c;//A道绿灯B道红灯

for(i=55;i>0;i--) {

for(j=50;j>0;j--) { P2=0x01; P0=led[i%10];//显示A方向秒个位

delay_5ms();P2=0x02; P0=led[i/10];//显示A方向秒十位

delay_5ms();P2=0x04; P0=led[(i)%10];//显示B方向秒个位

delay_5ms(); P2=0x08; P0=led[(i)/10];//显示B方向秒十位

delay_5ms(); } }}voidAFangXing(void)//A向通行voidShanShuo(uchar*PTR)//绿灯闪烁函数{

uchari,j;

for(i=1;i>0;i--) { P1=*PTR;

for(j=25;j>0;j--) { P2=0x01; P0=led[i%10];//显示A方向秒个位

delay_5ms();P2=0x02; P0=led[i/10];//显示A方向秒十位

delay_5ms();P2=0x04; P0=led[i%10];//显示B方向个位

delay_5ms();P2=0x08; P0=led[i/10];//显示B方向十位

delay_5ms(); } }}voidShanShuo(uchar*PTR)//voidJingGao(uchar*PTR)//黄灯警告函数{ uchari,j; P1=*PTR;

for(i=2;i>0;i--) {

for(j=50;j>0;j--) { P2=0x01; P0=led[i%10];//显示A方向秒个位

delay_5ms();P2=0x02; P0=led[i/10];//显示A方向秒十位

delay_5ms();P2=0x04; P0=led[i%10];//显示B方向个位

delay_5ms(); P2=0x08; P0=led[i/10];//显示B方向十位

delay_5ms(); }}}voidJingGao(uchar*PTR)//黄voidBFangXing(void)//B向通行函数{uchari,j;P1=0x21;//A道红灯B道绿灯

for(i=55;i>0;i--){

for(j=50;j>0;j--){ P2=0x01; P0=led[(i)%10];//显示A方向秒个位

delay_5ms();P2=0x02; P0=led[(i)/10];//显示A方向秒十位

delay_5ms();P2=0x04; P0=led[i%10];//显示B方向个位

delay_5ms(); P2=0x08; P0=led[i/10];//显示B方向秒十位

delay_5ms();}}}voidBFangXing(void)//B向voidserial()interrupt4//PC机控制程序

{uchari;EA=0;

if(RI==1){ RI=0;

if(SBUF==0x01){ SBUF=0x01;

while(!TI); TI=0;i=P1; P1=0x24;

while(SBUF!=0x02){

while(!RI); RI=0;

}

SBUF=0x02;

while(!TI); TI=0;P1=i;EA=1;

}else{ EA=1;}}}voidserial()interrupt4//6.4.4PROTEUS仿真运行(1)Proteus仿真系统和串口调试软件同时安装在一台PC上,PC有两个物理串口,两者分别占用一个端口,然后使用交叉串口线连接两个端口,并将两个串行端口的属性参数设置一致。(2)采用虚拟串口,使用虚拟串口驱动软件VirtualSerialPortDriver(VSPD)。虚拟两个串行端口,如COM2、COM3,并虚拟配对连接。将COM3分配给COMPIM,COM2分配给“串口调试助手”,运行同一台PC屮的“串口调试助手”软件和Proteus的单片机的仿真系统,即可实现两者之间的通信,与物理连接方式一样。6.4.4PROTEUS仿真运行(1)Proteus仿真6.4.5任务小结交通灯控制中用到定时计数器、外部中断INT0、INT1、LED动态显示和串行通信的知识。因此该设计是单片机的综合应用。单片机和PC串行通信时,在硬件设计上,需要熟悉端口电平转换芯片的使用,在软件设计上,要掌握串行通信协议编程,端口的参数设置要一致。

单片机异步通信的程序设计通常采用两种方法:查询法和中断法。本设计任务采用的是中断法,但在进入串口中断函数后又使用了查询方法。6.4.5任务小结交通灯控制中用到定时计数器、外部中断IN总结与思考本项目结合单片机的双机通信、单片机与PC串行通信、简易交通灯的设计等任务,主要介绍了串行通信通信协议、单片机串行口结构与编程以及RS232C串行通信总线标准和接口设计。重点介绍了系列单片机串行口结构,该串口是一个全双工的异步串行通信I/O口,有四种工作方式:方式0、1、2、3。其波特率和帧格式可以编程设定。数据帧格式有10位、11位。方式0和方式2的传送波特率是固定的,方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。最终完成远程控制交通灯的设计。总结与思考本项目结合单片机的双机通信、单片机与PC串行通信、2022/11/2677项目6单片机的串行口及其应用串行口的结构串行口控制寄存器单片机串行口的设计方法本章主要内容:2022/11/261项目6单片机的串行口及其应用串行口的本章目录6.1任务1认识串行通信与串行口6.2任务2单片机的双机通信6.3任务3单片机与PC串行通信6.4任务4远程控制交通灯的设计

本章目录6.1任务1认识串行通信与串行口2022/11/26796.1任务1认识串行通信与串行口

6.1.1串行通信的概念通信的基本方式分为并行通信和串行通信两种。2022/11/2636.1任务1认识串行通信与串行口并行通信是构成数据信息的各位同时进行传送的通信方式。例如8位数据或16位数据并行传送。优点是传输速度快。缺点是需要多条传输线,当距离较远、位数又多时,导致通信线路复杂且成本高。并行通信是构成数据信息的各位同时进行传送的通信方式。例如8位串行通信是数据一位接一位地顺序传送。特点是通信线路简单,只要一对传输线就可以实现通信(如电话线),从而大大地降低了成本,特别适用于远距离通信。缺点是传送速度慢。串行通信是数据一位接一位地顺序传送。串行通信可分为异步传送和同步传送两种基本方式。1.串行通信的分类(1)异步通信异步传送的特点是数据在线路上的传送不连续,在传送时,数据是以字符为单位组成字符帧进行传送的。在异步通信中,接收端是依靠字符帧(CharacterFrame)格式来判断发送端是何时开始发送,何时结束发送的。字符帧格式是异步通信的一个重要指标,是CPU与外设之间事先的约定。字符帧也叫数据帧,由起始位、数据位、奇偶校验位和停止位4个部分组成。串行通信可分为异步传送和同步传送两种基本方式。1.串行通图6-2串行异步传送的字符格帧式在串行通信中,两相邻字符帧之间,可以没有空闲位,也可以有若干空闲位,这由用户来决定。图6-2(a)为无空闲位的字符帧,图6-2(b)表示有3个空闲位的字符帧格式。

图6-2串行异步传送的字符格帧式在串行通信中,两相邻字符帧之(2)同步通信同步通信是一种连续串行传送数据的通信方式,1次通信只传输一帧信息,即1次传送1组数据。这里的信息帧和异步通信的字符帧不同,通常有若干个数据字符,如图6-3所示。图6-3(a)为单同步字符帧结构,图6-3(b)为双同步字符帧结构图6-3同步通信的字符帧格式(2)同步通信同步通信是一种连续串行传送数据的通信方式,12.串行通信的制式在串行通信中数据是在两个站之间进行传送的,按照数据传送方向,串行通信可分为单工、半双工和全双工三种制式。

(1)单工制式:在这种制式下,通信线的一端接发送器,另一端接接收器,数据只能按照一个固定的方向传送。(2)半双工制式:数据可实现双向传送,但不能同时进行。(3)全双工制式:全双工通信系统的每端都有发送器和接收器,可以同时发送和接收。2.串行通信的制式在串行通信中数据是在两个站之间进行传送3.串行通信的接口电路串行接口电路的种类和型号很多。能够完成异步通信的硬件电路称为UART,即通用异步接收器/发送器;能够完成同步通信的硬件电路称为USRT;既能够完成异步又能同步通信的硬件电路称为USART.从本质上说,所有的串行接口电路都是以并行数据形式与CPU接口,以串行数据形式与外部逻辑接口。它们的基本功能都是从外部逻辑接收串行数据,转换成并行数据后传送给CPU,或从CPU接收并行数据,转换成串行数据后输出到外部逻辑。3.串行通信的接口电路串行接口电路的种类和型号很多。6.1.2串行通信的接口异步串行通信接口标准主要有三类:RS-232C接口RS-449、RS-422和RS-485接口20mA电流环1.RS-232C接口

(1)RS-232C信息格式标准6.1.2串行通信的接口异步串行通信接口标准主要有三类:1(2)RS-232C总线规定及其电平转换器RS-232C采用的是负逻辑,即:

逻辑“0”:+5V~+15V逻辑“1”:-5V~-15V因此,RS-232C不能和TTL电平直接相连,使用时必须进行电平转换。常用的电平转换集成电路是传输线驱动器MC1488和传输线接收器MC1489。图6-6接收器和发送器电平转换集成电路(2)RS-232C总线规定及其电平转换器RS-232C采用(3)RS-232C总线规定RS-232C标准总线为25根,采用标准的DB-25或DB-9的D形插头座。目前计算机上只保留有两个DB-9插头,即COM1和COM2两个串行接口。图6-8RS-232C引脚图(3)RS-232C总线规定RS-232C标准总线为25根,表6-1DB-9连接器各引脚各引脚定义引脚名称功能引脚名称功能1DCD载波检测6DSR数据准备完成2RXD发送数据7RTS发送请求3TXD接收数据8CTS发送清除4DTR数据终端准备完成9RI振铃指示5SG(GND)信号地线在最简单的全双工系统中,仅用发送数据、接收数据和信号地三根线即可,对于MCS-51单片机,利用其RXD(串行数据接收端)线、TXD(串行数据发送端)线和一根地线,就可以构成符合RS-232C接口标准的全双工通信口。表6-1DB-9连接器各引脚各引脚定义引脚名称功在远距离通信时,一般要加MODEM(调制解调器),当计算机与MODEM连接时,只要将编号相同的引脚连接起来即可。图6-9RS-232-C(DB9)与调制解调器的连接图在远距离通信时,一般要加MODEM(调制解调器),当计算机与在距离较近(小于15m)的情况下进行通信时,不需要使用MODEM,两个计算机的RS-232-C接口可以直接互连。图6-10两个RS-232C(DB9)终端设备的连接图在距离较近(小于15m)的情况下进行通信时,不需要使用MOD2.RS-449、RS-422A、RS-485标准接口RS-449标准除了与RS-232C兼容外,在提高传输速率,增加传输距离,改善电气性能等方面有了很大改进。

(1)RS-449标准接口RS-449在很多方面可以代替RS-232C使用。RS-449与RS-232C的主要差别在于信号在导线上的传输方法不同:RS-232C是利用传输信号与公共地的电压差,RS-449是利用信号导线之间的信号电压差,在1219.2m的24-AWG双铰线上进行数字通信。RS-449规定了两种接口标准连接器,一种为37脚,一种为9脚。RS-449可以不使用调制解调器,它比RS-232C传输速率高,通信距离长,且由于RS-449系统用平衡信号差传输高速信号,所以噪声低,又可以多点或者使用公共线通信,故RS-449通信电缆可与多个设备并联。2.RS-449、RS-422A、RS-485标准接口R(2)RS-422A接口RS-422A输出驱动器为双端平衡驱动器,如图6-11所示。如果其中一条线为逻辑“1”状态,另一条线就为逻辑“0”,比采用单端不平衡驱动对电压的放大倍数大一倍。RS-422A传输速率(90Kbps)时,传输距离可达1200米。图6-11RS-422A接口(2)RS-422A接口RS-422A输出驱动器为双端平衡(2)RS-485接口RS-485的信号传输采用两线间的电压来表示逻辑1和逻辑0,如图6-12所示。由于发送方需要两根传输线,接收方也需要两根传输线。传输线采用差动信道,所以它的干扰抑制性极好,又因为它的阻抗低,无接地问题,所以传输距离可达1200米,传输速率可达1Mbps。图6-12RS-485接口

(2)RS-485接口RS-485的信号传输采用两线间的电6.1.3单片机串行口的结构与控制寄存器MCS-5l单片机的串行口主要由两个独立的数据缓冲器SBUF、一个输入移位寄存器PCON(9位)、一个串行控制寄存器SCON和一个波特率发生器T1等组成。其结构见图6-13。

图6-13串行口结构框图6.1.3单片机串行口的结构与控制寄存器MCS-5l单片1.串行口数据缓冲器SBUFSBUF是两个在物理上独立的接收、发送寄存器,是可以直接寻址的专用寄存器。一个用于存放接收到的数据,另一个用于存放欲发送的数据,可同时发送和接收数据。两个缓冲器共用一个地址99H,通过对SBUF的读、写指令来区别是对接收缓冲器还是发送缓冲器进行操作。CPU在写SBUF时,就是修改发送缓冲器;读SBUF,就是读接收缓冲器的内容。接收或发送数据,是通过串行口对外的两条独立收发信号线RXD(P3.0)、TXD(P3.1)来实现的,因此可以同时发送、接收数据,其工作方式为全双工制式。串口的接收/发送端具有缓冲的功能,由SBUF特殊功能寄存器实现该功能。接收缓冲器是双缓冲的,发送缓冲器为单缓冲。1.串行口数据缓冲器SBUFSBUF是两个在物理上独立2.串行口控制寄存器SCON该专用寄存器的主要功能是选择串行口的工作方式、接收和发送控制以及串行口的状态标志指示等,可以位寻址,字节地址为98H。收发双方都有对SCON的编程,单片机复位时,SCON的所有位全为0。SCON的各位含义如图6-14所示。2.串行口控制寄存器SCON该专用寄存器的主要功能是选择串(1)SM0、SM1(SCON.7、SCON.6)

串行口的工作方式选择位。其定义如表6-2所示。SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/120l方式l10位UART可变10方式211位UARTfosc/64或fosc/3211方式311位UART可变表6-2串行方式的定义(1)SM0、SM1(SCON.7、SCON.6)串行口的(2)SM2多机通信控制位,用于方式2和方式3中。在方式2和方式3处于接收时,若SM2=1,且接收到的第9位数据RB8为0时,则不激活RI;若SM2=1,且RB8=1时,则置RI=1;若SM2=0,不论接收到第9位RB8为0还是为1,TI、RI都以正常方式被激活。在方式1处于接收时,若SM2=1,则只有当收到有效的停止位后,RI才置1。在方式0中,SM2应为0。(3)REN允许串行接收控制位。由软件置位或清零。REN=1时,允许接收;REN=0时,禁止接收。(4)TB8发送数据的第9位。在方式2和方式3中,由软件置位或复位,一般用做奇偶校验位。在多机通信中,可作为区别地址帧或数据帧的标识位,一般约定地址帧时TB8为1,数据帧时TB8为0。(2)SM2(5)RB8接收数据的第9位。功能同TB8。(6)TI发送中断标志位。在方式0中,发送完8位数据后,由硬件置位;在其它方式中,在发送停止位之初由硬件置位。因此TI是发送完一帧数据的标志,可以用指令来查询是否发送结束。TI=1时,也可向CPU申请中断,响应中断后必须由软件清除TI。(7)RI接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其它方式中,在接收停止位时由硬件置位。因此RI是接收完一帧数据的标志,也可以通过指令来查询是否接收完一帧数据。RI=1时,也可向CPU申请中断,响应中断后也必须由软件清除RI。(5)RB83.电源和波特率控制寄存器PCONPCON是一个特殊功能寄存器,其字节地址为87H,只能进行字节寻址,不能按位寻址。其格式如下图6-15所示。PCON的最高位D7位作为SMOD,是串行口波特率的选择位。在工作方式1、2、3时,串行通信的波特率与SMOD有关。当SMOD=1时,波特率加倍,当SMOD=0时,波特率不变。系统复位后,SMOD位为0。其他各位用于电源管理。3.电源和波特率控制寄存器PCONPCON是一个特殊功能6.1.4单片机串行口的工作方式MCS-51的串行口有4种工作方式,通过SCON中的SM1、SM0位来决定。1.方式0在方式0下,串行口作同步移位寄存器用,以8位数据为一帧。无起始位和停止位。其波特率固定为fosc/12。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式常用于扩展I/O口,外接移位寄存器实现数据并行输入或输出。6.1.4单片机串行口的工作方式MCS-51的串行口有4种2.方式1当SM0=0、SM1=1时,串行口被定义为方式1。在方式1下,串行口为波特率可调的10位通用异步接口UART,发送或接收的一帧信息,包括1位起始位0,8位数据位和1位停止位1。图6-18方式1下10位数据帧格式2.方式1当SM0=0、SM1=1时,串行口被定义为方式1。3.方式2当SM0=1、SM1=0时,串行口被定义为方式2。方式2下,串行口为11位通用异步接口UART,这种方式可接收或发送11位数据,传送波特率与PCON的最高位SMOD有关。发送或接收的一帧数据包括1位起始位0,8位数据位,1位可编程位(D8)和1位停止位1,共11位。第9个数据位即D8位可以通过软件来控制它。图6-19方式2下11位数据帧格式3.方式2当SM0=1、SM1=0时,串行口被定义为方式4.方式3方式3为波特率可变的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。串行口工作于方式2和方式3时,与方式1不同之处是,进入RB8的是第9位数据,而不是停止位。接收到的停止位的值与SBUF、RB8或RI是无关的。这一个特点可用于多机通信。注意:4.方式3方式3为波特率可变的11位UART通信方式,除了波6.1.5串行口的波特率串行口通过编程可以有4种工作方式,其中,方式0和方式2的波特率是固定的,方式1和方式3的波特率可变,由定时器1的溢出率决定。1.方式0和方式2在方式0中,波特率为时钟频率的1/12,即,固定不变。在方式2中,波特率取决于PCON中的SMOD值,当SMOD=0时,波特率为;当SMOD=1时,波特率为,即波特率6.1.5串行口的波特率串行口通过编程可以有4种工作方式2.方式1和方式3在方式1和方式3下,波特率由定时器T1的溢出率和SMOD共同决定。即:波特率2.方式1和方式3在方式1和方式3下,波特率由定时器T1的表6-3定时器T1产生的常用波特率波特率(b/s)SMOD定时器T1方式初始值方式0:1M12××××方式2:375K121×××方式1、3:62.5K12102FFH19.2K11.0592102FDH9.6K11.0592002FDH4.8K11.0592002FAH2.4K11.0592002F4H1.2K11.0592002E8H137.5K11.9860021DH110600272H11012001FEEBH表6-3定时器T1产生的常用波特率波特率(b/s)SM6.2任务2单片机的双机通信采用两台AT89C51单片机甲和乙进行双机串行通信设计。单片机甲的按键K1产生控制码,通过串行口TXD端将控制码以方式1的方式发送至单片机乙的RXD端,乙机再利用该控制码分别实现LED1闪烁、LED2闪烁、LED1和LED2同时闪烁、关闭所有LED功能。通过本任务的学习,使读者掌握MCS-51系列单片机串行通信的基本原理及控制方法、波特率设计等串行口应用知识。6.2任务2单片机的双机通信采用两台AT89C51单6.2.1硬件电路与软件程序设计1.硬件电路设计根据单片机双机通信距离、抗干扰性等要求,可以选择直接TTL电平传输、RS-232-C、RS-422A等串行接口方法。本设计采用标准RS-232接口芯片MAX232进行通信,硬件电路如图6-20所示。6.2.1硬件电路与软件程序设计1.硬件电路设计根据图6-20单片机串行口双机通信硬件电路图6-20单片机串行口双机通信硬件电路2.程序设计程序设计时,首先需要进行串口初始化,主要任务是设置定时器1,串口控制和中断控制等。本任务中,两片单片机的串口均工作在方式1下,所以甲机程序中设置SCON=0X40,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论