版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MCS-51的串行接口 MCS-51单片机之间的通信
PC机和单片机之间的通信 第5章串行口通信技术本章将介绍以下内容:10/9/202515.1MCS-51的串行接口
MCS-51串行口结构
MCS-51内部有两个独立的接收、发送缓冲器SBUF。SBUF属于特殊功能寄存器。发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入,二者共用一个字节地址(99H)。串行口的结构如图所示。
10/9/20252串行口结构示意图10/9/202531.串行口数据缓冲器SBUF
SBUF是两个在物理上独立的接收、发送寄存器,一个用于存放接收到的数据,另一个用于存放欲发送的数据,可同时发送和接收数据。两个缓冲器共用一个地址99H,通过对SBUF的读、写指令来区别是对接收缓冲器还是发送缓冲器进行操作。CPU在写SBUF时,就是修改发送缓冲器;读SBUF,就是读接收缓冲器的内容。接收或发送数据,是通过串行口对外的两条独立收发信号线RXD(P3.0)、TXD(P3.1)来实现的,因此可以同时发送、接收数据,其工作方式为全双工制式。10/9/202542.串行口控制寄存器SCON
SCON用来控制串行口的工作方式和状态,可以位寻址,字节地址为98H。单片机复位时,所有位全为0。SCON9FH9EH9DH9CH9BH9AH99H98H
SM0SM1SM2RENTB8RB8TIRISCON的各位定义
10/9/20255
SM0、SM1:串行方式选择位。SM2:多机通信控制位,用于方式2和方式3中。在方式2和方式3处于接收方式时,若SM2=1,且接收到的第9位数据RB8为0时,不激活RI;若SM2=1,且RB8=1时,则置RI=1。在方式2、3处于接收或发送方式时,若SM2=0,不论接收到的第9位RB8为0还是为1,TI、RI都以正常方式被激活。在方式1处于接收时,若SM2=1,则只有收到有效的停止位后,RI置1。在方式0中,SM2应为0。REN:允许串行接收位。它由软件置位或清零。REN=1时,允许接收;REN=0时,禁止接收。10/9/20256
TB8:发送数据的第9位。在方式2和方式3中,由软件置位或复位,可做奇偶校验位。在多机通信中,可作为区别地址帧或数据帧的标识位,一般约定地址帧时,TB8为1,数据帧时,TB8为0。RB8:接收数据的第9位。功能同TB8。TI:发送中断标志位。在方式0中,发送完8位数据后,由硬件置位;在其它方式中,在发送停止位之初由硬件置位。因此,TI是发送完一帧数据的标志,可以用指令JBCTI,rel来查询是否发送结束。TI=1时,也可向CPU申请中断,响应中断后,必须由软件清除TI。
10/9/20257
RI:接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其它方式中,在接收停止位的中间由硬件置位。同TI一样,也可以通过JBCRI,rel来查询是否接收完一帧数据。RI=1时,也可申请中断,响应中断后,必须由软件清除RI。SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/1201方式110位UART可变10方式211位UARTfosc/64或fosc/3211方式311位UART可变10/9/20258
如用指令MOVSCON,#40H,使单片机工作在串行通信的方式1下。3.电源及波特率选择寄存器PCON
PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,不可以位寻址,字节地址为87H。在HMOS的8051单片机中,PCON除了最高位以外,其它位都是虚设的。PCON的各位定义
PCON
(87H)D7D6D5D4D3D2D1D0位符号SMOD---GF1GF0PDIDL10/9/202595.2MCS-51串行的工作方式
MCS-51的串行口有4种工作方式,通过SCON中的SM1、SM0位来决定,如表8.1所示。1.方式0
在方式0下,串行口作同步移位寄存器用,其波特率固定为fosc/12。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式常用于扩展I/O口。
1)发送
当一个数据写入串行口发送缓冲器SBUF时,串行口将8位数据以fosc/12的波特率从RXD引脚输出(低位在前),发送完置中断标志TI为1,请求中断。在再次发送数据之前,必须由软件清TI为0。具体接线图如图所示。其中,74LS164为串入并出移位寄存器。10/9/202510
方式0用于扩展I/O口输出10/9/202511
2)接收
在满足REN=1和RI=0的条件下,串行口即开始从RXD端以fosc/12的波特率输入数据(低位在前),当接收完8位数据后,置中断标志RI为1,请求中断。在再次接收数据之前,必须由软件清RI为0。具体接线图如图所示。其中,74LS165为并入串出移位寄存器。
串行控制寄存器SCON中的TB8和RB8在方式0中未用。值得注意的是,每当发送或接收完8位数据后,硬件会自动置TI或RI为1,CPU响应TI或RI中断后,必须由用户用软件清0。方式0时,SM2必须为0。10/9/202512
方式0用于扩展I/O口输入
10/9/202513
2.方式1串行口为波特率可调的10位通用异步接口UART。发送或接收一帧信息,包括1位起始位0,8位数据位和1位停止位1。其帧格式如下图所示。1)发送发送时,数据从TXD端输出,当数据写入发送缓冲器SBUF后,启动发送器发送。当发送完一帧数据后,置中断标志TI为1。方式1所传送的波特率取决于定时器1的溢出率和PCON中的SMOD位。
10/9/20251410位的帧格式
10/9/202515
2)接收接收时,由REN置1,允许接收,串行口采样RXD,当采样由1到0跳变时,确认是起始位“0”,开始接收一帧数据。当RI=0,且停止位为1或SM2=0时,停止位进入RB8位,同时置中断标志RI;否则信息将丢失。所以,方式1接收时,应先用软件清除RI或SM2标志。3.方式2方式2下,串行口为11位UART,传送波特率与SMOD有关。发送或接收一帧数据包括1位起始位0,8位数据位,1位可编程位(用于奇偶校验)和1位停止位1。其帧格式如下图所示。10/9/20251611位的帧格式
10/9/202517
1)发送发送时,先根据通信协议由软件设置TB8,然后用指令将要发送的数据写入SBUF,启动发送器。写SBUF的指令,除了将8位数据送入SBUF外,同时还将TB8装入发送移位寄存器的第9位,并通知发送控制器进行一次发送。一帧信息即从TXD发送,在送完一帧信息后,TI被自动置1,在发送下一帧信息之前,TI必须由中断服务程序或查询程序清0。
10/9/202518
2)接收当REN=1时,允许串行口接收数据。数据由RXD端输入,接收11位的信息。当接收器采样到RXD端的负跳变,并判断起始位有效后,开始接收一帧信息。当接收器接收到第9位数据后,若同时满足以下两个条件:RI=0和SM2=0或接收到的第9位数据为1,则接收数据有效,8位数据送入SBUF,第9位送入RB8,并置RI=1。若不满足上述两个条件,则信息丢失。4.方式3方式3为波特率可变的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。10/9/2025195.3MCS-51串行口的波特率
在串行通信中,收发双方对传送的数据速率,即波特率要有一定的约定。通过8.3.2节的论述,我们已经知道,MCS-51单片机的串行口通过编程可以有4种工作方式。其中,方式0和方式2的波特率是固定的,方式1和方式3的波特率可变,由定时器1的溢出率决定,下面加以分析。1.方式0和方式2
在方式0中,波特率为时钟频率的1/12,即fosc/12,固定不变。在方式2中,波特率取决于PCON中的SMOD值,当SMOD=0时,波特率为fosc/64;当SMOD=1时,波特率为fosc/32.即:波特率=10/9/202520
实际上,当定时器1做波特率发生器使用时,通常是工作在模式2,即自动重装载的8位定时器,此时TL1作计数用,自动重装载的值在TH1内。设计数的预置值(初始值)为X,那么每过256-X个机器周期,定时器溢出一次。为了避免因溢出而产生不必要的中断,此时应禁止T1中断。溢出周期为:溢出率为溢出周期的倒数,所以
波特率=10/9/202522定时器1产生的常用波特率波特率/(b/s)fosc/MHzSMOD定时器1C/模式初始值方式0:1方式2:375k方式1、3:62.5k19.2k9.6k4.8k2.4k1.2k137.5k11011012121211.05911.05911.05911.05911.05911.986612×1110000000××000000000××222222221××FFHFDHFDHFAHF4HE8H1DH72HFEEBH10/9/2025235.4MCS-51单片机之间的通信
5.4.1双机通信硬件电路如果两个MCS-51单片机系统距离较近,那么就可以将它们的串行口直接相连,实现双机通信。为了增加通信距离,减少通道和电源干扰,可以在通信线路上采用光电隔离的方法,利用RS-422A标准进行双机通信,实用的接口电路如下图所示。
10/9/202524双机异步通信接口电路
10/9/202525RS-422A双机异步通信接口电路
10/9/202526
发送端的数据由串行口TXD端输出,通过74LS05反向驱动,经光电耦合器送到驱动芯片SN75174的输入端。SN75174将输出的TTL信号转换为符合RS-422A标准的差动信号输出,经传输线(双绞线)将信号送到接收端。接收芯片SN75175将差动信号转换为TTL信号,通过反向后,经光电耦合器到达接收机串行口的接收端。每个通道的接收端都有三个电阻:R1,R2,R3。R1为传输线的匹配电阻,取值在100Ω~1kΩ之间,其它两个电阻是为了解决第一个数据的误码而设置的匹配电阻。值得注意的是,光电耦合器必须使用两组独立的电源,只有这样才能起到隔离、抗干扰的作用。10/9/2025275.4.2双机通信软件编程1.查询方式1)甲机发送编程将甲机片外1000H~101FH单元的数据块从串行口输出。定义方式2发送,TB8为奇偶校验位。发送波特率375kb/s,晶振为12MHz,所以SMOD=1。10/9/202528发送子程序如下: MOV SCON,#80H;设置串行口为方式2 MOV PCON,#80H;SMOD=1 MOV DPTR,#1000H;设数据块指针 MOV R7,#20H;设数据块长度START:MOVXA,@DPTR;取数据给A MOV C,P MOV TB8,C ;奇偶位P送给TB8MOV SBUF,A;数据送SBUF,启动发送10/9/202529
WAIT:JBCTI,CONT;判断一帧是否发送完发送完,清TI,取下一个数据AJMPWAIT ;未完等待CONT:INC DPTR ;更新数据单元 DJNZR7,START;循环发送至结束 RET10/9/202530
2)乙机接收编程使乙机接收甲机发送过来的数据块,并存入片内50H~6FH单元。接收过程要求判断RB8,若出错置F0标志为1,正确则置F0标志为0,然后返回。在进行双机通信时,两机应采用相同的工作方式和波特率。参考接收子程序如下: MOVSCON,#80H ;设置串行口为方式2 MOVPCON,#80H ;SMOD=1MOVR0,#50H ;设置数据块指针MOVR7,#20H ;设置数据块长度SETBREN ;启动接收10/9/202531
WAIT:JBCRI,READ;判断是否接收完一帧,若完,清RI,读入数据AJMPWAIT;未完等待READ:MOVA,SBUF;读入一帧数据 JNBPSW.0,PZ;奇偶位为0则转JNBRB8,ERR;P=1,RB8=0,则出错 SJMPRIGHT;二者全为1,则正确PZ:JBRB8,ERR;P=0,RB8=1,则出错10/9/202532
RIGHT:MOV@R0,A ;正确,存放数据 INCR0 ;更新地址指针DJNZR7,WAIT ;判断数据块是否接收完 CLRPSW.5 ;接收正确,且接收完清F0标志 RET ;返回ERR:SETBPSW.5 ;出错,置F0标志为1 RET ;返回10/9/202533
在上述查询方式的双机通信中,因为发送双方单片机的串行口均按方式2工作,所以帧格式是11位的,收发双方均是采用奇偶位TB8来进行校验的。传送数据的波特率与定时器无关,所以程序中没有涉及定时器的编程。2.中断方式在很多应用中,双机通信的接收方都采用中断的方式来接收数据,以提高CPU的工作效率;发送方仍然采用查询方式发送。10/9/202534
1)甲机发送上面的通信程序,收发双方是采用奇偶位TB8来进行校验的,这里介绍一种用累加和进行校验的方法。编程将甲机片内60H~6FH单元的数据块从串行口发送,在发送之前将数据块长度发送给乙机,当发送完16个字节后,再发送一个累加校验和。定义双机串行口按方式1工作,晶振为11.059MHz,波特率为2400b/s,定时器1按方式2工作。经计算或查表得到定时器预置值为0F4H,SMOD=0。参考发送子程序如下:10/9/202535
MOVTMOD,#20H;设置定时器1为方式2MOVTL1,#0F4H;设置预置值MOVTH1,#0F4HSETBTR1;启动定时器1MOVSCON,#50H;设置串行口为方式1,允许接收START:MOVR0,#60H;设置数据指针MOVR5,#10H;设置数据长度MOVR4,#00H;累加校验和初始化MOVSBUF,R5;发送数据长度10/9/202536WAIT1: JBCTI,TRS ;等待发送 AJMPWAIT1TRS: MOVA,@R0 ;读取数据MOVSBUF,A ;发送数据 ADDA,R4 MOVR4,A ;形成累加和 INCR0 ;修改数据指针10/9/202537
WAIT2: JBCTI,CONT;等待发送一帧数据 AJMPWAIT2CONT: DJNZR5,TRS;判断数据块是否发送完 MOVSBUF,R4;发送累加校验和WAIT3:JBCTI,WAIT4;等待发送AJMPWAIT3WAIT4:JBCRI,READ;等待乙机回答 AJMPWAIT410/9/202538
READ: MOVA,SBUF;接收乙机数据 JZRIGHT;00H,发送正确,返回 AJMPSTART;发送出错,重发RIGHT: RET2)乙机接收乙机接收甲机发送的数据,并存入以2000H开始的片外数据存储器中。首先接收数据长度,接着接收数据,当接收完16个字节后,接收累加和校验码,进行校验。数据传送结束后,根据校验结果向甲机发送一个状态字,00H表示正确,0FFH表示出错,出错则甲机重发。10/9/202539
接收采用中断方式。设置两个标志位(7FH,7EH位)来判断接收到的信息是数据块长度、数据还是累加校验和。参考接收程序如下:ORG0000HLJMPCSH ;转初始化程序ORG0023HLJMPINTS ;转串行口中断程序ORG0100H10/9/202540
CSH: MOVTMOD,#20H ;设置定时器1为方式2MOVTL1,#0F4H ;设置预置值MOVTH1,#0F4HSETBTR1 ;启动定时器1 MOVSCON#50H ;串行口初始化 SETB7FH ;置长度标志位为1 SETB7EH;置数据块标志位为110/9/202541INTS:CLREA ;关中断 CLRRI ;清中断标志 PUSHA ;保护现场 PUSHDPH PUSHDPLJB7FH,CHANG;判断是数据块长度吗? JB7EH,DATA;判断是数据块吗?10/9/202543SUM:MOVA,SBUF;接收校验和CJNZA,40H,ERR;判断接收是否正确MOVA,#00H;二者相等,正确,向甲机发送00H MOVSBUF,AWAIT1:JNBTI,WAIT1 CLRTI SJMPRETURN;发送完,转到返回ERR:MOVA,#0FFH;二者不相等,错误,向甲机发送FFH MOVSBUF,A10/9/202544WAIT2:JNBTI,WAIT2CLRTISJMPAGAIN;发送完,转重新开始CHANG:MOVA,SBUF;接收长度 MOV41H,A ;长度存入41H单元CLR7FH ;清长度标志位SJMPRETURN ;转返回DATA:MOVA,SBUF;接收数据 MOVDPH,31H;存入片外RAM MOVDPL,30H10/9/202545
MOVX@DPTR,AINCDPTR;修改片外RAM的地址MOV31H,DPHMOV30H,DPLADDA,40H ;形成累加和,放在40H单元MOV40H,ADJNZ41H,RETURN;判断数据块是否接收完CLR7EH ;接收完,清数据块标志位SJMPRETURN10/9/202546
AGAIN:SETB7FH;接收出错,恢复标志位,重新开始接收SETB7EH MOV31H,#20H;恢复片外RAM起始地址 MOV30H,#00HMOV40H,#00H;累加和寄存器清零RETURN:POPDPL ;恢复现场 POPDPH POPA SETBEA ;开中断 RETI ;返回10/9/202547
5.4.3多机通信MCS-51串行口的方式2和方式3有一个专门的应用领域,即多机通信。这一功能通常采用主从式多机通信方式,在这种方式中,要用一台主机和多台从机。主机发送的信息可以传送到各个从机或指定的从机,各从机发送的信息只能被主机接收,从机与从机之间不能进行通信。图是多机通信的一种连接示意图。多机通信的实现,主要依靠主、从机之间正确地设置与判断SM2和发送或接收的第9位数据来(TB8或RB8)完成的。我们首先将上述二者的作用总结如下:
10/9/202548多机通信连接示意图
10/9/202549
多机通信的实现,主要依靠主、从机之间正确地设置与判断SM2和发送或接收的第9位数据来(TB8或RB8)完成的。我们首先将上述二者的作用总结如下。在单片机串行口以方式2或方式3接收时,一方面,若SM2=1,表示置多机通信功能位。这时有两种情况:①接收到第9位数据为1,此时数据装入SBUF,并置RI=1,向CPU发中断请求;②接收到第9位数据为0,此时不产生中断,信息将被丢失,不能接收。另一方面,若SM2=0,则接收到的第9位信息无论是1还是0,都产生RI=1的中断标志,接收的数据装入SBUF。根据这个功能,就可以实现多机通信。10/9/202550
在编程前,首先要给各从机定义地址编号,如分别为00H、01H、02H等。在主机想发送一个数据块给某个从机时,它必须先送出一个地址字节,以辨认从机。编程实现多机通信的过程如下:(1)主机发送一帧地址信息,与所需的从机联络。主机应置TB8为1,表示发送的是地址帧。例如:MOVSCON,#0D8H;设串行口为方式3,TB8=1,允许接收(2)所有从机初始化设置SM2=1,处于准备接收一帧地址信息的状态。例如:MOVSCON,#0F0H;设串行口为方式3,SM2=1,允许接收10/9/2025515.5PC机和单片机之间的通信
在工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。它们大多由IBM-PC微机和单片机组成。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。
10/9/202553
5.5.1接口设计PC机与单片机之间可以由RS-232C、RS-422A或RS-423等接口相连。在PC机系统内都装有异步通信适配器,利用它可以实现异步串行通信。该适配器的核心元件是可编程的Intel8250芯片,它使PC机有能力与其它具有标准的RS-232C接口的计算机或设备进行通信。而MCS-51单片机本身具有一个全双工的串行口,因此只要配以电平转换的驱动电路、隔离电路就可组成一个简单可行的通信接口。同样,PC机和单片机之间的通信也分为双机通信和多机通信。
10/9/202554
PC机和单片机最简单的连接是零调制三线经济型。这是进行全双工通信所必须的最少线路。因为MCS-51单片机输入、输出电平为TTL电平,而PC机配置的是RS-232C标准接口,二者的电气规范不同,所以要加电平转换电路。常用的有MC1488、MC1489和MAX232,下图给出了采用MAX232芯片的PC机和单片机串行通信接口电路,与PC机相连采用9芯标准插座。10/9/202555PC机和单片机串行通信接口
10/9/2025565.5.2软件编程1.单片机通信软件
例:设单片机串行口工作在方式1,通过中断方式接收PC机发送的数据,并返回PC
。晶振为6MHz,波特率2400b/s,定时器1按方式2工作。经计算,定时器预置值为0F3H,SMOD=1。参考程序如下: ORG0000HLJMPCSH;转初始化程序 ORG0023H LJMPINTS;转串行口中断程序 ORG0050H10/9/202557
CSH:MOVTMOD,#20H;设置定时器1为方式2MOVTL1,#0F3H;设置预置值MOVTH1,#0F3HSETBTR1 ;启动定时器1MOVSCON#50H ;串行口初始化 MOVPCON#80HSETBEA ;允许串行口中断SETBESLJMPMAIN ;转主程序(主程序略) …10/9/202558
INTS:CLREA;关中断 CLRRI;清串行口中断标志PUSHDPL;保护现场PUSHDPHPUSHA MOVA,SBUF;接收PC机发送的数据MOVSBUF,A;将数据回送给PC机10/9/202559
WAIT: JNBTI,WAIT ;等待发送CLRTIPOPA ;发送完,恢复现场POPDPHPOPDPLSETBEA ;开中断RETI ;返回10/9/2025602.
PC机通信软件
PC机方面的通信程序可以直接用汇编语言编写,也可以用其它高级语言,如C语言来编写,但这种方法不仅编程复杂而且调试也很繁琐。在Windows环境下,利用PC机串口进行通信的常用方法有两种,第一是调用WindowsAPI函数;第二是使用ActiveX的MSComm控件。第一种方法需声明及调用许多API函数,十分烦琐。而第二种方法实际上是通过通信组件间接的调用了WindowsAPI函数,其过程要比直接调用API要复杂,但是在实际程序的实现上要比前一种方式简单得多。
10/9/202561
用VB6.0进行串行通信程序设计的方法:10/9/202562INCR0 ;TI:发送中断标志位。MOVTL1,#0F4H;在其它方式中,在接收停
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 碳二饱和气体回收装置操作工岗中工艺分析考核试卷含答案
- 轨道交通调度员核心能力竞赛考核试卷含答案
- 高炉运转工岗位生产安全意识考核试卷含答案
- 雷管制造工岗位优化考核试卷含答案
- 2026年综合智慧能源高级工程师招聘笔试试卷 招录12人
- 2026年河北省南宫市高三数学下册期末考试模拟测试卷带答案(达标题)
- 2026年青海省格尔木市高三数学下册期末考试模拟检测卷附参考答案【研优卷】
- 2026年江西省瑞金市高三数学下册期末考试模拟检测卷附答案(精练)
- 2026年云南省个旧市高三数学下册期末考试模拟检测卷附答案【A卷】
- 2026年安徽省桐城市高三数学下册期末考试模拟测试卷及参考答案(研优卷)
- 云南省西双版纳傣族自治州景洪市2026年公务员遴选试题题库及答案
- 2026年大数据工程师笔试试卷(附答案)
- 面料染色工艺质量控制细则
- 衰弱老年住院患者护理专家共识(2026完整版)
- 交通运输部所属事业单位统一招聘笔试真题2025
- 2026中国高端装备润滑材料技术门槛与军事应用价值报告
- 2026年抗菌药物合理使用全员培训计划表
- 电梯维修保养标准操作规程
- 戒烟健康科普 拥抱美好人生
- 2025新初任检察官遴选考试核心题库试题及答案
- 碳排放管理与碳减排知识考试复习题库(附答案)
评论
0/150
提交评论