第7章串行接口_第1页
第7章串行接口_第2页
第7章串行接口_第3页
第7章串行接口_第4页
第7章串行接口_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

基本概念RS-232接口MCS-51的串行接口单片机与单片机之间的通信第

行接口

本章内容SingleChipMicrocomputer7.1串行通信基础串行通信和并行通信计算机1

GND计算机2

GND并行通信计算机1

GND计算机2

GND发送接收串行通信并行通信:数据的各位同时传送;串行通信:数据一位一位顺序传送。与并行通信相比,串行通信的优势传输距离长,可达到数千公里抗干扰能力强,串行通信信号间的互相干扰完全可以忽略。费用低。串行通信的分类:异步(AsynchronousCommunication)同步(SynchronousCommunication)

串行通信制式:单工(a)、半双工(b)和全双工(c)(simplexhalfduplexfullduplex)发送器A站接收器B站单工通信(a)发收A站发收B站发收A站发收B站(b)(c)串行通信的通信方式异步通信方式:单片机的串行通信使用的是异步串行通信,异步通信是指发送方和接收方采用独立的时钟,即双方没有一个相同的参考时钟作为基准。在异步通信中数据一般以一个字符为单位进行传送。用一帧来表示一个字符,一帧信息由起始位(为0信号,占1位)、数据位(传输时低位在先,高位在后)、奇偶较验位(可要可不要)和停止位(为1信号,可1位、1位半或2位)组成。同步通信方式:在同步通信中,每个数据块的开头以同步字符SYN加以指示,使发送与接受双方取得同步。数据块的各字符之间没有起始位和停止位,提高了通信的速度。但为了能保持同步传送,在同步通信中须用一个时钟来协调收发器的工作,这就增加了设备的复杂性。1.字符格式

双方要事先约定字符的编码形式、奇偶校验形式及起始位和停止位的规定。例如用ASCII码通信,有效数据为7位,加一个奇偶校验位、一个起始位和一个停止位共10位。2.波特率波特率就是数据的传送速率,即每秒钟传送的二进制位数,单位为位/秒。它与字符的传送速率(字符/秒)之间有以下关系:

波特率=1个字符的二进制编码位数×字符/秒注:在异步通信中,通信双方必须事先约定字符格式和波特率.异步串行通信基础异步串行通信协议串行通信的错误校验奇偶校验代码和校验循环冗余校验(CRC)

可自动纠错所谓误码率,是指数据经传输后发生错误的位数与总传输位数之比。在计算机通信中,一般要求误码率达到10-6数量级。误码率与通信线路质量、干扰大小及波特率等因素有关差错控制误码率信号调制解调在远距离通信时,为了降低成本,通常大都采用普通电话线(双绞线)进行传输而这种电话线的频率有限,通常不超过3000Hz。若要通过电话线传输数字信号,必须采取一定的措施,其方法就是调制解调技术。具体地说,就是在发送端把数字信号转换成适合于电话线传输地模拟信号,此过程称为调制,能够完成调制任务的设备叫调制器(Modulator);在接收端再把调制的模拟信号还原成数字信号,称为解调,完成解调的设备叫解调器(Demodulator)。调制和解调是一个事物不同的两个方面,而在一个终端设备上往往既要调制,又要解调(以便完成收/发任务),因此,二者缺一不可。通常是把上述两种功能做在一个设备中,称为调制解调器(Modulator-Demodulator,缩写为MODEM)。串行通信的基本特征是数据逐位顺序进行传送串行通信的格式及约定(如:同步方式、通讯速率、数据块格式、信号电平……等)不同,形成了多种串行通信的协议与接口标准。常见的有:☞通用异步收发器(UART)☞通用串行总线(USB)☞I2C总线☞CAN总线☞SPI总线☞RS-485,RS-232C,RS422A标准……等等串行接口RS-232C标准串行通信系统数据终端设备DTE——数据源和目的地数据通信设备DCE——使数据符合线路要求串行通信的接口标准1

机械特性2常用的RS-232C信号线信号代号中第一个字母表示信号类型,A为地线,B为数据线,C为控制线,D为时钟信号。3常用的RS-232C连接1).使用MODEM2).不使用MODEM3).最简单连接4电气特性1).应保证电平在±(5~15)V之间对于数据线:逻辑“1”=-3V~-15V,逻辑“0”=+3V~+15V对于控制信号:接通状态(ON)即信号有效的电平=+3V~15V断开状态(OUT)即信号无效的电平=-3Ⅴ~-15V。2).电平转换RS-232C接口采用的是负逻辑,其逻辑电平与TTL电平不一样,不能兼容。因此,为了实现与TTL电路的连接,必须进行电平转换。目前可以使用新型电平转换芯片MAX232和MAX232A(高速)双组RS-232C发送/接收器,实现TTL电平与RS-232C电平双向转换。3).最大传输速率和最大传输线长度的关系一般应用情况下,RS-232C的最高传输速率为20Kb/s,最大传输线长度为30m。RS423/RS422/RS485RS232单端驱动、单端接收,单端双极性RS423单端驱动、双端差分接收,双极性10MB/S15m90KB/S1200mRS423双端驱动、双端差分接收,平衡方式10MB/S15m90KB/S1200m一个发送器,多个接收器。RS485双端驱动、双端差分接收,平衡方式10MB/S15m100KB/S1200m多个发送器,多个接收器。最多32个7.2MCS-51的串行接口概述有一个可编程全双工串行通信接口(UART)(UniversalAsychronousReceiver/Transmitter

)管脚:TXD(P3.1)、RXD(P3.0)可同时发送、接收数据(Transmit/Receive)有四种工作方式,帧格式有8、10、11位。波特率(Baudrate)可设置

波特率:每秒钟传送二进制数码的位数,也叫比特数,单位为b/s,即位/秒。MCS-51串行接口的结构MCS-51串行接口寄存器SBUF——串行口数据缓冲器共两个:一个发送寄存器SBUF,一个接收SBUF,二者共用一个地址99H。SCON——串行口控制寄存器PCON——电源及波特率选择寄存器

发送时,只需将发送数据输入SBUF,CPU将自动启动和完成串行数据的发送;

接收时,CPU将自动把接收到的数据存入SBUF,用户只需从SBUF中读出接收数据。1、串行数据缓冲器SBUF

在逻辑上只有一个,既表示发送寄存器,又表示接收寄存器,具有同一个单元地址99H,用同一寄存器名SBUF。在物理上有两个,一个是发送缓冲寄存器,另一个是接收缓冲寄存器。指令

MOVSBUF,A

启动一次数据发送,可向SBUF

再发送下一个数指令

MOVA,SBUF

完成一次数据接收,SBUF可再接收下一个数2、串行控制寄存器SCONSCOND7D6D5D4D3D2D1D0位名称SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH9DH9CH9BH9AH99H98H功能工作方式选择多机通信控制接收允许发送第9位接收第9位发送中断接收中断①SM0SM1——串行口工作方式选择位。②SM2——多机通信控制位。③REN——允许接收控制位。REN=1,允许接收。④TB8——方式2和方式3中要发送的第9位数据。⑤RB8——方式2和方式3中要接收的第9位数据。⑥TI——发送中断标志。⑦RI——接收中断标志。①SM0SM1——串行口工作方式选择位。其状态组合所对应的工作方式如表7-5所示。

SM0SM1工作方式

功能说明000同步移位寄存器输入/输出,波特率固定为fosc/1201110位UART;波特率可变(TI溢出率/n,n=32或16)10211位UART,波特率固定为fosc/n,(n=64或32)11311位UART,波特率可变(T1溢出率/n,n=32或16)②SM2------多机通信控制位。在方式2和方式3中,若SM2=1,且RB8(接收到的第9位数据)=1时,将接收到的前8位数据送入SBUF,并置位RI产生中断请求;否则,将接收到的8位数据丢弃。而当SM2=0时,则不论第9位数据为0还是为1,都将前8位数据装入SBUF中,并产生中断请求。在方式0时,SM2必须为0。

③REN------允许接收控制位。REN位用于对串行数据的接收进行控制:REN=0,禁止接收;REN=1,允许接收。该位由软件置位或复位。④TB8------方式2和方式3中要发送的第9位数据。在方式2和方式3时,TB8是发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0表示数据,TB8=1表示地址。该位由软件置位或复位。

TB8还可用于奇偶校验位。⑤RB8------方式2和方式3中要接收的第9位数据。在方式2或方式3时,RB8存放接收到的第9位数据。⑥TI------发送中断标志。当方式0时,发送完第8位数据后,该位由硬件置位。在其他方式下,遇发送停止位时,该位由硬件置位。因此TI=1,表示帧发送结束,可软件查询TI位标志,也可以请求中断。TI位必须由软件清0。⑦RI------接收中断标志。当方式0时,接收完第8位数据后,该位由硬件置位。在其他方式下,当接收到停止位时,该位由硬件置位。因此RI=1,表示帧接收结束,可软件查询RI位标志,也可以请求中断。RI位也必须由软件清0。接收/发送数据,无论是否采用中断方式工作,每接收/发送一个数据都必须用指令对RI/TI

清0,以备下一次收/发。3、电源控制寄存器PCONPCOND7D6D5D4D3D2D1D0位名称SMOD———GF1GF0PDIDL1.SMOD=1,串行口波特率加倍。PCON寄存器不能进行位寻址。☞

SMOD:在串行口工作方式1、2、3中,是波特率加倍位

=1时,波特率加倍

=0时,波特率不加倍。

(在PCON中只有这一个位与串口有关)2)GF1,GF0--用户可自行定义的通用标志位3)PD--掉电方式控制位

PD=0:常规工作方式

PD=1:进入掉电方式

CPU处于掉电方式时,振荡器停振,片内RAM和SRF的值保持不变,P0—P3口维持原状,程序停止。只有复位能退出掉电方式。

4)IDL--待机方式(空闲方式)控制位。

IDL=0:常规工作方式

IDL=1:进入待机方式

CPU处于待机方式时,振荡器继续振荡,中断、定时器、串口功能继续有效,片内RAM和SRF保持不变,CPU状态保持,P0—P3口维持原状,程序停顿。中断、复位都能退出待机状态。

二、串行工作方式

80C51串行通信共有4种工作方式,由串行控制寄存器SCON中SM0SM1决定。

1、串行工作方式0(同步移位寄存器工作方式)以RXD(P3.0)端作为数据移位的输入/输出端,以TXD(P3.1)端输出移位脉冲。移位数据的发送和接收以8位为一帧,不设起始位和停止位,无论输入/输出,均低位在前高位在后。其帧格式为:•••D0D1D2D3D4D5D6D7•••1)发送数据

将数据写入发送缓冲器SBUF后,TXD端输出移位脉冲,串行口把SBUF中的数据依次由低到高以fosc/12的波特率从RXD端输出,一帧数据发送完毕后硬件置发送中断标志位TI为1。若要再次发送数据,必须用指令将TI清零。2)接收数据

在RI=0的条件下,用指令置REN=1即可开始串行接收。TXD端输出移位脉冲,数据依次由低到高以fosc/12的波特率经RXD端接收到SBUF中,一帧数据接收完成后硬件置接收中断标志位RI为1。若要再次接收一帧数据,应该用指令MOVA,SBUF将上一帧数据取走,并用指令将RI清零。

3)方式0工作时,多用查询方式编程:发送:

MOVSBUF,A

JNBTI,$

CLRTI

……接收:

JNBRI,$

CLRRI

MOVA,SBUF

……

注)复位时,SCON被清零,工作方式的缺省值为方式0。接收前,务必先置位REN=1方允许接收数据。⑴数据发送

在移位时钟脉冲(TXD)的控制下,数据从串行口RXD端逐位移入74HC164SA、SB端。当8位数据全部移出后,SCON寄存器的TI位被自动置1。其后74HC164的内容即可并行输出。74HC164CLR为清0端,输出时CLR必须为1,否则74HC164Q0~Q7输出为0。

串行口作为并行输出口使用时,要有“串入并出”的移位寄存器配合。(例如CD4094或74HCl64)

4)方式0可将串行输入输出数据转换成并行输入输出数据。(2)数据接收

串行口作为并行输入口使用时,要有“并入串出”的移位寄存器配合。(例如CD4014或74HCl65)

74HC165S/L端为移位/置入端,当S/L=0时,从Q0~Q7并行置入数据,当S/L=1时,允许从QH端移出数据。在80C51串行控制寄存器SCON中的REN=1时,TXD端发出移位时钟脉冲,从RXD端串行输入8位数据。当接收到第8位数据D7后,置位中断标志RI,表示一帧数据接收完成。应用举例【例7-1】电路如图所示,试编制程序按下列顺序要求每隔0.5秒循环操作。④

从右向左依次点亮,每次亮一个;⑤从左向右依次点亮,每次增加一个, 直至全部点亮;⑥返回从②不断循环。①8个发光二极管全部点亮;②从左向右依次暗灭,每次减少一个,直至全灭;③

从左向右依次点亮,每次亮一个;解:编程如下:LIGHT:MOVSCON,#00H;串行口方式0CLRES;禁止串行中断MOVDPTR,#TAB;置发光二极管亮暗控制字表首址LP1:MOVR7,#0;置顺序编号0LP2:MOVA,R7;读顺序编号

MOVCA,@A+DPTR;读控制字

CLRP1.0;关闭并行输出,STR=O时,关闭并行输出;

MOVSBUF,A;启动串行发送

JNBTI,$

;等待发送完毕

CLRTI;清发送中断标志

SETBP1.0;开启并行输出,STR=1时,开启并行输出;

LCALLDLY500ms;调用延时0.5秒子程序INCR7;指向下一控制字

CJNER7,#30,LP2;判循环操作完否?未完继续

SJMPLP1;顺序编号0~29依次操作完毕,从0开始重新循环TAB:

DB0FFH,7FH,3FH,1FH,0FH,07H,03H,01H,00H;从左向右依次暗灭,

每次减少一个,直至全灭;DB80H,40H,20H,10H,08H,04H,02H,01H;从左向右依次点亮,每次亮一个

DB02H,04H,08H,10H,20H,40H,80H;从右向左依次点亮,每次亮一个

DB0C0H,0E0H,0F0H,0F8H,0FCH,0FEH;从左向右依次点亮,

每次增加一个,直至全部点亮;【例】电路如图所示,试编制程序输入K1~K8状态数据,并存入内RAM40H。解:编程如下:

KIN:

MOVSCON,#00H;串行口方式0CLRES ;禁止串行中断

CLRP1.0;锁存并行输入数据

SETBP1.0;允许串行移位操作

SETBREN;允许并启动接收(TXD发送移位脉冲)

JNBRI,$ ;等待接收完毕

MOV40H,SBUF;存入K1~K8状态数据

RET;2.工作方式1

一帧数据有1O位,1位起始位(低电平信号),8位数据位(先低位后高位),1位停止位(高电平信号)。

波特率可变,由定时器/计数器T1的溢出率和SMOD(PCON.7)决定。其格式如下:起始位数据位停止位0D0D1D2D3D4D5D6D711)发送数据

将数据写入发送缓冲器SBUF后,在串行口由硬件自动加入起始位和停止位来构成完整的字符帧,并在移位脉冲的作用下将其通过TXD端向外串行发送,一帧数据发送完毕后硬件自动置TI=1。再次发送数据前,用指令将TI清零。

(p156表7-9)2)接收数据

在REN=1的条件下,串行口采样RXD端,当采样到从1向0的状态跳变时,就认定为已接收到起始位。随后在移位脉冲的控制下,数据从RXD端输入。在方式1接收数据时,必须同时满足以下两个条件:RI=0,SM2=0或接收数据的停止位为1。若有任一条件不满足,则所接收的数据帧就会丢失。在满足上述接收条件时,接收到的8位数据位进入接收缓冲器SBUF,停止位送入RB8,并置中断标志位RI=1。再次接收数据前,需用指令将RI清零。

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

方式1波特率可变,由定时/计数器T1的计数溢出率来决定。波特率=2SMOD×(T1溢出率)/32

其中SMOD为PCON寄存器中最高位的值,SMOD=1表示波特率倍增。当定时/计数器T1用作波特率发生器时,通常选用定时初值自动重装的工作方式2。其计数结构为8位,假定计数初值为X,单片机的机器周期为T,则定时时间为(256-X)*T。从而在1s内发生溢出的次数(即溢出率)为:

波特率=(2SMOD/32)T1的溢出率波特率=(2SMOD/32)T1的溢出率☞溢出率:T1溢出的频繁程度即:T1溢出一次所需时间的倒数。☞初值X=2n

-2SMODfosc32波特率

12☞波特率=2SMODfosc3212(2n

-X)其中:X是定时器初值⑷应用举例【例7-3】设甲乙机以串行方式1进行数据传送,fosc=11.0592MHz,波特率为1200b/s。甲机发送的16个数据存在内RAM40H~4FH单元中,乙机接收后存在内RAM50H为首地址的区域中。

T1初值=256-×=232=E8H3212×1200解: 串行方式1波特率取决于T1溢出率(设SMOD=0), 计算T1定时初值:

1105920020甲机发送子程序:

MOVTMOD,#20H ;置T1定时器工作方式2 MOVTL1,#0E8H ;置T1计数初值

MOVTH1,#0E8H ;置T1计数重装值

CLRET1 ;禁止T1中断

SETBTR1 ;T1启动

MOVSCON,#40H ;置串行方式1,禁止接收

MOVPCON,#00H ;置SMOD=0(SMOD不能位操作)

CLRES ;禁止串行中断

MOVR0,#40H ;置发送数据区首地址

MOVR2,#16 ;置发送数据长度

MOV A,@R0 ;读一个数据

MOV SBUF,A ;发送

JNB TI,$ ;等待一帧数据发送完毕

CLR TI ;清发送中断标志

INC R0 ;指向下一字节单元

DJNZ R2,TRSA ;判16个数据发完否?未完继续

RET ;TXDA:

TRSA:

MOVTMOD,#20H ;置T1定时器工作方式2 MOVTL1,#0E8H ;置T1计数初值

MOVTH1,#0E8H ;置T1计数重装值

CLRET1 ;禁止T1中断

SETBTR1 ;T1启动

MOVSCON,#40H ;置串行方式1,禁止接收

MOVPCON,#00H ;置SMOD=0(SMOD不能位操作) CLRES ;禁止串行中断

MOVR0,#50H ;置接收数据区首地址

MOVR2,#16 ;置接收数据长度

SETBREN

;启动接收

JNB RI,$ ;等待一帧数据接收完毕

CLR RI ;清接收中断标志

MOV A,SBUF ;读接收数据

MOV @R0,A ;存接收数据

INC R0 ;指向下一数据存储单元

DJNZ R2,RDSB ;判16个数据接收完否?未完继续

RET;乙机接收子程序:RXDB:RDSB:方式2是一帧11位的串行通信方式3、

串行工作方式2起始D0D1D2D3D4D5D6D7TB8/RB8停止当SMOD=0时,波特率=20

╳fosc/64=fosc/64当SMOD=1时,波特率=21

╳fosc/64=fosc/32

数据发送和接收与方式1基本相同,区别在于方式2把发送/接收到的第9位内容送入TB8/RB8。

波特率:方式2波特率固定。如用公式表示则为:波特率=2SMOD╳fosc/64【例7-4】设计一个串行方式2发送子程序(SMOD=1),将片内RAM50H~5FH中的数据串行发送,第9数据位作为奇偶校验位。接到接收方核对正确的回复信号(用FFH表示)后,再发送下一字节数据,否则再重发一遍。解:程序如下:MOVA,@R0;读数据MOVC,PSW.0;奇偶标志送TB8MOVTB8,C;MOVSBUF,A;启动发送JNBTI,$;等待一帧数据发送完毕CLRTI;清发送中断标志SETBREN;允许接收CLRRI;清接收中断标志JNBRI,$;等待接收回复信号MOVA,SBUF;读回复信号CPLA;回复信号取反JNZTRLP;非全0(回复信号≠FFH,错误),转重发INCR0;全0(回复信号=FFH,正确), 指向下一数据存储单元CJNER0,#60H,TRLP;判16个数据发送完否?未完继续RET;TRLP:MOVSCON,#80H;置串行方式2,禁止接收MOVPCON,#80H;置SMOD=1MOVR0,#50H ;置发送数据区首址TRS2:【例7-5】编制一个串行方式2接收子程序,接收上例发送的16个数据,存首址为40H的内RAM中,并核对奇偶校验位,接收核对正确,发出回复信号FFH;发现错误,发出回复信号00H,并等待重新接收。RXD2:MOVSCON,#80H;置串行方式2,禁止接收

MOVPCON,#80H;置SMOD=1MOVR0,#40H;置接收数据区首址

SETBREN;启动接收RWAP:JNBRI,$;等待一帧数据接收完毕

CLRRI

;清接收中断标志

MOVA,SBUF;读接收数据,并在PSW中产生接收数据的奇偶值

JBPSW.0,ONE;P=1,转另判

JBRB8,ERR;P=0,RB8=1,接收有错;

;P=0,RB8=0,接收正确,继续接收RLOP:MOV@R0,A;存接收数据

INCR0;指向下一数据存储单元RIT:MOVA,#0FFH;置回复信号正确FDBK:MOVSBUF,A;发送回复信号

CJNER0,#50H,RWAP;判16个数据接收完否?未完继续

CLRREN;16个数据正确接收完毕,禁止接收

RET;ONE:JNBRB8,ERR;P=1,RB8=0,接收有错

SJMPRLOP;P=1,RB8=1,接收正确,继续接收ERR:CLRA;接收有错,置回复信号错误标志

SJMPFDBK;转发送回复信号解:程序如下:

方式3同样是一帧11位的串行通信方式,其通信过程与方式2完全相同,所不同的仅在于波特率。方式2的波特率只有固定的两种,而方式3的波特率则与方式1相同,即通过设置T1的初值来设定波特率。4、串行工作方式35、串行口四种工作方式的比较

四种工作方式的区别主要表现在帧格式及波特率两个方面。表7-2四种工作方式比较工作方式帧格式波特率方式08位全是数据位,没有起始位、停止位固定,即每个机器周期传送一位数据方式110位,其中1位起始位,8位数据位,1位停止位不固定,取决于T1溢出率和SMOD方式211位,其中1位起始位,9位数据位,1位停止位固定,即2SMOD×fosc/64方式3同方式2同方式1

解决的方法只有调整单片机的时钟频率fosc,通常采用11.0592MHz晶振。6、常用波特率及其产生条件

常用波特率通常按规范取1200、2400、4800、9600、…,若采用晶振12MHz和6MHz,则计算得出的T1定时初值将不是一个整数,产生波特率误差而影响串行通信的同步性能。MCS-51串行口的波特率1.方式0和方式2的波特率是固定的在方式2中,波特率取决于PCON中的SMOD值:当SMOD=0时,波特率为fosc/64;当SMOD=1时,波特率为fosc/32.即波特率=。oscSMODf642在方式0中,波特率为时钟频率的1/12,即fosc/12,固定不变2.方式1和方式3的波特率可变,由定时器1的溢出率决定波特率/(b/s)fosc/MHzSMOD定时器1C/模式初始值方式0:1M方式2:375k方式1、3:62.5k19.2k9.6k4.8k2.4k1.2k137.5k11011012121211.05911.05911.05911.05911.05911.986612×1110000000××000000000××222222221××FFHFDHFDHFAHF4HE8H1DH72HFEEBHT波特率=单片机之间的通信双机异步通信接口电路双机通信软件编程查询方式1)甲机发送编程将甲机片外1000H~101FH单元的数据块从串行口输出。定义方式2发送,TB8为奇偶校验位。发送波特率375kb/s,晶振为12MHz,SMOD=1。参考发送子程序如下:

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,启动发送WAIT:JBCTI,CONT;判断一帧是否发送完。若送完,清TI,取下一个数据

AJMPWAIT;未完等待

CONT:INCDPTR;更新数据单元

DJNZR7,START;循环发送至结束

RET2)乙机接收编程使乙机接收甲机发送过来的数据块,并存入片内50H~6FH单元。接收过程要求判断RB8,若出错置F0标志为1,正确则置F0标志为0,然后返回。在进行双机通信时,两机应采用相同的工作方式和波特率。参考接收子程序如下:

MOVSCON,#80H ;设置串行口为方式2

MOVPCON,#80H ;SMOD=1

MOVR0,#50H ;设置数据块指针

MOVR7,#20H ;设置数据块长度

SETBREN ;启动接收

WAIT:JBCRI,READ;判断是否接收完一帧。若完,清RI,读入数据 AJMPWAIT;未完等待

READ:MOVA,SBUF;读入一帧数据a

JNBPSW.0,PZ;奇偶位为0则转

JNBRB8,ERR;P=1,RB8=0,则出错

SJMPRIGHT;二者全为1,则正确

PZ:JBRB8,ERR;P=0,RB8=1,则出错

RIGHT:MOV@R0,A ;正确,存放数据

INCR0 ;更新地址指针

DJNZR7,WAIT ;判断数据块是否接收完

CLRPSW.5 ;接收正确,且接收完清F0标志

RET ;返回

ERR:SETBPSW.5 ;出错,置F0标志为1

RET ;返回例7-7:甲、乙两单片机以工作方式1进行串行数据通信,波特率为1200,甲机发送,发送数据在甲机外部RAM的1000H-101FH单元中。乙机接收,并把接收数据依次放入乙机外部RAM的1000H-101FH单元中。甲,乙机晶振频率均为11.0592MHz。连接方式如图7-33所示。图7-33硬件连接图分析:①甲、乙机定时用工作方式1,查表7-13(教材p162)得初值为E8H。②SMOD=0,即波特率不倍增。

③用查询传送方式。④SCON=01000000B=40H

甲机发送主程序如下:

ORG0000H

AJMPMAIN;复位入口转主程序

ORG0100HMAIN:MOVTMOD,#20H;设定时器1工作方式2

MOVTL1,#0E8H;设置定时器初值MOVTH1,#0E8H;设置重装值

CLREA;禁止中断

MOVPCON,#00H;(SMOD)=0

MOVSCON,#40H;设串行工作方式1,禁止接收

MOVDPTR,#1000H;建立发送数据地址指针初

MOVR7,#20H;建立计数指针

SETBTR1;启动定时器1

SEND:MOVXA,@DPTR;取数据

MOVSBUF,A;启动数据传送操作

JNBTI,$;等待一帧发送完毕

CLRTI;清TI标志

INCDPTR;指向下一单元DJNZR7,SEND;数据块传送结束?

CLRTR1;传送结束,停止定时器1工作END乙机接收主程序如下:

ORGAJMPORGMOVMOVMOVCLRMOVMOVMOVMOVSETBSETBJNBCLRMOVMOVXINCDJNZCLREND0000HMAIN0100HTMOD,#20HTL1,#0E8HTH1,#0E8HEAPCON,#00HSCON,#40HDPTR,#1000HR7,#20HTR1RENRI,$RIA,SBUF@DPTR,ADPTRR7,RECIVTR1;复位入口转主程序;设定时器1工作方式2;设置定时器初值;设置重装值;禁止中断;SMOD=0;设串行工作方式1;建立接收地址指针初值;建立计数指针;启动定时器T1;启动接收数据操作;等待数据接收完毕;清RI标志;取数据;送外部RAM;指向下一单元;数据块接收完毕?没完继续接收;接收完毕,停止定时器1工作MAIN:RECIV:多机通信

MCS-51单片机工作在串行方式2、3时,具有多机通信功能,可以实现一台主机与多台从机的信息交流。通信只在主从机之间进行,而从机与从机之间不可以直接通信。下图为8051单片机的主从式多机通讯系统。

RXDTXD主机8051RXDTXD80510#从机RXDTXD80511#从机RXDTXD8051N#从机主从多机通信的过程如下:

1)使所有的从机工作在方式2或方式3,且SM2位置1,REN=1,以便接收主机发来的地址。2)主机发出要寻址的从机的一帧地址信息,其中包括8位需要与之通信的从机地址,第9位TB8=1。3)所有从机接收到地址帧后,置RI=1。4)各从机相应中断,进入中断服务程序,进行地址比较。对于地址相同的从机,使SM2=0,准备接收主机随后发来的数据信息;对于地址不符合的从机,仍保持SM2=1的状态,对主机随后发来的数据不予理睬,直至发送新的地址帧。5)主机给已被寻址的从机发送控制指令和数据(数据帧的第9位为0)实现主从通信。6.主从式多机通信应用举例

(1)主机向02号从机发送50H一5FH单元内的数据,串行工作方式2。

ORG2000HMAIN:MOVSCON,#98H;串行口方式2,令SM2=0、REN=1、RTB8=1M1:MOVSBUF,#02H;呼叫02号从机L1:JBCTI,L2SJMPL1L2:JBCRI,S1;等待从机应答

SJMPL2S1:MOVA,SBUF;取出应答地址

XRLA,#02H;判断是否02号机应答JZRIGHT;若02从机,转发送AJMPM1;若不是,重新呼叫RIGHT:CLRTB8;联络成功,清除地址标志

MOVR0,#50H;数据区首址送R0MOVR7,#10H;字节数送R7LOOP:MOVA,@R0;取发送数据

MOVSBUF,A;启动发送WA:JBCTI,CON;判发送中断标志

SJMPWACON:INCR0DJNZR7,LOOPAJMPMAINEND(2)从机(02号)响应主机呼叫的联络程序

ORG2000HMOVR0,#50H;从机数据区首址

MOVR7,#10H;字节长度

SI:MOVSCON,#0B0H;串行口工作方式2,SM=1,REN=1SR1:JBCRI,SR2;等待主机发送

SJMPSR1SR2:MOVA,SBUF;取出呼叫地址

XRLA,#02H;判断是否呼叫本机

JNZSR1;若不是本机,继续等待

CLRSM2;是本机,清SM2MOVSBUF,#02H;向主机发应答地址

WT:JBCTI,SR3;发完地址转

SJMPWT;未发送完继续SR3:JBCRI,SR4;等待主机发送数据

SJMPSR3SR4:JNBRB8,RIGHT;再判断联络成功否

SETBSM2;未联络成功,恢复等待主机发送

SJMPSR1RIGHT:MOVA,SBUF;联络成功,取主机发来的信息

MOV@R0,A;数据送缓冲区

INCR0DJNZR7,SR3;未接收完继续

AJMPSIEND举例(P167)主机发送的地址联络信号为00H,01H,02H…,地址为FFH时命令各从机复位,即恢复SM=1主机命令编码为:01H,主机命令从机接收数据02H,主机命令从机发送数据程序分为主机程序和从机程序,约定一次传递的数据为16字节,以01H地址的从机为例主机程序如下:

ORG 0000H AJMP MAIN ORG 0030HMAIN: MOV TMOD,#20;T1,方式2 MOVTH1,#0FDH;波特率 MOV TL1,#0FDH MOVPCON,#00H SETBTR1 MOVSCON,#0F0H;方式3LOOP1: SETB TB8MOV SBUF,40 JNB TI,$ CLR TI

JNB RI,$;等待从机对联络应答CLR RIMOV A,SBUFXRLA,40JZ AD_OKMOV SBUF,#0FFH;应答错误

JNB TI,$CLR TISJMPLOOP1;CLR TB8MOV SBUF,41H;发送命令字JNB TI,$CLR TIJNB RI,$CLR RIAD_ERR:AD_OK:

MOV A,SBUF;接收应答到A XRLA,#80 JNZCO_OKSETB TB8SJMPADD_ERRCO_OK:MOV A,SBUF; XRLA,#01 JZSE_DATA;可以发送数据

MOV A,SBUF; XRLA,#02 JZRE_DATA;可以接收数据SJMPSE_DATARE_DATA:MOVR6,#00 MOVR0,#30 MOVR7,#10JNB RI,$;CLR RIMOV A,SBUFMOV@R0,AINCR0ADDA,

温馨提示

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

评论

0/150

提交评论