《单片机串行口课件》由会员分享,可在线阅读,更多相关《单片机串行口课件(70页珍藏版)》请在金锄头文库上搜索。
1、第六章 MCS-51的串行口6.16.1 串行通信基础知识串行通信基础知识 6.2 6.2 串行口的结构串行口的结构6.3 6.3 串行口的串行口的 4 4 种工作方式种工作方式6.4 6.4 多机通讯多机通讯6.56.5 串行口的编程和应用串行口的编程和应用异步通信方式01停 止 位起 始 位低位高位7位数据位奇偶 校验停 止 位第N个字符第N-1个字符同步通信方式(Synchronous Data Communication)串行通信的波特率波特率(band rate)是异步通信中每秒钟传送的二进制数码的位数(比特数),单位是位/秒。作用:1、反映串行通信的速率;2、反映对传输通道的要求:
2、波特率越高,要求的传输通道的频带宽度就越宽。异步通信:波特率为每秒传送的字符数和每个字符位数的乘积。6.2 MCS-51串行口的结构MCS-51有一个可编程的全双工串行通信接口,可作为通用异步收发器(UART),也可作为同步移位寄存器。它的帧格式有8位、10位和11位,可以设置为固定波特率和可变波特率,给使用者带来很大的灵活性。串行口内部结构示意简图串行口控制寄存器SCON(1)SCON(98H)(2)PCON(87H)电源控制寄存器PCON中只有SMOD位与串行口工作有关,如下图所示。电源控制寄存器PCON6.3 串行口的 4 种工作方式 方式的选择由SM0 、 SM1实现。 四种方式的比较
3、:工作方式功能说说明波特率方式08位同步移位寄 存器常用于扩扩展I/O 口fosc/12方式110位UART起始位0、 8位 数据、结结束位1可变变(取决于定 时时器1溢出率)方式211位UART起始位0、 8位 数据、奇偶校 验验位和结结束位1fosc/64或 fosc/32方式311位UART同上可变变(取决于定 时时器1溢出率)1.串行口方式0 同步移位寄存器方式方式0以8位数据为一帧,不设起始位和停止位 ,先发送或接收最低位。其帧格式如下: 串行数据通过RXD输入或输出,而TXD用于输 出移位时钟,作为外接部件的同步信号。 这种方式不适用于两个8051之间的串行通信,但 可以通过外接移
4、位寄存器来实现单片机的I/O接 口扩展。串行口方式0的应用(P150,P169) 串行口扩展显示器 【例1】用8位串入并出移位寄存器74HC164扩 展显示器。 功能:把数据从显示缓冲区送到数码管。 入口;要显示的数放在以DIS0为首的8个单元中。 出口:把预置的数输出以更新原有的显示。编写程序实现:MOVR7,08H;显示8个数码管MOVR0,DIS0;显示缓冲区未地址送入R0 DL0:MOVA,R0;取要显示数作查表偏移量MOVDPTR,TAB ;指向字形表首MOVC A,ADPTR;查表得字形码MOVSBUF,A;发送显示 DL1:JNBT1,DL1;等待发送完一帧CLRTI;清中断标志
5、,准备继续发送DECR0;更新显示单元DJNZ R7,DL0;重复显示所有数码管RET TAB:DB 0C0H,0F9H,0A4H,0B0H,99H;0,1,2, 3,4, DB 92H,82H,0F8H,80H,90H;5,6,7,8,9, DB 88H,83H,0C6H,0A1H,86H;A,B,C,D,E,DB 8EH,0BFH,8CH,0FFH;F,P,暗 74LS165 其中A ,B,C,D,E,F,G,H 并行输入端。 QH串行输出端。 CLOCK:时钟输入端。 CLOCK INHIBIT:时钟禁止端。当时钟禁止端CLK2为低电平时,允 许时钟输入。 SHIFT/LOAD:移位与置
6、位控制端。 SER:扩展多个74LS165的首尾连接端。74LS165是一个并行输入串行输出的移位寄存器。RI图(b) 方式 0 接收电路及时序串行口方式0的应用(P150,P169) 串行口扩展的键盘ORG0100H START:CLR P1.0 ;载入数据 NOP; NOP; SETB P1.0;数据输出 CLR P1.1;允许时钟输 入 RCVI: MOVSCON,10H JNBRI,$ CLRRI MOVA,SBUF ;判断键值,散转 OPR0:LJMPSTARTTAB: AJMP OPR0AJMPOPR1 AJMPOPR72.串行口方式1 10位UART方式1以10位为一帧传输,设有
7、1个起始位(0),8个数据位和1个停止位(1)。其帧格式为: 方式1真正用于串行发送或接收,为10位通用异步接口。 TXD(P3.1)引脚发送数据,RXD(P3.0)引脚接收数据。 数据传输波特率由T1的溢出率决定,可用程序设定。 在接收时,停止位进入SCON的RB8。 串行口方式1的发送和接收时序如图(a)和(b)所示。方式 1 发送和接收时序n只有当REN=1时,才能对RXD进行检测。RI=0。即上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中数据已被取走。由软件使RI=0,以便提供“接收SBUF已空”的信息。SM2=0或收到的停止位为1(方式1时,停止位进入RB8)。满足
8、上述两个条件,将接收到的数据装入串行口的SBUF和RB8(RB8装入停止位),并置位RI,通知CPU取数据;如果不满足,接收到的数据不能装入SBUF,这意味着该帧信息将会丢失。接收有效的两个条件:两个单片机之间的通信通信协议:数据格式、校验方 式波特率硬件连接2. 串行口方式1的应用例:通过MCS-51串行口发送带存放在片内RAM 20H3FH中的数据,要求传送的波特率为1200bps。编写有关的通信程序。 fosc=11.0592MHz。分析:取SMOD0 (TH1)2320E8H 设串行口为方式1,定时器/计数器T1为方式2作为串行口的波特率发生器。可以避免计数溢出后用软件重装定时初值的工
9、作。ORG 0100H MOV TMOD,#20H;设T1为方式2 MOV TL1,#0E8H;T1定时常数 MOV TH1,#0E8H SETB TR1;启动T1 MOV SCON,#01000000B;设串行口为方式1 MOV R0,#20H;设发送数据区首址 MOV R7,#32;发送32个ASCII码数据 LOOP:MOV A,R0;取ASCII码数据 ACALL SP_OUT;调用串行口发送子程序 INC R0;未发送完,则继续 DJNZ R7,LOOP 主程序:SP_OUT:MOV SBUF,A ;带校验位发送JNB TI,$ ;发送等待CLR TI ;清TI标志 RET串行口发送
10、子程序:例:B机由串行口接收数据块。解:采用查询方式,本例与上例相呼应,接收器把接收到的32个数据存放在20H3FH单元内,波特率同上。MOV SCON,#01010000B ;设串口方式1,允许接收MOV TMOD,#20H ;设置定时器T1为方式2MOV TL1,#0E8H ;初值,波特率为1200b/sMOV TH1,#0E8H SETB TR1 ;启动T1运行MOV R0,#20H ;数据存放首地址MOV R7,#32 ;数据块长度LOOP: ACALL SP_IN ;调用接收一帧子程序MOV R0,A ;存放接收的数据INC R0DJNZ R7,LOOP 主程序:SP_IN: JNB
11、 RI,$ ;RI由硬件置位CLR RI ;软件清除RIMOV A,SBUF RET接收一帧子程序:3.串行口方式2和3 11位UART方式2和方式3以11位为1帧传输,设有1个起始位(0),8个数据位,1个附加第9位和1个停止位(1)。其帧格式为:附加第9位(D8)由软件置1或清0。发送时在TB8中,接收时送RB8中。方式2的波特率是固定的,为振荡器频率的1/32或1/64。方式3的波特率则由T1的溢出率决定,可用程序设定。 方式2和方式3的发送、接收时序如图所示。其操作与方式1类似。方式2、方式3发送和接收时序n只有当REN=1时,才能对RXD进行检测。 发送前,先根据通信协议由软件设置T
12、B8(如作奇偶校验位或地址/数据标志位), 然后将要发送的数据写入SBUF,即可启动发送过程。 串行口能自动把TB8取出,并装入到第9位数据位的位置,再逐一发送出去。发送完毕,使TI=1。发送过程 接收时,使SCON中的REN=1,允许接收。 当检测到RXD(P3.0)端有10的跳变(起始位)时,开始接收9位数据,送入移位寄存器(9位)。 当满足RI=0且SM2=0,或接收到的第9位数据为1时,前8位数据送入SBUF,附加的第9位数据送入SCON中的RB8,置RI为1;否则,这次接收无效,也不置位RI。接收过程例:编制一个发送程序,将片内RAM中50H5FH的数据串行发送。串行口设定为工作方式
13、2,TB8作奇偶校验位。发送波特率375 kb/s,晶振为12 MHz, SMOD=1。解:在数据写入发送SBUF之前,先将数据的奇偶标志P写入TB8,此时,第9位数据便可作奇偶校验用。可采用查询和中断两种方式发送。ORG 0000HAJMP MAIN ;上电,转向主程序ORG 0100H ;主程序 MAIN: MOV SCON,#80H ;设工作方式2MOV PCON,#80H ;取波特率为fosc/32MOV R0,#50H ;首址50H送R0MOV R7,#10H ;数值长度送R7 LOOP: MOV A,R0 ;取数据MOV C,P ;PCMOV TB8,C ;奇偶标志送TB8MOV
14、SBUF,A ;发送数据 WAIT: JBC TI,CONTAJMP WAIT ;等待中断标志TI=1 CONT: INC R0DJNZ R7,LOOP ;数值尚未发送完, 继续发送下一个数据SJMP $END例:编制一个接收程序,将接收的16B数据送入片内RAM的50H5FH单元中。设串行口工作在方式2,波特率为375bps。解:源程序如下: MAIN: MOV SCON ,#080H ;串行口工作于方2;REN=1,可接收MOV PCON ,#80H ;设SMOD=1MOV R0,#50H ;首址50H送R0MOV R7,#10H ;数值长度送R7SETB REN SETB REN ;启动接收;启动接收 WAIT: JBC RI ,PR1 ;接收完一帧数据,清RI, 转 PR1SJMP WAIT ;否则等待 PR1: MOV A ,SBUF ;读入数据JNB