第5章单片机串口的设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

5.1通信相关的概念1.什么叫通信通信就是使用特定的设备通过一定的媒介将消息从一个地方传送到另一地方。并使接收者能够读懂发来的消息。发送设备信道发送设备(1)串行通信:数据一位一位顺序发送或接收。特点是传送速度慢,但成本低。适用于较长距离传送数据。计算机与外界的数据传送一般均采用串行方式。2.通信方式(2)并行通信:数据的各位同时发送或接收。特点是传送速度快、效率高,但成本高。适用于短距离传送数据。计算机内部的数据传送一般均采用并行方式。3.数据通信的制式(1)单工方式:数据仅按一个固定方向传送;比如BB机。广播电台。(2)半双工方式:数据可实现双向传送,但不能同时进行;如对讲机(3)全双工方式:允许双方同时进行数据双向传送;电话和手机。(4)多工方式:在同一线路上实现资源共享。(1)同步方式:以数据块为单位进行数据传送,包括同步字符、数据块和校验字符CRC。优点是数据传输速率较高,缺点是要求发送时钟和接收时钟保持严格同步。数据格式如下图所示。4.串行通信的分类(2)异步方式:以字符为单位进行数据传送,每一个字符均按固定的字符格式传送,又被称为帧。优点是不需要传送同步脉冲,可靠性高,所需设备简单;缺点是字符帧中因包含有起始位和停止位而降低了有效数据的传输速率。数据格式如下图所示:5.串行数据通信的波特率波特率是指每秒钟传送信号(码元)的数量,单位为波特(Baud)。而每秒钟传送二进制数的信号数(即二进制数的位数)定义为比特率,单位是bps(bitpersecond)或写成b/s(位/秒)。在单片机串行通信中,传送的信号是二进制信号,波特率与比特率数值上相等。单位采用bps。例如,异步串行通信的数据传送的速率是120字符/秒,而每个字符规定包含10位数字,则传输波特率为:120字符/秒×10位/字符=1200位/秒=1200bps5.2MCS-51的串行口学习目标:1、2、3、4、5、1.串行口寄存器结构(1)两个物理上独立的同名的接收/发送缓冲寄存器SBUF,指令MOVSBUF,A启动一次数据发送,指令MOVA,SBUF完成一次数据接收,即向发送缓冲器SBUF写入数据即可发送数据,从接收缓冲器SBUF读出数据即可接收数据。(2)输入和输出移位寄存器和控制器等组成。(3)2个SFR寄存器SCON和PCON,用于串行口的初始化编程。(4)接收/发送数据,无论是否采用中断方式工作,每接收/发送一个数据都必须用指令对RI/TI清0,以备下一次收/发。SBUF(发)SBUF(收)发送控制器TI接收控制器RI移位寄存器波特率发生器T11A累加器(门)移位寄存器RxD(P3.1)TxD(P3.1)去申请中断引脚引脚CPU内部MCS-51串行口的结构如下图所示:2.串行通信控制寄存器SCONSM0SM1SM2RENTB8RB8TIR1SM0SM1:串行口工作方式控制位。=00:方式0,8位同步移位寄存器,Baud为fosc/12;=01:方式1,10位UART,其Baud为可变,由定时器控制;=10:方式2,11位UART,其Baud为fosc/64或fosc/32;=11:方式3,11位UART,其Baud为可变,由定时器控制。其中:fosc为系统晶振频率。SM2:串行口多机通信控制位,作为方式2、方式3的附加控制位。RB8:在方式2、3中,用于存放收到的第9位数据;在双机通信中,作为奇偶校验;在多机通信中,用作区别地址帧/数据帧的标志。TB8:方式2、3中,是要发送的第9位数据;在双机通信中,用于对接收到的数据进行奇偶校验;在多机通信中,用作判断地址帧/数据帧,TB8=0表示发送的是数据,TB8=1表示发送的是地址。REN:串行口接收允许控制位=1:表示允许接收;=0:禁止接收。RI,TI:串行口收/发数据申请中断标志位=1申请中断;=0不申请中断。3.中断允许寄存器IE(0A8H)中断允许寄存器IE在3.2.2节中已介绍。其中对串行口有影响的位ES。ES为串行中断允许控制位。ES=1:允许串行中断;ES=0:禁止串行中断。4.电源管理寄存器PCON(87H)不可位寻址。PCON主要用于实现电源控制而设置的专用寄存器,已在1.3.3节中介绍过。其格式如下图所示。SMOD:串行口波特率倍增位=1:串行口波特率加倍。=0:串行口波特率不变,系统复位时默认为SMOD=0。SMODGF1GF0PD1DL5.串行口的工作方式(1)工作方式0(8位移位寄存器I/O方式)发送/接收过程:SBUF中的串行数据由RxD逐位移出/移入(低位在先,高位在后);TxD输出移位时钟,频率=fosc1/12;每送出/接收8位数据TI/RI自动置1;需要用软件清零TI/RI。注意:串行口在方式0下的工作并非是一种同步通信方式,经常配合“串入并出”“并入串出”移位寄存器一起使用,以达到扩展一个并行口的目的。扩展电路如下图所示。如要发送数据,查询方式的程序如下:MOVSCON,#00H;串行口方式0MOVSBUF,A;将数据送出JNBTI,$;等待数据发送完毕CLRTI;为下次发送作准备注意:复位时,SCON已经被清零,缺省值为方式0。发送条件:TI=0。接收条件:TI=0,置位REN=1(允许接收数据)。(2)方式1(波特率可变的10位异步通信方式)发送/接收数据的格式:一帧信息包括1个起始位0,8个数据位和1个停止位1。发送/接收过程:SBUF中的串行数据由RXD逐位移出/移入;TXD输出移位时钟,频率=(2SMOD/32)T1的溢出率,波特率可变。每送出/接收8位数据TI/RI自动置1;需要用软件清零TI/RI。工作时,发送端自动添加一个起始位和一个停止位;接收端自动去掉一个起始位和一个停止位。发送/接收条件:同方式0。(3)方式2(固定波特率的11位异步接收/发送方式)发送/接收过程:方式2的接收/发送过程类似于方式1,所不同的是它比方式1增加了一位“第9位”数据(TB8/RB8),用于“奇偶校验”。方式2常用于单片机间通信。波特率=fosc2SMOD/64。发送/接收条件:同方式0。方式3和方式2唯一的区别是波特率机制不同,方式3的波特率=(2SMOD/32)T1的溢出率。(4)方式3(可变波特率的11位异步接收/发送方式)(5)串行通信的校验码①奇偶校验:奇偶校验是检验串行通信双方传输的数据正确与否的一个措施,并不能保证通信数据的传输一定正确。即如果奇偶校验发生错误,表明数据传输一定出错了;如果奇偶校验没有出错,绝不等于数据传输完全正确。②奇校验规定:8位有效数据连同1位附加位中,二进制“1”的个数为奇数。③偶校验规定:8位有效数据连同1位附加位中,二进制“1”的个数为偶数。④约定发送采用奇校验:若发送的8位有效数据中“1”的个数为偶数,则要人为在附加位中添加一个“1”一起发送;若发送的8位有效数据中“1”的个数为奇数,则要人为在附加位中添加一个“0”一起发送。⑤约定接收采用奇校验:若接收到的9位数据中“1”的个数为奇数,则表明接收正确,取出8位有效数据即可;若接收到的9位数据中“1”的个数为偶数,则表明接收出错!应当进行出错处理。采用偶校验时,处理方法与奇校验类似。6.串行口的通信波特率串行口的通信波特率恰到好处地反映了串行传输数据的速率。在MCS-51串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率(T1溢出信号的频率)控制。各种方式的通信波特率如下:方式0:波特率固定为fosc/12。其中:fosc——系统主机晶振频率方式2:波特率由PCON中的选择位SMOD来决定,可由下式表示:波特率=(2SMOD/64)×fosc方式1和方式3:波特率是可变的,由定时器T1的溢出率控制。波特率为:波特率=(2SMOD/32)×定时器T1溢出率T1溢出率=T1计数率/产生溢出所需的周期=(fosc/12)/(2KTC)其中:K——定时器T1的位数,定时器T1用作波特率发生器时,通常工作在方式2,所以T1的溢出所需的周期数=28TC。TC——定时器T1的预置初值。下表列出了定时器T1工作于方式2的常用波特率及初值。7.串行口的应用(1)串口方式0应用编程[例]用8051串行口外接CD4094扩展8位并行输出口,8位并行口的各位都接一个发光二极管,要求发光二极管呈流水灯状态(轮流点亮)。解:硬件连接电路如下图所示。在开始通信之前,应先对控制寄存器SCON进行初始化。将00H送SCON即设置方式0。数据传送采用查询方式,通过查询TI的状态,来决定是否发送下一帧数据。在串行接收时,通过对RI查询来确定何时接收下一帧数据。程序如下:ORG1000HSTART:MOVSCON,#00H;置串行口工作方式0MOVA,#80H;最高位灯先亮CLRP1.0;关闭并行输出OUT0:MOVSBUF,A;开始串行输出OUT1:JNBTI,OUT1;输出完否?未完,等待CLRTI;完了,清TI标志,以备下次发送SETBP1.0;打开并行口输出ACALLDELAY;延时一段时间RRA;循环右移CLRP1.0;关闭并行输出SJMPOUT0;循环DELAY:MOVR7,#250;延时子程序D1:MOVR6,#250D2:DJNZR6,D2DJNZR7,D1RETEND(2)双机通信双机通信的硬件连接图如下图所示。通信协议如下:①设1号机是发送方,2号机是接收方。采用串行口方式1进行通信,一帧信息为10位,其中有1个起始位、8个数据位和1个停止位;波特率为2400bps,T1工作在定时器方式2,单片机时钟振荡频率选用11.0592MHz,查表3.4.3可得TH1=TL1=0F4H,PCON寄存器的SMOD位为0。②当1号机发送时,先发送一个“E1”联络信号,2号机收到后回答一个“E2”应答信号,表示同意接收。当1号机收到应答信号“E2”后,开始发送数据,每发送一个字节数据都要计算“校验和”,假定数据块长度为16个字节,起始地址为40H,一个数据块发送完毕后立即发送“校验和”。③2号机接收数据并转存到数据缓冲区,起始地址也为40H,每接收到一个字节数据便计算一次“校验和”,当收到一个数据块后,再接收1号机发来的“校验和”,并将它与2号机求出的校验和进行比较。若两者相等,说明接收正确,2号机回答00H;若两者不相等,说明接收不正确,2号机回答0FFH,请求重发。1号机接到00H后结束发送。若收到的答复非零,则重新发送数据一次。程序框图如下页图所示。发送程序如下:ORG1000HASTART:CLREAMOVTMOD,#20H;定时器1置为方式2MOVTH1,#0F4H;装载定时器初值,波特率2400MOVTL1,#0F4HMOVPCON,#00HSETBTR1;启动定时器MOVSCON,#50H;设定串口方式1,且准备接收应答信号ALOOP1:MOVSBUF,#0E1H;发联络信号JNBTI,$;等待一帧发送完毕CLRTI;允许再发送JNBRI,$;等待2号机的应答信号CLRRI;允许再接收MOVA,SBUF;2号机应答后,读至AXRLA,#0E2H;判断2号机是否准备完毕JNZALOOP1;2号机未准备好,继续联络ALOOP2:MOVR0,#40H;2号机准备好,设定数据块地址指针初值MOVR7,#10H;设定数据块长度初值MOVR6,#00H;清校验和单元ALOOP3:MOVSBUF,@R0;发送一个数据字节MOVA,R6ADDA,@R0;求校验和MOVR6,A;保存校验和INCR0JNBTI,$CLRTIDJNZR7,ALOOP3;整个数据块是否发送完毕MOVSBUF,R6;发送校验和JNBTI,$CLRTIJNBRI,$;等待2号机的应答信号CLRRIMOVA,SBUF;2号机应答,读至AJNZALOOP2;2号机应答“错误”,转重新发送RET;2号机应答“正确”,返回END接收程序如下:ORG1000HBSTART:CLREAMOVTMOD,#20HMOVTH1,#0F4HMOVTL1,#0F4HMOVPCON,

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功