您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机原理与应用(第六章)
单片机原理与应用第六章MCS-51单片机的串行通信6.1串行通信的基本概念1.并行通信:一次同时传送多位数据的通信方法。需要多条数据线。2.串行通信:一次仅能传送一位数据的通信方法。仅需一条数据线。3.串行通信按信息传送的方向分为:单工、半双工、全双工这三种工作方式。①单工:只能单方向传送信息。例:遥控器。②半双工:能双向传送信息,但在同一时间,只能向一个方向传送信息。例:对讲机。③全双工:能同时双向传送信息。例:手机。4.全双工串行通信需要两条数据线,一条作为发送信号线,一条作为接收信号线。5.串行通信又分为同步通信方式和异步通信方式。①同步通信方式:将数据分块(批)传送,每个数据块的开头先发送若干个同步信号。例:传呼机无线传输信号、有线电话的来电显示信号。②异步通信方式:每次传送一帧信息:一个启始位“0”,8个数据位,(一个奇偶校验位或一个地址/数据标志位,)一个停止位“1”。例:鼠标器。6.串行通信中每一位传送的时间是确定的,其倒数称为波特率。波特率表示每秒传送的位数,单位为b/s(波特)。进行串行通信的双方,采用的波特率必须相同,否则会产生错误。通常双方波特率的相对误差不能超过2.5%,因而MCS-51单片机常采用11.0592MHz的晶振。6.2MCS-51单片机串行口的功能和结构6.2.1串行口能实现的功能串行口的4种工作方式SM0SM1工作方式功能波特率00方式0同步移位寄存器方式,用于扩展并行I/O口Fosc/1201方式18位通用异步接收器/发送器可变10方式29位通用异步接收器/发送器Fosc/32或Fosc/6411方式39位通用异步接收器/发送器可变6.2.2串行口的结构(见P99页的图6-4)1.串行数据缓冲寄存器SBUF(99H)串行数据的发送和接收,在串行接口内部各有一个发送缓冲器和一个接受缓冲器,都共用一个地址99H,即SBUF寄存器,但不会发生冲突。(注:P97页的最后一行“但要注意,……”这段的说法是不正确的。)当把数据存入SBUF(执行指令MOVSBUF,A)后,即启动了串行数据的发送。而执行指令MOVA,SBUF则读取了一帧的数据。2.串行口控制寄存器SCON(98H)D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI(1)SM0,SM1:4种工作方式的选择位(2)SM2:多机通信控制位,两台以上的单片机通信时,必须SM2=1。(见P111页的图6-13)(3)REN:允许接受控制位(4)TB8:所要发送数据的第9位(5)RB8:接受到的数据的第9位(6)TI:发送(结束)中断标志位(7)RI:接受(完成)中断标志位3.电源控制寄存器PCON(97H)D7D6D5D4D3D2D1D0SMODGF1GF0PDIDL当SMOD=1时,波特率增大一倍。(PD为掉电方式位,IDL为停机方式位,GF0、GF1为通用标志位。)6.3串行口的工作方式及波特率设置(设Fosc=6MHz)6.3.1方式0:MOVSCON,#10H;SM0=0,SM1=0,REN=1,允许接收。同步移位寄存器方式,用于扩展并行I/O口。共8位。RXD脚发送或接收数据,TXD脚输出移位脉冲。应用例:与串入并出集成电路74LS164芯片连接,扩展并行输出口。8051TXDCLK74LS164CPURXDDQ7Q6Q5Q4Q3Q2Q1Q0MOVSCON,#00H┃┃┃┃┃┃┃┃MOVSBUF,#95H10010101波特率是固定的,为Fosc/12=500Kb/s(位/秒)。RDX和TDX脚的输出波形参见P99页的图6-5。由图6-5可看出TXD脚输出的移位脉冲频率为500KHz(周/秒)。6.3.2方式1:MOVSCON,#50H;SM0=0,SM1=1,REN=1异步串行传送,1位启始“0”,8位数据,1位停止“1”,共10位。RDX脚接收,TDX脚发送。波特率B为2SMOD/32×(定时器T1的溢出率)。6.3.3方式2:MOVSCON,#90H;SM0=1,SM1=0,REN=1异步串行传送,1位启始“0”,8位数据,1位奇偶校验或地址/数据标志位(发送用SCON的TB8位,接收在SCON的RB8位),一位停止“1”,共11位。RDX脚接收,TDX脚发送。波特率为Fosc×2SMOD/64。即Fosc/32或Fosc/64。6.3.4方式3:MOVSCON,#0D0H;SM0=1,SM1=1,REN=1异步串行传送,1位启始“0”,8位数据,1位奇偶校验或地址/数据标志位(发送用SCON的TB8位,接收在SCON的RB8位),一位停止“1”,共11位。RDX脚接收,TDX脚发送。波特率B为2SMOD/32×(定时器T1的溢出率)。6.3.5波特率B的设置产生波特率的定时器只能用T1或T2(8052单片机)。方式0的波特率B=Fosc/12,方式2的波特率B=Fosc×2SMOD/64。方式1和方式3的波特率B=2SMOD/32×(定时器T1的溢出率)。T1的溢出率=1/T(T为定时器T1溢出的时间)。由于定时器T1溢出的时间T=(M-n)×12/Fosc,M为最大计数值(机器周期个数,与定时器的设置有关),n为定时器TH1、TL1的初值。则B=2SMOD×Fosc/(32×(M-n)×12)n=M-2SMOD×Fosc/(32×12×B)例:已知波特率B=2400b/s,Fosc=6MHz=6×106Hz,设置定时器T1为工作方式2,SMOD=1。则n=M-2SMOD×Fosc/(32×12×B)=256-2×6×106/(32×12×2400)=256-1000000/(32×2400)=256-1000000/76800≈256-13=243=F3H得:TH1=TL1=F3H。反之波特率B=2SMOD×Fosc/(32×(M-n)×12)=2×6×106/(32×(256-243)×12)=1000000/(32×13)=2404b/s结论:误差为+4b/s,4/2400=+0.17%。注意:1.串行口发送/接收中断入口地址相同:0023H,中断响应后须判别TI和RI。2.串行口中断信号TI、RI,必须由软件清零。3.串行口的工作方式0和方式2的波特率是固定的,无需设置定时器T1。串行通信的应用:6.4MCS-51单片机之间的通信实例6.4.1利用串行口的方式0实现扩充并行口的输入/输出(详见第八章)1.外部的并行输入数据(8位),经并入串出的74LS165芯片转换为方式0的串行输入数据,详见P205页的“8.4.1扩展并行输入口”。2.方式0输出的串行数据,经串入并出的74LS164芯片转换为8位的并行输出数据,详见P207页的“8.4.2扩展并行输出口”。6.4.2双机通信技术单片机与单片机之间的串行通信软件的设计,和单片机与PC机之间的串行通信软件的设计是相同的,参见6.6节的软件设计即可。6.4.3多机通信技术单片机之间的多机通信只能是一个主机对多个从机的通信,从机之间要进行通信则必须通过主机进行传递。(从机之间为何不能直接通信?)多机通信的关键在于从机中的串行口控制寄存器SCON中SM2位的使用:1.使用方式2或方式3。2.每个从机都给定一个8位的编号。3.主机发送地址帧(8位的从机编号)时,置TB8=1;发送数据时,置TB8=0。4.当从机的SM2=1时,仅接收主机置TB8=1时发来的信息(地址帧),而主机置TB8=0时发来的信息(数据)则不接收。5.当从机的SM2=0时,接收主机(置TB8=0时)发来的任何信息(数据)。6.从机只有接收到主机发来的特定数据后,才能给主机发送数据,即从机发送数据是被动式的。7.当从机(SM2=1)接收到地址帧是本机的编号时,置SM2=0,接收主机发来的数据,接收完全部数据后,再置SM2=1。如果接收到的是命令发送数据的信息,则按要求发送数据后,再置SM2=1。6.5串行通信总线标准6.5.1RS-232接口现在PC机上的串行接口COM1、COM2都是采用RS-232接口。由于51系列单片机串行口的逻辑电平为+5V和0V,而PC机串行口(RS-232)的逻辑电平为+10V和-10V,因而它们之间需通过硬件转换电平后才能进行连接,通常使用MC1488和MC1489芯片(单向)或MAX232芯片(双向)转换连接。6.6IBM-PC机与MCS-51单片机的通信1.PC机串行口通信的编程(1).用TubroC、Delphi、Assumbler等对异步通信适配器8250芯片进行编程。(2).利用“串口调试器”软件(从网上下载),该软件只能设置波特率为2n×300。2.PC机的串行调试器与Protues仿真软件中MCU的连接3.MCS-51单片机串行口通信的编程(一):初始化串行口。(1)设置串口的工作方式:MOVSCON,#50H;方式1,REN=1(2)设置SMOD:MOVPCON,#80H;SMOD=1(3)设置定时器T1:MOVTMOD,#20H;方式2(4)由波特率计算出T1的初值,设B=2400b/s,Fosc=6MHz,则TH1=TL1=F3HMOVTH1,#0F3HMOVTL1,#0F3H(5)启动T1工作:SETBTR14.MCS-51单片机串行口通信的编程(二):查询方式通信。例一:单字节数据的发送和接收。对应“串行通信实验1”仿真电路。发送方:ORG0000HLJMPMain0ORG0050HMain0:LCALLST;初始化串行口MOVP0,#0FFH;关闭LED显示MAIN:LCALLSTART;键盘扫描识别MOVA,30H;取键值JZMAIN;没有键按下。LCALLHH_BIN;把健值转化为0~15LCALLFUN;进行相应的键处理。LCALLKEY_OFF;键释放MAIN1:MOVA,30HMOVSBUF,AJNBTI,$;等待发送结束CLRTILJMPMAIN接收方:ORG0000HLJMPMain0ORG0050HMain0:LCALLST;初始化串行口MAIN:JNBRI,$;查询接收CLRRIMOVA,SBUFMOVP2,A;LED显示LJMPMAIN例二:整批数据的发送和接收。对应“串行通信实验2”仿真电路。(1)查询发送子程序:(发送6个数据)SIOT:MOVR1,#40H;发送数据的首址MOVR2,#6;发送的个数SIOT1:MOVA,@R1MOVSBUF,AJNBTI,$;等待发送结束CLRTI;置TI=0INCR1DJNZR2,SIOT1MOVA,#0FFH;#FFH为发送结束标志MOVSBUF,ASIOT2:JNBTI,SIOT2;等待发送结束CLRTIRET发送方主程序:ORG0000HLJMPMain0ORG0050HMain0:LCALLST;初始化串行口MOVP0,#0FFH;关闭LED显示MAIN:LCALLDISLED;6个LED的动态显示LCALLSTART;键盘扫描识别MOVA,30H;取键值JZMAIN1;没有键按下。LCALLHH_BIN;把健值转化为0~15LCALLFUN;进行相应的键处理。LCALLKEY_OFF;键释放SJMPMAINMAIN1:SETBP3.7JBP3.7,MAINLCALLSIOTMAIN2:LCALLDISLEDJNBP3.7,MAIN2;等待按键释放LJMPMAIN(2)查询接收子程序:(接收若干个数据,当收到#FFH时结束。)SIOR:MOVR0,#40H;接收数据存放的首址SIOR1:JNBRI,$;等待接收数据CLRRI;清除RIMOVA,SBUF;接收一个数据MOV@R0,AINCR0CJNEA,#0FFH,SIOR1;判结束标志RET接收方主程序:ORG0000HLJMPMAINORG0050HMAIN:LCALLST;初始化串行口MAIN1:LCALLDISLED;6个LED的动态显示JNBRI,MAIN1;等待接收LCALLSIORSJMPMAIN15.MCS-51单片机串行口通信的编程(三):中断方式通信。(1)打开串行口中断
本文标题:单片机原理与应用(第六章)
链接地址:https://www.777doc.com/doc-2606251 .html