1、二方式 1: 8 位数据异步通讯方式1. 设定为 10 位异步通信方式:1 个起始位(“0” ),8 位数据位,1 个停止位(“1 ”)。 2. RXD:接收数据端。TXD:发送数据端。 【注意和方式 0 不一样,恢复正常】3.波特率:用 T1 作为波特率发生器213SMODBT溢 出 率4.发送:在 TI0 时,当把 数据写入 SBUF 后,即可启动发送 ,串行口内自动把发送缓冲器中的数据送入发送移位寄存器。发送移位寄存器先发一位起始位,接着按先低位后高位,再发停止位,从而完成一帧的发送。串行数据均由 TXT 端输出, TI 在发送停止位时,由硬件置 TI=1。接收:在 RI0 和 REN1
2、 的条件下。在接收到第 9 数据位(即停止位)时,接收电路必须满足以下两个条件:RI0 且 SM20;接收到的停止位为“1”时,才能把接收到的 8 位字符存入“SBUF(接收) ”中,把停止位送入 RB8 中,使 RI 1 并发出串行口中断请求(若中断开放) 。若上述条件不满足,则这次收到的数据就被舍去,不装入“SBUF(接收) ”中,这是不能允许的,因为这意味着丢失了一组接收数据。在方式 1 下,发送时钟、接收时钟和通信波特率都由定时器溢出率脉冲经过 32 分频得到,并可由 SMOD1 倍频。因此,方式 1 的波特率是可变的。其实,SM2 是用于方式 2 和方式 3 的。在方式 1 下,SM
3、2 应设为“0” 。方式 1 时序图:三方式 2 和方式 3方式 2 和方式 3 都是 11 为异步收发。两者的差异仅在于通信波特率有所不同:方式 2 的波特率由 fosc 经过 32 或 64 分频后提供;方式 3 的波特率由定时器 T1(或 T2)的溢出率经 32 分频后提供。方式 2 和方式 3 的发送过程类似于方式 1,所不同的是方式 2 和方式 3 有9 位有效数据位。发送时,CPU 除要把发送字符装入“SBUF(发送) ”外,还要把第 9 位数据位预先装入 SCON 的 TB8 中。第 9 数据位可由用户安排,可以是奇偶校验位,也可以是其它控制位。第 9 数据位的值装入 TB8 后
4、,便可用一条以 SBUF 为目的的传送指令把发送数据装入 SBUF 来启动发送过程。一帧数据发送完后,TI1,CPU 便可通过查询 TI 来以同样方法发送下一个字符帧。方式 2 和方式 3 的接收过程也和方式 1 类似。所不同的是:方式 1 时 RB8中存放的是停止位,方式 2 和方式 3 时 RB8 中存放的是第 9 数据位。因此,方式 2 和方式 3 时必须满足接收有效字符的条件变为:RI0 且 SM20 或收到的第 9 数据位为“1” ,只有上述两个条件同时满足,接收到的字符才能送入SBUF,第 9 数据位才能装入 RB8 中,并使 RI1;否则,这次收到的数据无效,RI 也不置位。其实
5、,上述第一个条件(RI0)是要求 SBUF 空,即用户应预先读走SBUF 中的信息,以便让接收电路确认它已空。第二个条件(SM20)是提供了利用 SM2 和第 9 数据位共同对接收加以控制:如果第 9 数据位是奇偶校验位,则可令 SM20,以保证串口能可靠接收;如果要求利用第 9 数据位参与接收控制,则可令 SM21,然后依靠第 9 数据位的状态来决定接收是否有效。方式 2、3 时序图:7.3.4 串行口的编程及应用一串行口的初始化编程1串行口控制寄存器 SCON 位的确定根据工作方式确定 SM0、SM1 位;对于方式 2 和方式 3 还要确定 SM2 位;如果是接收端,则置允许接收位 REN
6、 为 1;如果方式 2 和方式 3 发送数据,则应将发送数据的第 9 位写入 TB8 中。2设置波特率串行通信,收、发双方发送或接收的波特率必须一致。方式 0 和方式 2 的波特率是固定的;方式 1 和方式 3 的波特率是可变的,由 T1 溢出率确定。定时器的不同工作方式,得到的波特率的范围不一样,这是由 T1 在不同工作方式下计数位数的不同所决定。(1)方式 0 时,波特率固定为晶体振荡频率 fosc 的 1/12(fosc /12 ) ,不受SMOD 位值的影响。若 fosc = 12 MHz,波特率为 1Mbit/s。(2)方式 2 时,波特率仅与 SMOD 位的值有关。方式 2 波特率
7、 = 64SMODSCf如果 SMOD 0,则所选波特率为 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)SMODT12波 特 率 定 时 器 的 溢 出 率由式(7-1 )见,T1 溢出率和 SMOD 的值共同决定方式 1 或方式 3 的波特率。【注:定时器 T1 的溢出率定义为定时时间的倒数定时时间可参见 CAP5T1 的定时时间计数值机器周期N2
8、12初 值晶 体 振 荡 频 率T1 的溢出率1/定时时间 t= N(2晶 体 振 荡 频 率初 值 )所以: 波特率 = (2 SMOD/32)fosc/12 (2n-初值 )SMODN1()2SCf波 特 率 3初 值NOSf初 值 2 波 特 率其中:N 为定时器 T1 的位数,它和定时器 T1 的设定方式有关。即如果定时器 T1 为方式 0,则 N13;如果定时器 T1 为方式 1,则 N16;如果定时器 T1 为方式 2,则 N8。在实际设定波特率时,T1 常设置为方式 2 定时(自动装初值) ,即 TL1作为 8 位计数器,TH1 存放定时初值。这种方式操作方便,也避免因软件重装初
9、值带来的定时误差。实际使用时,经常根据已知波特率和时钟频率 fosc 来计算 T1 的初值 X。为避免繁杂的初值计算,常用的波特率和初值 X 间的关系常列成下表的形式,以供查用。下表列出了常用波特率与定时器 T1 的初值关系表定时器 T1波特率 fosc(MHz) SMOD /CT所选方式 相应初值9.6K 12 0 0 2 FD4.8K 12 0 0 2 FB2.4K 12 0 0 2 F31.2K 12 0 0 2 E6模式 1、30.6K 12 0 0 2 CCB9600 ,初值252.74=253=FDB4800 ,初值249.48=250=FBB=2400,初值 242.97243=
10、128+64+32+16+2+1=F3B=1200,初值 229.95=23012864324211100110E6B600 ,初值203.92=20412864+8+4=CC4 种方式比较:方式 波特率 传送位数 发送端 接收端 用途0 1/12 Fosc(固定不变) 8(数据) RXD RXD 接移位寄存器,扩充并口1 2SMOD/32T1 溢出率10(起始位、8 位数据位、停止位)TXD RXD 单机通信2 2SMOD/64T1fosc 11(第 9 位为 1:地址;为 0:数据) TXD RXD 多机通信3 2SMOD/32T1 溢出率 11 位(同方式 2) TXD RXD 多机通信
11、二串行口的应用通常用于三种情况:利用方式 0 扩展并行 I/O 口;利用方式 1 实现点对点的双机通信;利用方式 2 或方式 3 实现多机通信。1利用方式 0 扩展并行 I/O 口MCS-51 单片机的串行口在方式 0 时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口,当外接一个并入串出的移位寄存器时,就可以扩展并行输入口。AT89S51 的串口的方式 0 是同步串行通信接口。方式 0 的典型应用是外扩串行输入并行输出的同步移位寄存器 74LS164,实现并行 I/O 的扩展。【例 14-5】图 14-2 是利用串行口方式 0 通过 74LS164 外接 8 个 LED 发光二极管的接
12、口电路,编写程序使发光二极管轮流显示。图中 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) 的 LOW(低)电平q = 小写字母代表先于低-至-高时钟跃变一个建立时间的参考输入 (referenced input) 的状态
13、= 低-至-高时钟跃变当 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*/ES=1;EA=1; /* 全局中断允许 */nIndex=1;SBUF=nIndex;P10=0; /
14、MR 为复位端while(1);void Serial_Port() interrupt 4 using 0if(TI= =1)TI 0; / 清除串行发送中断请求P10=1; / Delay( 500);nIndexsbit 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 0if(TI=1)TI=0;P10=
15、1;delay(1000);nIndexsbit 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”,只发送一次,没有用中断while(1);#include sbit P10=P10;unsigned char zixing10=0xc0,0xf9,0xa
16、4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void delay(unsigned int count);void main(void)SCON=0x00;ES=1;EA=1;SBUF=zixing0;P10=0;while(1);void serial_port() interrupt 4 using 0if(TI= =1) TI=0;P10=1;delay(1000);SBUF=zixingnIndex;void delay(unsigned int count)unsigned char j;unsigned int i;for(i=0;icount;i+)
17、for(j=0;j120;j+);(2)方式 0 接收应用举例图 7-8 为串行口外接两片 8 位并行输入串行输出的寄存器 74LS165 扩展两个 8 位并行输入口的电路。当 74LS165 的 端由高到低负跳变 时,并行输入端的数据被置入寄存器;/SL当 = 1,且时钟禁止端(第 15 脚)为低电平时,允许 TXD(P3.1 )串行移/SL位脉冲输入,这时在移位脉冲作用下,数据由右向左方向移动,以串行方式进入串行口的接收缓冲器中。图 7-8 扩展 74LS165 作为并行输入口在图 7-8 中:TXD( P3.1)作为移位脉冲输出与所有 75LS165 的移位脉冲输入端 CLK 相连;RXD(P3.0)作为串行数据输入端与 74LS165 的串行输出端 SO 相连;P1.0 与 相连,用来控制 74LS165 的串行移位或并行输入;/SHLD74LS165 的时钟禁止端(第 15 脚)接地,表示允许时钟输入。当扩展多个 8 位输入口时,相邻两芯片的首尾(QH 与 SIN)相连。在方式 0,SCON 中的 TB8、RB8 位没有用到,发送或接收完 8 位数据由硬件使 TI 或 RI 中断标志位置 “1”,CPU 响应 TI 或 RI 中断,在中断服务程序中向发送 SBUF 中送入下一个要发送的数据或从接收 SBUF 中把接收到的 1B
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。