




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章MCS-51系统串行通信接口,9.1串行通信基础9.2MCS-51串行通信接口,9.1串行通信基础,I/O数据的传送方式:主要指与CPU怎么交互同步传送:CPU可在任意时刻读或写数据查询方式:CPU通过查询外设状态口信息,决定读或写中断方式:利用CPU本身的中断功能DMA方式:不经过CPU,直接在外设和内存之间传送。,一、通信的基本方式:根据数据的同一时刻传送的位数分为并行通信和串行通信。1、并行通信数据的各位同时传送,并行通信的特点是:传送速度快、效率高。但有多少数据位就需多少根数据线,因此传送成本高。在集成电路芯片的内部、同一插件板上各部件之间、同一机箱内各插件板之间等的数据传送都是并行的。并行通信的距离通常小于30米。,串行通信的特点是:数据传送按位顺序进行,最少只需一根传输线即可完成,成本低但速度慢,在图中可以看到,并行传送8位数只需串行发送一位的时间1T。计算机与远程终端或终端与终端之间的数据传送通常都是串行的。串行通信的距离可以从几米到几千公里。而并行通信的距离30米,2、串行通信数据一位一位顺序传送,二、串行通信的方式,按照串行数据的同步方式,串行通信又分为两种方式:,在单片机中,主要使用异步通信方式.,异步通信,同步通信,在异步通信中,数据通常是以字符(字节)为单位组成字符帧传送的。字符帧由发送端一帧一帧地发送,通过传输线由接收设备一帧一帧地接收。发送端和接收端可以有各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。在异步通信中,发送端和接收端依靠字符帧格式和波特率来协调数据的发送和接收。字符帧格式和波特率是两个重要指标,由用户根据实际情况选定。,1异步通信(AsynchronousCommunication),字符帧也叫数据帧,起始位、数据位、奇偶校验位和停止位四部分组成。,字符帧格式,2)起始位:位于字符帧开头,占一位,使数据线处于“space”(逻辑)状态,用于向接收设备表示发送端开始发送一帧信息。3)数据位:紧跟起始位之后就传送数据位。在数据位中,低位在前(左),高位在后(右)。根据字符编码方式的不同,数据位可取5位、6位、7位或8位。若传送数据为ASCII码,则常取7位。4)奇偶校验位:位于数据位之后,仅占一位,用于对字符传送作正确性检查。奇偶校验位有3种可能的选择:奇、偶或无校验,由用户根据需要选定。5)停止位:位于字符帧末尾,它对应于“mark”(逻辑1)状态,用于向接收端表示一帧字符信息已发送完毕。停止位可以是1、1.5或2位,在实际应用中由用户根据需要确定。,波特率(baudrate),波特率的定义:是每秒钟传送二进制数码的位数(亦称比特数),单位是bps(bitpersecond),即位/秒。字符的实际传送速率:是指每秒钟内所传字符帧的帧数,与字符帧格式有关。波特率是串行通信的重要指标,用于表征数据传送的速率。波特率越高,数据传输速度越快。,同步通信是以一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符,由同步字符、数据字符和校验字符三部分组成。同步字符:位于帧结构的开头,用于确认数据字符的开始。由于接收端不断对传输线采样,并把采样到的字符与双方约定的同步字符比较,只有比较成功后才会把后面接收到的字符数据加以存储。,2、同步通信(SynchronousCommunication),一、MCS-51串行口结构,9.2MCS-51单片机串行口结构及控制,1、SBUF(发送)和SBUF(接收)8位缓冲寄存器共用一个端口地址99HSBUF(发送)存放将要发送的字符数据SBUF(接收)存放串行口接收到的字符数据MOVSBUF,A(发送)产生写SBUF脉冲MOVA,SBUF(接收)产生读SBUF脉冲,2、在异步通信中,发送和接收都是在发送时钟和接收时钟控制下进行的,发送和接收时钟即可由主机频率经分频后提供,也可由内部定时器T1或T2的溢出率经过16分频后提供。,3、串行口的发送,MOVSBUF,A,自动在发送字符前后添加起始位、停止位和其它控制位,然后在移位脉冲控制下,一位一位地从TXD线上串行发送字符帧。,4、串行口的接收,接收电路连续接收到一帧字符后就自动的去掉起始位并使RI=1,向CPU提出中断请求(设串行口中断是开放的)。CPU响应中断MOVA,SBUF,二、串行口工作方式,1、方式0该方式只能与串行口设备寄存器方式连接,不能实现双机之间通信,每次传送8位数据,其波特率固定为fosc/12,传输距离一般不超2米。,2、方式1该方式是典型的双机异步通信方式,字符帧格式为10位(8位数据位、一位起始位和一位停止位),波特率由定时器T1的溢出率决定。,SMOD:波特率倍增选择,由PCON寄存器的最高位设置。SMOD的选择与波特率误差有关。,fosc:51单片机主时钟。一般选6MHz12MHz。K:定时器T1的计数器长度,T1若选工作方式2,则K=8。N:定时器定时常数的初值。,三、串行口工作方式设置,串行口工作方式的设置和控制是通过SCON(98H)和PCON(87H)实现。,SM0和SM1:串行口方式控制位,设定串行口的工作方式,SM2:多机通信控制位,方式2、3使用。方式0、1不用,应设置为0状态。,REN:允许接收控制位。REN=0,则禁止串行口接收REN=1,则允许串行口接收,TB8:发送数据第9位,方式2、3时存放发送数据第9位。TB8由软件置位或复位。,RB8:接收数据第9位,方式2、3时存放接收数据第9位。在方式1下,若SM2=0,RB8存放接收到的停止位。方式0下,不使用RB8,TI:发送中断标志位,用于指示一帧数据是否发送完。在方式0下,发送电路发送完第8位数据时,TI由硬件置位;在其它方式下,TI在发送电路开始发送停止位时置位。TI在发送前必须由软件复位,发送完一帧后由硬件置位的。TI位也可供CPU查询。,RI:为接收中断标志位,用于指示一帧信息是否接收完。在方式0下,RI在接收电路接收到第8位数据时由硬件置位;在其它方式下,RI是在接收电路接收到停止位的中间位置时置位的。RI也可供CPU查询,以决定CPU是否需要从“SBUF(接收)”中提取接收到的字符或数据。RI也由软件复位。,9.2串行口各种工作方式应用举例,一、方式0SM2、TB8、RB8不起作用,应设置“0”态,发送(TI=0),MOVSBUF,A,A数据送入SBUF(发送),RxD线发出8位数据,TxD线发送同步脉冲。8位数据发送完后,TI由硬件置位,向CPU请求中断(若中断开放)。CPU响应中断后先用软件使TI清零,然后再给“SBUF(发送)”送下一个欲发送字符。,接收(RI=0和REN=1)串行数据由RxD线输入,TxD线输出同步脉冲。接收电路接收到8位数据后,RI自动置“1”并发出串行口中断请求。CPU查询到RI=1或响应中断后便可通过MOVA,SBUFSBUF(接收)数据送入A。,例1请编出发光二极管自左至右以一定速度显示的程序。设发光二极管为共阴极接法。,主程序ORG2000HMOVSCON,#00H;串行口初始化为方式0MOVIE,90H;开串口中断CLRP1.0;禁止CD4094并行输出MOVA,#80H;起始显示码送AMOVSBUF,A;8031串行输出LOOP:SJMPLOOP;等待串行口输出完,中断服务程序ORG0023HLJMPSBV;转SBVORG0100HSBV:SETBP1.0;点亮发光二极管LCALLDELAY;点亮一段时间CLRTI;清发送中断标志RRA;准备点亮下一位CLRP1.0;灭显示MOVSBUF,A;串行口输出RETI;中断返回DELAY:;延时程序END,二、方式1,串行口设定为10位异步通信方式。8位数据位,1位起始位,1位停止位。发送(TI=0),MOVSBUF,A发送电路自动在8位发送字符前后分别添加1位起始位和停止位,并在移位脉冲的作用下在TxD线上依次发送一帧信息,发送完后自动维持TxD线为高电平。TI由硬件在发送停止位时置位,由软件将它复位。,接收(RI=0和REN=1)在接收到有效停止位时,接收电路必须同时满足以下两个条件:RI=0和SM2=0,才能把接收到的8位字符存入“SBUF(接收)”中,把停止位送入RB8中,并使RI=1和发出串行口中断请求。,例2请用中断法编出串行口方式1下的发送程序。设单片机主频为6MHz,定时器T1用作波特率发生器,波特率为2400bps,被发送字符块在内部RAM的地址为TBLOCK单元,字符块长度为LEN。要求奇校验位在数据第8位发送,字符块长度LEN率先发送。,波特率为2400bps,取SMOD=1,由表查得TH1和TL1的时间常数初值为F4H。,主程序ORG2100HTBLOCKDATA20HLENDATA14HSTART:MOVTMOD,#20H;定时器T1为方式2MOVTL1,#0F4H;波特率为2400bpsMOVTH1,#0F4H;给TH1送重装初值MOVPCON,#80H;令SMOD=1SETBTR1;启动T1MOVSCON,#40H;串行口为方式1MOVR0,#TBLOCK;字符块始址送R0MOVA,#LENMOVR2,A;字符块长度字节送R2MOVSBUF,A;发送LEN字节SETBEA;开CPU中断WAIT:SETBES;允许串行口中断SJMPWAIT;等待中断,中断服务程序ORG0023HLJMPTXSVE;转发送服务程序ORG2150HTXSVE:CLRTI;清TIMOVA,R0;发送字符送AMOVC,PSW.0;奇偶校验位送CCPLC;形成奇偶校验位送CMOVACC.7,C;使A中成为奇数个1MOVSBUF,A;启动发送DJNZR2,NEXT;若字符块未发完,则NEXTCLRES;关串行口中断SJMPSTOP;停止发送NEXT:INCR0;字符块指针加1STOP:RETI;中断返回END,双机之间通信时,SM2=0、REN=1、TB8/RB8可做奇偶位,多机通信时,SM2=0、REN=1、TB8/RB8做多机通信控制位。,发送(TI=0)发送前要求把第9位数据位预先装入SCON的TB8,由用户安排,可以是奇偶校验位或其他控制位。SETBTB8CLRTB8MOVSBUF,ATI由硬件在发送停止位时置位,由软件将它复位。,接收(RI=0和REN=1)方式1RB8存停止位方式2、3RB8存放第9数据位,接收有效字符的条件:,RI=0SM2=0或RB8=1,同时满足两条件,执行MOVA,SBUF;使RI=1,否则接收无效,RI=0。,RI=0,SBUF空,SM2或RB8共同控制接收RB8奇偶校验,SM2=0SM2=1,RB8=1,多机通信,例4请用查询法编出串行口在方式2下的发送程序。设单片机主频为6MHz,波特率为fosc/32,发送数据区始址为TBLOCK(内部RAM),接收数据块长度为LEN。要求采用累加和校验,以空出第9位它用。,累加和是指累加所有需要发送或接收的数据(字符)字节后得到的低字节和(大于255部分舍去)。累加和校验要求发送端在发送完数据后把累加和也发送出去,接收端除要计算接收数据的累加和外,还必须接收发送端发来是累加和,并把它同求得的累加和比较。若比较相同,则数据传送正确;否则,数据传送有错。,主程序ORG1000HTBLOCKDATA20HLENDATA1EHSTART:MOVSCON,#80H;方式2MOVPCON,#80H;令SMOD=1MOVR0,#TBLOCK;字符块始址送R0MOVR2,#LEN;字符块长度字节送R2MOVR3,#LEN;存入累加和寄存器R3ACALLTXSUB;调用发送子程序SJMP$;停机,发送子程序,ORG1100HTXSUB:PUSHACC;保护A中的内容PUSHPSWCLRTI;清TITXLEN:MOVA,R2;发送字符块长度MOVSBUF,AJNBTI,$;等待发完CLRTI;发完后清TITXD:MOVA,R0;发送字符送AMOVSBUF,A;启动发送JNBTI,$;等待发完,TXSUM:MOVA,R3;若已发完则发累加和MOVSBUF,AJNBTI,$;等待发完CLRTI;发完后清TIMOVR3,#00H;清累加和寄存器POPPSW;恢复现场POPACCRETEND,CLRTI;发完后清TIADDA,R3;求累加和MOVR3,A;存入R3INCR0;字符块指针加1DJNZR2,TXD;若字符未全发完,则继续,例5请用查询法编出串行口在方式3下的接收程序。设单片机主频为6MHz,波特率为2400bps,接收数据区始址为RBLOCK(内部RAM),接收数据块长度字节由始发端发送来。要求采用累加和校验,若传输有错,转出错处理程序。,本程序有主程序、接收子程序和出错处理程序组成,主程序:ORG1000HRBLOCKDATA30HSTART:MOVTMOD,#20H;T1工作于方式2MOVTH1,#OF4H;设置时间常数初值MOVTL1,#0F4HSETBTR1;启动T1MOVSCON,#0D0H;串行口工作于方式3接收MOVPCON,#80H;使SMOD=1MOVR0,#RBLOCK;接收数据区始址送R0MOVR3,#00H;累加和寄存器清零ACALLRXSUB;转接收子程序SJMP$;停机,接收子程序:RXSUB:CLRRI;清RIRXLEN:JNBRI,$;等待接收数据块长
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论