1、2023-1-281项目项目6 单片机的串行口及其应用单片机的串行口及其应用u串行口的结构 u串行口控制寄存器 u单片机串行口的设计方法 本章主要内容:本章目录6.1 任务任务1 认识串行通信与串行口认识串行通信与串行口6.2 任务任务2 单片机的双机通信单片机的双机通信6.3 任务任务3 单片机与单片机与PC串行通信串行通信6.4 任务任务4 远程控制交通灯的设计远程控制交通灯的设计 2023-1-282023-1-283 36.1 6.1 任务任务1 1 认识串行通信与串行口认识串行通信与串行口 6.1.1 6.1.1 串行通信的概念串行通信的概念通信的基本方式分为并行通信和串行通信两种。
2、通信的基本方式分为并行通信和串行通信两种。u并行通信是构成数据信息的各位同时进行传送的通信并行通信是构成数据信息的各位同时进行传送的通信方式。方式。例如例如8位数据或位数据或16位数据并行传送。位数据并行传送。u优点是传输速度快。优点是传输速度快。u缺点是需要多条传输线缺点是需要多条传输线,当距离较远、位数又多时,当距离较远、位数又多时,导致通信线路复杂且成本高。导致通信线路复杂且成本高。u串行通信是数据一位接一位地顺序传送。串行通信是数据一位接一位地顺序传送。u特点是通信线路简单,特点是通信线路简单,只要一对传输线就可以实现通信只要一对传输线就可以实现通信(如电话线如电话线),从而大大地降低
3、了成本,特别适用于远距离,从而大大地降低了成本,特别适用于远距离通信。通信。u缺点是传送速度慢。缺点是传送速度慢。串行通信可分为异步传送和同步传送两种基本方式。串行通信可分为异步传送和同步传送两种基本方式。1.1.串行通信的分类串行通信的分类(1)异步通信异步通信 异步传送的特点异步传送的特点是数据在线路上的传送不连续,在传送时是数据在线路上的传送不连续,在传送时,数据是以字符为单位组成字符帧进行传送的。数据是以字符为单位组成字符帧进行传送的。在异步通信中,接收端是依靠字符帧在异步通信中,接收端是依靠字符帧(Character Frame)格式来判断发送端是何时开始发送,何时结束发送的。格式来
4、判断发送端是何时开始发送,何时结束发送的。字字符帧格式是异步通信的一个重要指标,是符帧格式是异步通信的一个重要指标,是CPU与外设之间与外设之间事先的约定。字符帧也叫数据帧,由起始位、数据位、奇事先的约定。字符帧也叫数据帧,由起始位、数据位、奇偶校验位和停止位偶校验位和停止位4个部分组成。个部分组成。图图6-2串行异步传送的字符格帧式串行异步传送的字符格帧式在串行通信中,两相邻字符帧之间,可以没有空闲位,也可以在串行通信中,两相邻字符帧之间,可以没有空闲位,也可以有若干空闲位,这由用户来决定。有若干空闲位,这由用户来决定。图图6-2(a)为无空闲位的字符为无空闲位的字符帧,图帧,图6-2(b)
5、表示有表示有3个空闲位的字符帧格式。个空闲位的字符帧格式。(2)同步通信同步通信 同步通信是一种连续串行传送数据的通信方式,同步通信是一种连续串行传送数据的通信方式,1次通信只次通信只传输一帧信息,即传输一帧信息,即1次传送次传送1组数据。组数据。这里的信息帧和异步通这里的信息帧和异步通信的字符帧不同,通常有若干个数据字符,如图信的字符帧不同,通常有若干个数据字符,如图6-3所示。所示。图图6-3(a)为单同步字符帧结构,图为单同步字符帧结构,图6-3(b)为双同步字符帧结为双同步字符帧结构构 图图6-3 同步通信的字符帧格式同步通信的字符帧格式 2.2.串行通信的制式串行通信的制式 在串行通
6、信中数据是在两个站之间进行传送的,在串行通信中数据是在两个站之间进行传送的,按照数据传按照数据传送方向,串行通信可分为单工、半双工和全双工三种制式。送方向,串行通信可分为单工、半双工和全双工三种制式。(1)单工制式单工制式:在这种制式下,通信线的一端接发送器,另一端:在这种制式下,通信线的一端接发送器,另一端接接收器,数据只能按照一个固定的方向传送。接接收器,数据只能按照一个固定的方向传送。(2)半双工制式半双工制式:数据可实现双向传送,但不能同时进行。:数据可实现双向传送,但不能同时进行。(3)全双工制式全双工制式:全双工通信系统的每端都有发送器和接收器,:全双工通信系统的每端都有发送器和接
7、收器,可以同时发送和接收。可以同时发送和接收。3.3.串行通信的接口电路串行通信的接口电路 串行接口电路的种类和型号很多。串行接口电路的种类和型号很多。能够完成异步通信的硬件电路称为能够完成异步通信的硬件电路称为UART,即通用异步接收,即通用异步接收器器/发送器发送器;能够完成同步通信的硬件电路称为能够完成同步通信的硬件电路称为USRT;既能够完成异步又能同步通信的硬件电路称为既能够完成异步又能同步通信的硬件电路称为USART.从本质上说,所有的串行接口电路都是以并行数据形式与从本质上说,所有的串行接口电路都是以并行数据形式与CPU接接口,以串行数据形式与外部逻辑接口。它们的基本功能都是从外
8、口,以串行数据形式与外部逻辑接口。它们的基本功能都是从外部逻辑接收串行数据,转换成并行数据后传送给部逻辑接收串行数据,转换成并行数据后传送给CPU,或从,或从CPU接收并行数据,转换成串行数据后输出到外部逻辑。接收并行数据,转换成串行数据后输出到外部逻辑。6.1.2 6.1.2 串行通信的接口串行通信的接口异步串行通信接口标准主要有三类:异步串行通信接口标准主要有三类:RS-232C接口接口 RS-449、RS-422和和RS-485接口接口 20mA电流环电流环 1.RS-232C接口接口(1)RS-232C信息格式标准信息格式标准(2)RS-232C总线规定及其电平转换器总线规定及其电平转
9、换器RS-232C采用的是负逻辑,即:采用的是负逻辑,即:逻辑逻辑“0”:+5V+15V 逻辑逻辑“1”:-5V-15V因此,因此,RS-232C不能和不能和TTL电平直接相连,使用时必须进行电电平直接相连,使用时必须进行电平转换。常用的电平转换集成电路是传输线驱动器平转换。常用的电平转换集成电路是传输线驱动器MC1488和传和传输线接收器输线接收器MC1489。图图6-6 接收器和发送器电平转换集成电路接收器和发送器电平转换集成电路(3)RS-232C总线规定总线规定RS-232C标准总线为标准总线为25根,采用标准的根,采用标准的DB-25或或DB-9的的D形形插头座。插头座。目前计算机上
10、只保留有两个目前计算机上只保留有两个DB-9插头,即插头,即COM1和和COM2两个串行接口。两个串行接口。图图6-8 RS-232C引脚图引脚图 表表6-1 DB-9连接器各引脚各引脚定义连接器各引脚各引脚定义引引脚脚名称名称功功 能能引脚引脚名称名称功功 能能1DCD载波检测载波检测6DSR数据准备完成数据准备完成2RXD发送数据发送数据7RTS发送请求发送请求3TXD接收数据接收数据8CTS发送清除发送清除4DTR数据终端准备完成数据终端准备完成9RI振铃指示振铃指示5SG(GND)信号地线信号地线在最简单的全双工系统中,仅用发送数据、接收数据和信号地三根线在最简单的全双工系统中,仅用发
11、送数据、接收数据和信号地三根线即可,即可,对于对于MCS-51单片机,利用其单片机,利用其RXD(串行数据接收端)线、(串行数据接收端)线、TXD(串行数据发送端)线和一根地线,就可以构成符合(串行数据发送端)线和一根地线,就可以构成符合RS-232C接口标接口标准的全双工通信口。准的全双工通信口。在远距离通信时,一般要加在远距离通信时,一般要加MODEM(调制解调器调制解调器),当计算机与,当计算机与MODEM 连接时,只要将编号相同的引脚连接起来即可连接时,只要将编号相同的引脚连接起来即可。图图6-9 RS-232-C(DB9)与调制解调器的连接图与调制解调器的连接图 在距离较近在距离较近
12、(小于小于15m)的情况下进行通信时,不需要使用的情况下进行通信时,不需要使用MODEM,两个计算机的两个计算机的RS-232-C接口可以直接互连。接口可以直接互连。图图6-10 两个两个RS-232C(DB9)终端设备的连接图终端设备的连接图 2.RS-449、RS-422A、RS-485标准接口标准接口 RS-449标准除了与标准除了与RS-232C兼容外,在提高传输速率,增加传兼容外,在提高传输速率,增加传输距离,改善电气性能等方面有了很大改进。输距离,改善电气性能等方面有了很大改进。(1)RS-449标准接口标准接口 RS-449在很多方面可以代替在很多方面可以代替RS-232C使用。
13、使用。RS-449与与RS-232C的主要差别在于信号在导线上的传输方法不同:的主要差别在于信号在导线上的传输方法不同:RS-232C是利用传输信号与公共地的电压差,是利用传输信号与公共地的电压差,RS-449是利用信号导线之是利用信号导线之间的信号电压差,在间的信号电压差,在1219.2 m的的24-AWG双铰线上进行数字通信。双铰线上进行数字通信。RS-449规定了两种接口标准连接器,一种为规定了两种接口标准连接器,一种为37脚,一种为脚,一种为9脚。脚。RS-449可以不使用调制解调器,它比可以不使用调制解调器,它比RS-232C传输速率高,传输速率高,通信距离长,且由于通信距离长,且由
14、于RS-449系统用平衡信号差传输高速信号,系统用平衡信号差传输高速信号,所以噪声低,又可以多点或者使用公共线通信,故所以噪声低,又可以多点或者使用公共线通信,故RS-449通信通信电缆可与多个设备并联。电缆可与多个设备并联。(2)RS-422A接口接口 RS-422A输出驱动器为双端平衡驱动器,如图输出驱动器为双端平衡驱动器,如图6-11所示。如果其所示。如果其中一条线为逻辑中一条线为逻辑“1”状态,另一条线就为逻辑状态,另一条线就为逻辑“0”,比采用单端,比采用单端不平衡驱动对电压的放大倍数大一倍。不平衡驱动对电压的放大倍数大一倍。RS-422A传输速率(传输速率(90Kbps)时,传输距
15、离可达)时,传输距离可达1200米。米。图图6-11 RS-422A接口接口(2)RS-485接口接口 RS-485的信号传输采用两线间的电压来表示逻辑的信号传输采用两线间的电压来表示逻辑1和逻辑和逻辑0,如,如图图6-12所示。由于发送方需要两根传输线,接收方也需要两根传所示。由于发送方需要两根传输线,接收方也需要两根传输线。传输线采用差动信道,所以它的干扰抑制性极好,又因为输线。传输线采用差动信道,所以它的干扰抑制性极好,又因为它的阻抗低,无接地问题,所以传输距离可达它的阻抗低,无接地问题,所以传输距离可达1200米,传输速率米,传输速率可达可达1Mbps。图图6-12 RS-485接口接
16、口 6.1.3 6.1.3 单片机串行口的结构与控制寄存器单片机串行口的结构与控制寄存器 MCS-5l单片机的串行口主要由两个独立的数据缓冲器单片机的串行口主要由两个独立的数据缓冲器SBUF、一个、一个输入移位寄存器输入移位寄存器PCON(9位位)、一个串行控制寄存器、一个串行控制寄存器SCON和一个波和一个波特率发生器特率发生器T1等组成。等组成。其结构见图其结构见图6-13。图图6-13 串行口结构框图串行口结构框图 1.串行口数据缓冲器串行口数据缓冲器SBUF SBUF是两个在物理上独立的接收、发送寄存器,是两个在物理上独立的接收、发送寄存器,是可以直接寻是可以直接寻址的专用寄存器。一个
17、用于存放接收到的数据,另一个用于存放址的专用寄存器。一个用于存放接收到的数据,另一个用于存放欲发送的数据,可同时发送和接收数据。欲发送的数据,可同时发送和接收数据。两个缓冲器共用一个地址两个缓冲器共用一个地址99H,通过对通过对SBUF的读、写指令来区的读、写指令来区别是对接收缓冲器还是发送缓冲器进行操作。别是对接收缓冲器还是发送缓冲器进行操作。CPU在写在写SBUF时,就是修改发送缓冲器;读时,就是修改发送缓冲器;读SBUF,就是读接,就是读接收缓冲器的内容。收缓冲器的内容。接收或发送数据,是通过串行口对外的两条独立收发信号线接收或发送数据,是通过串行口对外的两条独立收发信号线RXD(P3.
18、0)、)、TXD(P3.1)来实现的,来实现的,因此可以同时发送、接收数因此可以同时发送、接收数据,其工作方式为全双工制式。据,其工作方式为全双工制式。串口的接收串口的接收/发送端具有缓冲的功能,发送端具有缓冲的功能,由由SBUF特殊功能寄存器实特殊功能寄存器实现该功能。接收缓冲器是双缓冲的现该功能。接收缓冲器是双缓冲的,发送缓冲器为单缓冲。发送缓冲器为单缓冲。2.串行口控制寄存器串行口控制寄存器SCON该专用寄存器的主要功能是该专用寄存器的主要功能是选择串行口的工作方式、接收和发送选择串行口的工作方式、接收和发送控制以及串行口的状态标志指示等,可以位寻址,字节地址为控制以及串行口的状态标志指
19、示等,可以位寻址,字节地址为98H。收发双方都有对收发双方都有对SCON的编程,单片机复位时,的编程,单片机复位时,SCON的所有位全的所有位全为为0。SCON的各位含义如图的各位含义如图6-14所示。所示。(1)SM0、SM1(SCON.7、SCON.6)串行口的工作方式选择位串行口的工作方式选择位。其定义如表。其定义如表6-2所示。所示。SM0 SM1工工 作作 方方 式式功功 能能波波 特特 率率0 0方式方式08位同步移位寄存器位同步移位寄存器fosc/120 l方式方式l10位位UART可变可变1 0方式方式211位位UARTfosc/64或或fosc/321 1方式方式311位位U
20、ART可变可变表表6-2串行方式的定义串行方式的定义(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。在
21、方式。在方式0中,中,SM2应为应为0。(3)REN允许串行接收控制位。允许串行接收控制位。由软件置位或清零。由软件置位或清零。REN=1时,允许接收;时,允许接收;REN=0时,禁止接收。时,禁止接收。(4)TB8发送数据的第发送数据的第9位。位。在方式在方式2和方式和方式3中,由软件置位或复位,一般用中,由软件置位或复位,一般用做奇偶校验位。在多机通信中,可作为区别地址帧或数据帧的标识做奇偶校验位。在多机通信中,可作为区别地址帧或数据帧的标识位,一般约定地址帧时位,一般约定地址帧时TB8为为1,数据帧时,数据帧时TB8为为0。(5)RB8接收数据的第接收数据的第9位。位。功能同功能同TB8
22、。(6)TI发送中断标志位。发送中断标志位。在方式在方式0中,发送完中,发送完8位数据后,由硬件置位;在位数据后,由硬件置位;在其它方式中,在发送停止位之初由硬件置位。因此其它方式中,在发送停止位之初由硬件置位。因此TI是发送完一帧是发送完一帧数据的标志,可以用指令来查询是否发送结束。数据的标志,可以用指令来查询是否发送结束。TI=1时,也可向时,也可向CPU申请中断,响应中断后必须由软件清除申请中断,响应中断后必须由软件清除TI。(7)RI接收中断标志位。接收中断标志位。在方式在方式0中,接收完中,接收完8位数据后,由硬件置位;在位数据后,由硬件置位;在其它方式中,在接收停止位时由硬件置位。
23、因此其它方式中,在接收停止位时由硬件置位。因此RI是接收完一帧数是接收完一帧数据的标志,也可以通过指令来查询是否接收完一帧数据。据的标志,也可以通过指令来查询是否接收完一帧数据。RI=1时,时,也可向也可向CPU申请中断,响应中断后也必须由软件清除申请中断,响应中断后也必须由软件清除RI。3.电源和波特率控制寄存器电源和波特率控制寄存器PCON PCON是一个特殊功能寄存器,其字节地址为是一个特殊功能寄存器,其字节地址为87H,只能进行字节寻,只能进行字节寻址,不能按位寻址。址,不能按位寻址。其格式如下图其格式如下图6-15所示。所示。PCON的最高位的最高位D7位作为位作为SMOD,是串行口
24、波特率的选择位。,是串行口波特率的选择位。在在工作方式工作方式1、2、3时,串行通信的波特率与时,串行通信的波特率与SMOD有关。当有关。当SMOD=1时,波特率加倍,当时,波特率加倍,当SMOD=0时,波特率不变。时,波特率不变。系统复系统复位后,位后,SMOD位为位为0。其他各位用于电源管理其他各位用于电源管理。6.1.4 6.1.4 单片机串行口的工作方式单片机串行口的工作方式MCS-51的串行口有的串行口有4种工作方式,种工作方式,通过通过SCON中的中的SM1、SM0位来决定位来决定。1方式方式0 在方式在方式0下,串行口作同步移位寄存器用,以下,串行口作同步移位寄存器用,以8位数据
25、为一帧。位数据为一帧。无起始位和停止位。无起始位和停止位。其波特率固定为其波特率固定为fosc/12。串行数据从串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由)端输入或输出,同步移位脉冲由TXD(P3.1)送出。)送出。这种方式常用于扩展这种方式常用于扩展I/O口,外接移位寄存器实现数据并行输入或口,外接移位寄存器实现数据并行输入或输出。输出。2方式方式1当当SM0=0、SM1=1时,串行口被定义为方式时,串行口被定义为方式1。在方式在方式1下,串行口为波特率可调的下,串行口为波特率可调的10位通用异步接口位通用异步接口UART,发送,发送或接收的一帧信息,包括或接收的一帧信息,包括
26、1位起始位位起始位0,8位数据位和位数据位和1位停止位位停止位1。停止位8位数据起始位D710D01D7D6D5D4D3D2D1第n+1字符帧第n字符帧第n-1字符帧D00图图6-18 方式方式1下下10位数据帧格式位数据帧格式 3方式方式2 当当SM0=1、SM1=0时,串行口被定义为方式时,串行口被定义为方式2。方式方式2下,串行口为下,串行口为11位通用异步接口位通用异步接口UART,这种方式可接收,这种方式可接收或发送或发送11位数据,传送波特率与位数据,传送波特率与PCON的最高位的最高位SMOD有关。有关。发送或接收的一帧数据包括发送或接收的一帧数据包括1位起始位位起始位0,8位数
27、据位,位数据位,1位可编程位可编程位(位(D8)和)和1位停止位位停止位1,共,共11位。位。第第9个数据位即个数据位即D8位可以通过软件来控制它。位可以通过软件来控制它。D0第n-1字符帧第n字符帧第n+1字符帧D1D2D3D4D5D6D70/1 1D0010/1起始位8位数据停止位奇偶校验0图图6-19 方式方式2下下11位数据帧格式位数据帧格式4方式方式3方式方式3为波特率可变的为波特率可变的11位位UART通信方式,除了波特率以外,方式通信方式,除了波特率以外,方式3和方式和方式2完全相同。完全相同。串行口工作于方式串行口工作于方式2和方式和方式3时,与方式时,与方式1不同之处是,进入
28、不同之处是,进入RB8的的是第是第9位数据,而不是停止位。接收到的停止位的值与位数据,而不是停止位。接收到的停止位的值与SBUF、RB8或或RI是无关的。这一个特点可用于多机通信。是无关的。这一个特点可用于多机通信。注意:注意:6.1.5 6.1.5 串行口的波特率串行口的波特率 串行口通过编程可以有串行口通过编程可以有4种工作方式,其中,种工作方式,其中,方式方式0和方式和方式2的波特率的波特率是固定的,方式是固定的,方式1和方式和方式3的波特率可变,由定时器的波特率可变,由定时器1的溢出率决定的溢出率决定。1方式方式0和方式和方式2 在方式在方式0中,波特率为时钟频率的中,波特率为时钟频率
29、的1/12,即,即 ,固定不变。,固定不变。在方式在方式2中,波特率取决于中,波特率取决于PCON中的中的SMOD值,值,当当SMOD=0时,波特率为时,波特率为 ;当当SMOD=1时,波特率为时,波特率为 ,即波特率即波特率 /12oscf/64oscf/32oscf264SMODoscf2方式方式1和方式和方式3 在方式在方式1和方式和方式3下,波特率由定时器下,波特率由定时器T1的溢出率和的溢出率和SMOD共同决定。共同决定。即:即:2T132SMOD溢出率波特率波特率 23212256-X)SMODoscf(表表6-3 定时器定时器T1产生的常用波特率产生的常用波特率 MHzoscf(
30、)C/T波特率(波特率(b/s)SMOD定定 时时 器器 T1方式方式初始值初始值方式方式0:1M12方式方式2:375K121方式方式1、3:62.5K12102FFH19.2K11.0592102FDH9.6K11.0592002FDH4.8K11.0592002FAH2.4K11.0592002F4H1.2K11.0592002E8H137.5K11.9860021DH110600272H11012001FEEBH6.2 6.2 任务任务2 2 单片机的双机通信单片机的双机通信 采用两台采用两台AT89C51单片机甲和乙进行双机串行通信设计。单片机甲和乙进行双机串行通信设计。单片机甲的按
31、键单片机甲的按键K1产生控制码,通过串行口产生控制码,通过串行口TXD端将控制码以端将控制码以方式方式1的方式发送至单片机乙的的方式发送至单片机乙的RXD端,乙机再利用该控制码端,乙机再利用该控制码分别实现分别实现LED1闪烁、闪烁、LED2闪烁、闪烁、LED1和和LED2同时闪烁、关同时闪烁、关闭所有闭所有LED功能。功能。通过本任务的学习,使读者掌握通过本任务的学习,使读者掌握MCS-51系列单片机串行通信系列单片机串行通信的基本原理及控制方法、波特率设计等串行口应用知识。的基本原理及控制方法、波特率设计等串行口应用知识。6.2.1 6.2.1 硬件电路与软件程序设计硬件电路与软件程序设计
32、 1.硬件电路设计硬件电路设计根据单片机双机通信距离、抗干扰性等要求,可以选择直接根据单片机双机通信距离、抗干扰性等要求,可以选择直接TTL电平传输、电平传输、RS-232-C、RS-422A等串行接口方法。等串行接口方法。本设计采用标准本设计采用标准RS-232接口芯片接口芯片MAX232进行通信,硬件电路如进行通信,硬件电路如图图6-20所示。所示。图图6-20 单片机串行口双机通信硬件电路单片机串行口双机通信硬件电路2.程序设计程序设计 程序设计时,首先需要进行串口初始化,主要任务是设置定时器程序设计时,首先需要进行串口初始化,主要任务是设置定时器1,串口控制和中断控制等。,串口控制和中
33、断控制等。本任务中,两片单片机的串口均工作在方式本任务中,两片单片机的串口均工作在方式1下,所以甲机程序下,所以甲机程序中设置中设置SCON=0X40,乙机程序中设,乙机程序中设SCON=0X50,两者都设为,两者都设为方式方式1,但乙机还将,但乙机还将REN位设为位设为1以允许接收。以允许接收。需要说明的是,需要说明的是,本例甲机不接收数据,因此两机的本例甲机不接收数据,因此两机的SCON都设成都设成0X50也不影响运行结果;程序中设也不影响运行结果;程序中设TH1=TL1=0XFD(即(即253),),PCON=0X00(PCON的最高位的最高位SMOD=0,波特率不倍增);本,波特率不倍
34、增);本例中两单片机均使用查询方式,甲机通过循环查询例中两单片机均使用查询方式,甲机通过循环查询TI标志判断是标志判断是否发送完毕,乙机通过查询否发送完毕,乙机通过查询RI判断是否接收到数据。每一次收发判断是否接收到数据。每一次收发前都需要通过程序将前都需要通过程序将TI和和RI清零。清零。甲机程序代码:甲机程序代码:#include#define uchar unsigned char#define uint unsigned intsbit LED1=P00;sbit LED2=P03;sbit K1=P10;/延时延时void DelayMS(uint ms)uchar i;while(
35、ms-)for(i=0;120;i+);/向串口发送字符向串口发送字符void Putc_to_SerialPort(uchar c)SBUF=c;while(TI=0);TI=0;/主程序主程序void main()uchar Operation_No=0;SCON=0 x40;/串口模式串口模式 1TMOD=0 x20;/T1 工作模式工作模式 2PCON=0 x00;/波特率不倍增波特率不倍增TH1=0 xfd;TL1=0 xfd;TI=0;TR1=1;/启动启动T1while(1)if (K1=0)/按下按下 K1 时选择操作代码时选择操作代码 0,1,2,3 while(K1=0);
36、Operation_No=(Operation_No+1)%4;switch(Operation_No)/根据操作代码发送根据操作代码发送 A/B/C 或停止发送或停止发送 case 0:LED1=LED2=1;break;case 1:Putc_to_SerialPort(A);LED1=LED1;LED2=1;break;case 2:Putc_to_SerialPort(B);LED2=LED2;LED1=1;break;case 3:Putc_to_SerialPort(C);LED1=LED1;LED2=LED1;break;DelayMS(100);乙机程序代码:乙机程序代码:#i
37、nclude#define uchar unsigned char#define uint unsigned intsbit LED1=P00;sbit LED2=P03;/延时延时void DelayMS(uint ms)uchar i;while(ms-)for(i=0;i120;i+);/主程序主程序void main()SCON=0 x50;/串口模式串口模式 1,允许接收,允许接收TMOD=0 x20;/T1 工作模式工作模式 2PCON=0 x00;/波特率不倍增波特率不倍增TH1=0 xfd;/波特率波特率 9600 TL1=0 xfd;RI=0;TR1=1;LED1=LED2=
38、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;/双闪烁双闪烁 else LED1=LED2=1;/关闭关闭 LED DelayMS(100);6.2.2 6.2.2 调试与仿真运行调试与仿真运行图图6-21 单片机串行口双机通信仿真图单片机串行口
39、双机通信仿真图6.3 6.3 任务任务3 3 单片机与单片机与PCPC串行通信串行通信 6.3.1 6.3.1 任务与计划任务与计划(1)单片机接收)单片机接收PC机发来的数字串,并逐个显示在数码管上,机发来的数字串,并逐个显示在数码管上,为了显示接收到的数据,在单片机的为了显示接收到的数据,在单片机的P0口连接数码管。口连接数码管。(2)当按下单片机系统的按键时,会有一串中文字符由单片机)当按下单片机系统的按键时,会有一串中文字符由单片机串口发送给串口发送给PC机,并显示在接收窗口。机,并显示在接收窗口。6.3.2 6.3.2 硬件电路与软件程序设计硬件电路与软件程序设计1.硬件电路设计硬件
40、电路设计图图6-22 单片机与单片机与PC之间串行通信硬件电路之间串行通信硬件电路2.程序设计程序设计(1)PC机控制程序机控制程序PC主机的通信程序可以采用主机的通信程序可以采用Turbo C、VC、VB、Delphi等高级等高级语言编写,也可以直接借助于现有的语言编写,也可以直接借助于现有的“串口调试助手串口调试助手”应用软件应用软件完成,用户要由完成,用户要由PC机向单片机发送数据,只要把波特率参数设置机向单片机发送数据,只要把波特率参数设置好就行了,无须自己编程。好就行了,无须自己编程。(2)单片机串口通信程序)单片机串口通信程序使用使用Keil软件建立软件建立“receive”工程项
41、目,建立源程序文件工程项目,建立源程序文件“receive.c”,输入如下源程序:,输入如下源程序:#include#define uchar unsigned char#define uint unsigned intuchar Receive_Buffer101;/接收缓冲接收缓冲uchar Buf_Index=0;/缓存空间缓存空间/数码管编码数码管编码uchar code Dsy_code =0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x00;/延时延时void Delay(uint x)uchar i;w
42、hile(-x)for(i=0;i 120;i+);void main()/主函数主函数uchar i;P0=0 x00;Receive_Buffer0=-1;SCON=0 x50;/串口模式串口模式1,允许接收,允许接收TMOD=0 x20;/T1方式方式2PCON=0 x00;TH1=TL1=0 xFD;/波特率波特率=9600 EA=1;EX0=1;IT0=1;/允许外部中断允许外部中断0,下降沿触发下降沿触发ES=1;/允许串口中断允许串口中断IP=0 x01;/外部中断外部中断0为高优先级为高优先级TR1=1;/启动定时器启动定时器while(1)for(i=0;i=0&c=9)/接
43、收每个字符后存放接收每个字符后存放-1为结束标志为结束标志Receive_Buffer Buf_Index =c 0;Receive_Buffer Buf_Index+1=-1;Buf_Index=(Buf_Index+1)%100;ES=1;/允许串口中断允许串口中断/外部中断外部中断0 void EX_INT0()interrupt 0uchar*s=“单片机发送的字符串单片机发送的字符串!rn”;uchar i=0;while(si!=0)SBUF=si;while(TI=0);TI=0;i+;6.3.3 6.3.3 调试与仿真运行调试与仿真运行图图6-23 单片机与单片机与PC通信仿真
44、图通信仿真图图图6-24 串口调试助手串口调试助手6.4 6.4 任务任务4 4 远程控制交通灯的设计远程控制交通灯的设计 6.4.1 任务要求任务要求设计并实现单片机交通灯控制系统,实现以下三种情况下的交通设计并实现单片机交通灯控制系统,实现以下三种情况下的交通灯控制。灯控制。(1)正常情况下双方向轮流点亮,交通灯的状态如表)正常情况下双方向轮流点亮,交通灯的状态如表6-4所示。所示。(2)特殊情况时)特殊情况时A道运行。道运行。(3)有紧急车辆通行时,)有紧急车辆通行时,A B道均为红灯。紧急情况优先级高道均为红灯。紧急情况优先级高于特殊情况。于特殊情况。表表6-4 交通灯显示状态交通灯显
45、示状态东西方向东西方向(简称简称A方向方向)南北方向南北方向(简称简称B方向方向)状态说明状态说明红灯红灯黄灯黄灯绿灯绿灯红灯红灯黄灯黄灯绿灯绿灯灭灭灭灭亮亮亮亮灭灭灭灭A方向通行,方向通行,B方向禁行方向禁行灭灭灭灭闪烁闪烁亮亮灭灭灭灭A方向警告,方向警告,B方向禁行方向禁行灭灭亮亮灭灭亮亮灭灭灭灭A方向警告,方向警告,B方向禁行方向禁行亮亮灭灭灭灭灭灭灭灭亮亮A方向禁行,方向禁行,B方向通行方向通行亮亮灭灭灭灭灭灭灭灭闪烁闪烁A方向禁行,方向禁行,B方向警告方向警告亮亮灭灭灭灭灭灭亮亮灭灭A方向禁行,方向禁行,B方向警告方向警告本任务实现用本任务实现用PC作为控制主机、单片机控制信号灯为从
46、机的作为控制主机、单片机控制信号灯为从机的远程控制系统。远程控制系统。主、从机双方除了要有统一的数据格式、波特主、从机双方除了要有统一的数据格式、波特率外率外,还要约定一些握手应答信号,即通信协议,还要约定一些握手应答信号,即通信协议,如表如表6-5所示。所示。表表6-5 交通灯控制系统交通灯控制系统PC与单片机通信协议与单片机通信协议主机主机(PC)从机从机(单片机单片机)发送命令发送命令接收应答信息接收应答信息接收命令接收命令回发应答信息回发应答信息01H01H01 H01H命令含义:紧急情况,要求所有方向均为红灯,直到解除命令命令含义:紧急情况,要求所有方向均为红灯,直到解除命令02H0
47、2H02H02H命令含义:解除命令,恢复正常交通指示灯状态命令含义:解除命令,恢复正常交通指示灯状态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禁行禁行001000012
48、1H状态状态4:A禁行禁行,B通行通行00100000、1交替交替20H或或21H状态状态5:A禁行禁行,B绿灯闪绿灯闪0010001022H状态状态6:A禁行禁行,B警告警告表表6-7交通灯控制电路元器件清单交通灯控制电路元器件清单6.4.3 程序设计程序设计1.程序设计流程图程序设计流程图图图6-27 正常情况程序流程正常情况程序流程 图图6-28 中断情况下交通状态流程中断情况下交通状态流程 图图6-29 通信程序流程通信程序流程 2.源程序源程序#include#define uchar unsigned char#define uint unsigned int uchar led=
49、0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F;uchar DispX=0 x04,0 x0c,0 x04,0 x0c,0 x14,0 x20,0 x21,0 x20,0 x21,0 x22;void AFangXing(void);/函数声明函数声明 void ShanShuo(uchar*PTR);void JingGao(uchar*PTR);void BFangXing(void);void delay_5ms(void)/5ms定时定时 uchar i;for(i=0;i0;x-)for(y=100;y0;y-)
50、P2=0 x01;P0=ledx%10;delay_5ms();P2=0 x02;P0=ledx/10;/紧急情况倒计时紧急情况倒计时 delay_5ms();EA=0;P1=i;TH1=l;TL1=m;EA=1;void int_1()interrupt 2/特殊情况中断特殊情况中断uint i,l,m,x,y;EA=0;/关中断关中断i=P1;l=TH1;m=TL1;EA=1;P1=0 x21;for(x=10;x0;x-)for(y=100;y0;y-)P2=0 x01;P0=ledx%10;delay_5ms();P2=0 x02;P0=ledx/10;/特殊情况倒计时特殊情况倒计时d