第7单 串行通信2.doc

上传人:hs****ma 文档编号:564248187 上传时间:2023-06-23 格式:DOC 页数:17 大小:473.01KB
返回 下载 相关 举报
第7单 串行通信2.doc_第1页
第1页 / 共17页
第7单 串行通信2.doc_第2页
第2页 / 共17页
第7单 串行通信2.doc_第3页
第3页 / 共17页
第7单 串行通信2.doc_第4页
第4页 / 共17页
第7单 串行通信2.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《第7单 串行通信2.doc》由会员分享,可在线阅读,更多相关《第7单 串行通信2.doc(17页珍藏版)》请在金锄头文库上搜索。

1、二方式1: 8位数据异步通讯方式1. 设定为10位异步通信方式:1个起始位(“0”),8位数据位,1个停止位(“1”)。 2. RXD:接收数据端。 TXD:发送数据端。【注意和方式0不一样,恢复正常】3.波特率:用T1作为波特率发生器 4.发送:在TI0时,当把数据写入SBUF后,即可启动发送,串行口内自动把发送缓冲器中的数据送入发送移位寄存器。发送移位寄存器先发一位起始位,接着按先低位后高位,再发停止位,从而完成一帧的发送。串行数据均由TXT端输出,TI在发送停止位时,由硬件置TI=1。接收:在RI0和REN1的条件下。在接收到第9数据位(即停止位)时,接收电路必须满足以下两个条件:RI0

2、且SM20;接收到的停止位为“1”时,才能把接收到的8位字符存入“SBUF(接收)”中,把停止位送入RB8中,使RI1并发出串行口中断请求(若中断开放)。若上述条件不满足,则这次收到的数据就被舍去,不装入“SBUF(接收)”中,这是不能允许的,因为这意味着丢失了一组接收数据。 在方式1下,发送时钟、接收时钟和通信波特率都由定时器溢出率脉冲经过32分频得到,并可由SMOD1倍频。因此,方式1的波特率是可变的。其实,SM2是用于方式2和方式3的。在方式1下,SM2应设为“0”。方式1时序图:三方式2和方式3方式2和方式3都是11为异步收发。两者的差异仅在于通信波特率有所不同:方式2的波特率由fos

3、c经过32或64分频后提供;方式3的波特率由定时器T1(或T2)的溢出率经32分频后提供。方式2和方式3的发送过程类似于方式1,所不同的是方式2和方式3有9位有效数据位。发送时,CPU除要把发送字符装入“SBUF(发送)”外,还要把第9位数据位预先装入SCON的TB8中。第9数据位可由用户安排,可以是奇偶校验位,也可以是其它控制位。第9数据位的值装入TB8后,便可用一条以SBUF为目的的传送指令把发送数据装入SBUF来启动发送过程。一帧数据发送完后,TI1,CPU便可通过查询TI来以同样方法发送下一个字符帧。方式2和方式3的接收过程也和方式1类似。所不同的是:方式1时RB8中存放的是停止位,方

4、式2和方式3时RB8中存放的是第9数据位。因此,方式2和方式3时必须满足接收有效字符的条件变为:RI0且SM20或收到的第9数据位为“1”,只有上述两个条件同时满足,接收到的字符才能送入SBUF,第9数据位才能装入RB8中,并使RI1;否则,这次收到的数据无效,RI也不置位。其实,上述第一个条件(RI0)是要求SBUF空,即用户应预先读走SBUF中的信息,以便让接收电路确认它已空。第二个条件(SM20)是提供了利用SM2和第9数据位共同对接收加以控制:如果第9数据位是奇偶校验位,则可令SM20,以保证串口能可靠接收;如果要求利用第9数据位参与接收控制,则可令SM21,然后依靠第9数据位的状态来

5、决定接收是否有效。方式2、3时序图:7.3.4 串行口的编程及应用一串行口的初始化编程1串行口控制寄存器SCON位的确定根据工作方式确定SM0、SM1位;对于方式2和方式3还要确定SM2位;如果是接收端,则置允许接收位REN为1;如果方式2和方式3发送数据,则应将发送数据的第9位写入TB8中。2设置波特率串行通信,收、发双方发送或接收的波特率必须一致。方式0和方式2的波特率是固定的;方式1和方式3的波特率是可变的,由T1溢出率确定。定时器的不同工作方式,得到的波特率的范围不一样,这是由T1在不同工作方式下计数位数的不同所决定。(1)方式0时,波特率固定为晶体振荡频率fosc的1/12(fosc

6、 /12),不受SMOD位值的影响。若fosc=12 MHz,波特率为1Mbit/s。(2)方式2时,波特率仅与SMOD位的值有关。方式2 波特率=如果SMOD0,则所选波特率为fosc /64;如果SMOD1,则所选波特率为fosc /32。若fosc=12 MHz: SMOD=0,波特率=187.5 kbit/s;SMOD=1,波特率为375 kbit/s。(3)方式1或方式3,常用T1作为波特率发生器,其关系式为: (7-1)由式(7-1)见,T1溢出率和SMOD的值共同决定方式1或方式3的波特率。【注:定时器T1的溢出率定义为定时时间的倒数 定时时间可参见CAP5 T1的定时时间计数值

7、机器周期T1的溢出率1/定时时间t= 所以: 波特率=(2SMOD/32)fosc/12 (2n-初值)其中:N为定时器T1的位数,它和定时器T1的设定方式有关。即如果定时器T1为方式0,则N13;如果定时器T1为方式1,则N16;如果定时器T1为方式2,则N8。在实际设定波特率时,T1常设置为方式2定时(自动装初值),即TL1作为8位计数器,TH1存放定时初值。这种方式操作方便,也避免因软件重装初值带来的定时误差。实际使用时,经常根据已知波特率和时钟频率fosc来计算T1的初值X。为避免繁杂的初值计算,常用的波特率和初值X间的关系常列成下表的形式,以供查用。 下表列出了常用波特率与定时器T1

8、的初值关系表波特率fosc(MHz)SMOD定时器T1所选方式相应初值模式1、39.6K12002FD4.8K12002FB2.4K12002F31.2K12002E60.6K12002CCB9600,初值252.74=253=FDB4800,初值249.48=250=FBB=2400,初值242.97243=128+64+32+16+2+1=F3B=1200,初值229.95=23012864324211100110E6B600,初值203.92=20412864+8+4=CC4种方式比较:方式波特率传送位数发送端接收端用途01/12 Fosc(固定不变)8(数据)RXDRXD接移位寄存器,

9、扩充并口12SMOD/32T1溢出率10(起始位、8位数据位、停止位)TXDRXD单机通信22SMOD/64T1fosc11(第9位为1:地址;为0:数据)TXDRXD多机通信32SMOD/32T1溢出率11位(同方式2)TXDRXD多机通信二串行口的应用通常用于三种情况:利用方式0扩展并行I/O口;利用方式1实现点对点的双机通信;利用方式2或方式3实现多机通信。1利用方式0扩展并行I/O口MCS-51单片机的串行口在方式0时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口,当外接一个并入串出的移位寄存器时,就可以扩展并行输入口。AT89S51的串口的方式0是同步串行通信接口。方式0的典

10、型应用是外扩串行输入并行输出的同步移位寄存器74LS164,实现并行I/O的扩展。【例14-5】图14-2是利用串行口方式0通过74LS164外接8个LED发光二极管的接口电路,编写程序使发光二极管轮流显示。图中CLK端为同步脉冲输入端。STB为控制端,当STB=0时,则8位并行输出端关闭,但是允许串行数据从A和B端输入。当STB=1时,A和B输入端关闭,但允许8位并行数据输出。H = HIGH(高)电平h = 先于低-至-高时钟跃变一个建立时间 (set-up time) 的 HIGH(高)电平L = LOW(低)电平l = 先于低-至-高时钟跃变一个建立时间 (set-up time) 的

11、 LOW(低)电平q = 小写字母代表先于低-至-高时钟跃变一个建立时间的参考输入 (referenced input) 的状态 = 低-至-高时钟跃变当8位串行数据发送完毕后,引起中断,在中服务程序中,串行发出下一个8位数据。参考程序如下。图14-2 串行口方式0外接8个LED发光二极管的接口电路【已调试,cap72、CAP72LED、CAP72LED2】#include #includesbit P10 = P10;unsigned char nIndex;void Delay(unsigned int count);main() SCON = 0x00; /* 串行口初始化为方式0*/E

12、S=1;EA=1; /* 全局中断允许 */ nIndex=1; SBUF=nIndex; P10=0; / MR为复位端 while(1);void Serial_Port() interrupt 4 using 0if(TI= =1)TI0; / 清除串行发送中断请求P10=1; / Delay( 500);nIndex=1;if(nIndex= =0) nIndex=1;SBUF=nIndex;void Delay(count ) unsigned char j; unsigned int i; for(i=0;icount;i+)for(j=0;j120;j+);#include sb

13、it P10=P10;unsigned char nIndex;void delay(unsigned int count);void main(void) SCON=0x00; ES=1; EA=1; nIndex=1; SBUF=nIndex; P10=0; while(1);void serial_port() interrupt 4 using 0 if(TI=1) TI=0; P10=1; delay(1000); nIndex=1; if(nIndex=0) nIndex=1; SBUF=nIndex;void delay(unsigned int count) unsigned char j; unsigned int i; for(i=0;icount;i+) for(j=0;j120;j+);#include sbit P10=P10;unsigned char nIndex;unsigned char zixing10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void delay(unsigned int count);void main(void) SCON=0x00; P10=0; P10=1; SBUF=0x92; / LED 上显示数字“5”,只发送

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号