您好,欢迎访问三七文档
第六章MCS-51的串行口6.1串行通信基础知识6.2串行口的结构6.3串行口的4种工作方式6.4多机通讯6.5串行口的编程和应用异步通信方式01停止位起始位低位高位7位数据位奇偶校验停止位第N个字符第N-1个字符同步通信方式(SynchronousDataCommunication)同步字符1同步字符2起始数据块(若干字节)校验符1校验符2结束串行通信的波特率波特率(bandrate)是异步通信中每秒钟传送的二进制数码的位数(比特数),单位是位/秒。作用:1、反映串行通信的速率;2、反映对传输通道的要求:波特率越高,要求的传输通道的频带宽度就越宽。异步通信:波特率为每秒传送的字符数和每个字符位数的乘积。6.2MCS-51串行口的结构MCS-51有一个可编程的全双工串行通信接口,可作为通用异步收发器(UART),也可作为同步移位寄存器。它的帧格式有8位、10位和11位,可以设置为固定波特率和可变波特率,给使用者带来很大的灵活性。发送SBUF(99H)门发送控制器接收控制器+输入移位寄存器串行控制寄存器(98H)SCON定时器T1接收SBUF(99H)888TIRI内部总线TXD(P3.1)RXD(P3.0)串行口中断串行口内部结构示意简图串行口控制寄存器SCON(1)SCON(98H)(2)PCON(87H)电源控制寄存器PCON中只有SMOD位与串行口工作有关,如下图所示。电源控制寄存器PCON6.3串行口的4种工作方式•方式的选择由SM0、SM1实现。•四种方式的比较:工作方式功能说明波特率方式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之间的串行通信,但可以通过外接移位寄存器来实现单片机的I/O接口扩展。串行口方式0的应用(P150,P169)•串行口扩展显示器•【例1】用8位串入并出移位寄存器74HC164扩展显示器。8051TXDRXD+5V74HC164Q7Q1Q0D74HC164Q7Q1Q0D74HC164Q7Q1Q0D(0)(0)(1)(1)(7)(7)功能:把数据从显示缓冲区送到数码管。入口;要显示的数放在以DIS0为首的8个单元中。出口:把预置的数输出以更新原有的显示。编写程序实现:MOVR7,#08H;显示8个数码管MOVR0,#DIS0;显示缓冲区未地址送入R0DL0:MOVA,@R0;取要显示数作查表偏移量MOVDPTR,#TAB;指向字形表首MOVCA,@A+DPTR;查表得字形码MOVSBUF,A;发送显示DL1:JNBT1,DL1;等待发送完一帧CLRTI;清中断标志,准备继续发送DECR0;更新显示单元DJNZR7,DL0;重复显示所有数码管RETTAB:DB0C0H,0F9H,0A4H,0B0H,99H;0,1,2,3,4,DB92H,82H,0F8H,80H,90H;5,6,7,8,9,DB88H,83H,0C6H,0A1H,86H;A,B,C,D,E,DB8EH,0BFH,8CH,0FFH;F,-,P,暗74LS165其中A,B,C,D,E,F,G,H并行输入端。QH串行输出端。CLOCK:时钟输入端。CLOCKINHIBIT:时钟禁止端。当时钟禁止端CLK2为低电平时,允许时钟输入。SHIFT/LOAD:移位与置位控制端。SER:扩展多个74LS165的首尾连接端。74LS165是一个并行输入串行输出的移位寄存器。RI图(b)方式0接收电路及时序串行口方式0的应用(P150,P169)•串行口扩展的键盘8051RXDTXD74HC1659vcc2D0D1D2D3D4D5D6D7vcc1•ORG0100H•START:CLRP1.0•;载入数据•NOP;•NOP;•SETBP1.0;数据输出•CLRP1.1;允许时钟输入•RCVI:MOVSCON,#10H•JNBRI,$•CLRRI•MOVA,SBUF•…;判断键值,散转•OPR0:…LJMPSTARTTAB:AJMPOPR0AJMPOPR1…AJMPOPR72.串行口方式1—10位UART方式1以10位为一帧传输,设有1个起始位(0),8个数据位和1个停止位(1)。其帧格式为:•方式1真正用于串行发送或接收,为10位通用异步接口。TXD(P3.1)引脚发送数据,RXD(P3.0)引脚接收数据。•数据传输波特率由T1的溢出率决定,可用程序设定。•在接收时,停止位进入SCON的RB8。•串行口方式1的发送和接收时序如图(a)和(b)所示。方式1发送和接收时序只有当REN=1时,才能对RXD进行检测。①RI=0。即上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中数据已被取走。由软件使RI=0,以便提供“接收SBUF已空”的信息。②SM2=0或收到的停止位为1(方式1时,停止位进入RB8)。满足上述两个条件,将接收到的数据装入串行口的SBUF和RB8(RB8装入停止位),并置位RI,通知CPU取数据;如果不满足,接收到的数据不能装入SBUF,这意味着该帧信息将会丢失。接收有效的两个条件:两个单片机之间的通信•通信协议:数据格式、校验方式•波特率•硬件连接8051应用系统(甲)TXDRXDGND8051应用系统(乙)TXDRXDGND2.串行口方式1的应用例:通过MCS-51串行口发送带存放在片内RAM20H~3FH中的数据,要求传送的波特率为1200bps。编写有关的通信程序。fosc=11.0592MHz。分析:取SMOD=0∴(TH1)=232=0E8H设串行口为方式1,定时器/计数器T1为方式2作为串行口的波特率发生器。可以避免计数溢出后用软件重装定时初值的工作。ORG0100HMOVTMOD,#20H;设T1为方式2MOVTL1,#0E8H;T1定时常数MOVTH1,#0E8HSETBTR1;启动T1MOVSCON,#01000000B;设串行口为方式1MOVR0,#20H;设发送数据区首址MOVR7,#32;发送32个ASCII码数据LOOP:MOVA,@R0;取ASCII码数据ACALLSP_OUT;调用串行口发送子程序INCR0;未发送完,则继续DJNZR7,LOOP…主程序:SP_OUT:MOVSBUF,A;带校验位发送JNBTI,$;发送等待CLRTI;清TI标志RET串行口发送子程序:例:B机由串行口接收数据块。解:采用查询方式,本例与上例相呼应,接收器把接收到的32个数据存放在20H-3FH单元内,波特率同上。MOVSCON,#01010000B;设串口方式1,允许接收MOVTMOD,#20H;设置定时器T1为方式2MOVTL1,#0E8H;初值,波特率为1200b/sMOVTH1,#0E8HSETBTR1;启动T1运行MOVR0,#20H;数据存放首地址MOVR7,#32;数据块长度LOOP:ACALLSP_IN;调用接收一帧子程序MOV@R0,A;存放接收的数据INCR0DJNZR7,LOOP……主程序:SP_IN:JNBRI,$;RI由硬件置位CLRRI;软件清除RIMOVA,SBUFRET接收一帧子程序: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发送和接收时序只有当REN=1时,才能对RXD进行检测。•发送前,先根据通信协议由软件设置TB8(如作奇偶校验位或地址/数据标志位),•然后将要发送的数据写入SBUF,即可启动发送过程。•串行口能自动把TB8取出,并装入到第9位数据位的位置,再逐一发送出去。发送完毕,使TI=1。发送过程•接收时,使SCON中的REN=1,允许接收。•当检测到RXD(P3.0)端有1→0的跳变(起始位)时,开始接收9位数据,送入移位寄存器(9位)。•当满足RI=0且SM2=0,或接收到的第9位数据为1时,前8位数据送入SBUF,附加的第9位数据送入SCON中的RB8,置RI为1;否则,这次接收无效,也不置位RI。接收过程例:编制一个发送程序,将片内RAM中50H—5FH的数据串行发送。串行口设定为工作方式2,TB8作奇偶校验位。发送波特率375kb/s,晶振为12MHz,SMOD=1。解:在数据写入发送SBUF之前,先将数据的奇偶标志P写入TB8,此时,第9位数据便可作奇偶校验用。可采用查询和中断两种方式发送。ORG0000HAJMPMAIN;上电,转向主程序ORG0100H;主程序MAIN:MOVSCON,#80H;设工作方式2MOVPCON,#80H;取波特率为fosc/32MOVR0,#50H;首址50H送R0MOVR7,#10H;数值长度送R7LOOP:MOVA,@R0;取数据MOVC,P;P→CMOVTB8,C;奇偶标志送TB8MOVSBUF,A;发送数据WAIT:JBCTI,CONTAJMPWAIT;等待中断标志TI=1CONT:INCR0DJNZR7,LOOP;数值尚未发送完,继续发送下一个数据SJMP$END例:编制一个接收程序,将接收的16B数据送入片内RAM的50H-5FH单元中。设串行口工作在方式2,波特率为375bps。解:源程序如下:MAIN:MOVSCON,#080H;串行口工作于方2;REN=1,可接收MOVPCON,#80H;设SMOD=1MOVR0,#50H;首址50H送R0MOVR7,#10H;数值长度送R7SETBREN;启动接收WAIT:JBCRI,PR1;接收完一帧数据,清RI,转PR1SJMPWAIT;否则等待PR1:MOVA,SBUF;读入数据JNBP,PNP;P=0,转PNPJNBRB8,ERR;P=1,RB8=0,转出错处理SJMPRIGHTPNP:JBRB8,ERR;P=0,RB8=1,转出错处理RIGHT:MOV@R0,A;数据送内存INCR0;修改地址指针DJNZR7,WAIT;数据未接收完,;继续接收下一个数据CLRF0;置正确接收完毕标志F0=0SJMPENDTERR:SETBF0ENDT:SJMP$4.波特率的设定•在串行通信中,要求收发双方接收和发送数据的波特率必须一致。通过软件对MCS-51串行口编程可约定四种工作方式。其中,方式0和方式2的波特率是固定的;而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定(T1每秒溢出的次数)。•串行口的四种工作方式对应着三种波特率。由于输入的移位时钟来源不同,因此,各种方式的波特率计算公式也不同。(1)方式0的波特率•由下图可见,方式0时,每个机器周期产生一个移位时钟,发送或接收一位数据。因此,波特率固定为振荡频率的1/12,并不受PCON寄存器中SMOD位的影响。串行口方式0波特率的产生(2)方式2的波特率•方式2波特率取决于PCON中SMOD位的值:SMOD=0时,波特率为fosc的1/64;SMOD=1时,波特率为fosc的1/32。•即:方式2波特率≌(2SMOD/64)×fosc•fosc=12MHz,SMOD=0,187.5kbps•SMOD=1,375kbps(3)方式1和方式3的波特率•方式1和方式3的移位时钟脉冲由定时器T1产生,如图所示。因此,MCS-51串行口方式1和方式3的波特率由定时器T1的溢出率与SMOD
本文标题:单片机串行口课件
链接地址:https://www.777doc.com/doc-3862619 .html