ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:562.57KB ,
资源ID:9852742      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9852742.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第9章 串口通信.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第9章 串口通信.docx

1、第9章 串口通信第9章 串口通信9.1概述单片机与外界进行信息交换,称为通信。通信有并行通信和串行通信两种基本方式。并行通信是多位数据同时被发送或接收,如图9-1(a)所示;串行通信则是数据逐位依次被发送或接收,如图9-1(b)所示。并行通信和串行通信各有其优缺点,具体如表9-1所列。 (a)并行通信 (b)串行通信图9-1 通信方式表9-1 并行通信和串行通信的特点通信方式优点缺点并行通信多位数据同时传输,传送速度快线路位数多,不便长距离传送串行通信适合长距离通信,节省传输线路,有一定的纠错能力多位数据逐位依次传输,传送速度较慢9.1.1串行通信串行通信适合长距离、节省传输线、有纠错能力的突

2、出优点,使其逐渐成为单片机与其它系统通信的主要方式。串行通信又细分为异步通信和同步通信,单片机主要采用异步通信方式。1、异步通信异步通信数据按帧传输,一帧数据包含起始位、数据位、校验位和停止位。异步通信凭借传输信息中设置的起始位、停止位来保持通信同步。异步通信对硬件要求不高,容易实现且灵活,适用于数据的随机发送/接收,但因传送一个字节的数据就要建立一次同步,加上起始位、校验位和停止位,使得工作速度相对较低。2、同步通信同步通信传输的信息,是由12个同步字符和多字节数据位组成。同步字符用于保持通信同步并作为起始位,用以触发同步时钟开始发送或接收数据;多字节数据之间不能有空隙,每位占用的时间相等。

3、同步通信传输速度快,但需要准确的时钟来实现收发双方的严格同步,硬件要求高,多用于批量数据传送。9.1.2串行通信的制式串行通信按照数据传送方向的不同,有三种传输方式:1、单工制式单工传输,是指通信双方传输信息时,只能从发送方单方向传送数据给接收方,如图9-2所示。 图9-2 单工通信2、半双工制式半双工传输,是指通信双方都有接收器和发送器,都能够进行数据的发送和接收,但不能在同一时刻接收和发送数据,即发送时不能接收,接收时不能发送。如图9-3所示。图9-3 半双工通信3、全双工制式全双工传输,是指通信双方均设有发送器和接收器,通信信道相互独立,既有发送信道又有接收信道。因此,全双工传输可实现通

4、信双方数据的同时发送和接收,即发送时可以接收,接收时也可以发送。如图9-4所示。图9-4 全双工通信51单片机内部的串行接口是全双工的,即它能同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入。串行口还具有接收缓冲功能,即从接收缓冲器中读出前一个已收到的字节数据之前,就可以开始接收第二字节数据了。串行口的内部结构如图9-5所示。图9-5 串行口结构示意图单片机知识:串口缓冲器SBUF串口缓冲器SBUF,是在物理上彼此独立的两个缓冲器:一个是接收缓冲器,用于存放接收到的数据;另一个是发送缓冲器,用于存放待发送的数据。所以,数据的发送和接收可以同时进行。两个缓冲器共用一

5、个地址99H,通过对SBUF的读、写语句,可以区分当前进行的操作是针对接收缓冲器还是发送缓冲器:如果CPU在写SBUF,操作的对象就是发送缓冲器;而CPU在读SBUF时,操作的对象就是接收缓冲器了。例如:SBUF=sendi; / 发送第i个数据bufferi=SBUF; /接收数据9.2 单片机间的串口通信功能说明:单片机a与单片机b,通过串行口进行通信。a机发送数据,b机接收a机发送的数据,并进行相应处理。按键K1每按下一次,连接在b机P2.0引脚的蜂鸣器就报警鸣响一次,同时,连接在b机P2.7引脚的发光二极管D1闪烁一次。按键K2按下一次,连接在b机P2.0引脚的蜂鸣器报警鸣响两次,同时

6、,连接在b机P2.7引脚的发光二极管D1闪烁两次。硬件说明:1、 硬件电路连接如图9-6所示,单片机a的P3.1引脚(TXD),连接到单片机b的P3.0引脚(RXD)。2、按键K1和K2分别连接到单片机a的P1.0和P1.1引脚; 图9-6 双机串口通信硬件连接图程序清单如下:/双机串口通信,a机发送数据程序#include #define uchar unsigned charsbit k1=P10;sbit k2=P11;uchar i=0;/*void delay(uchar i) /延时子函数 uchar j,k; for(k=0;ki;k+) for(j=0;j110;j+);/*m

7、ain() /主函数 TMOD=0x20; /定时器1工作于方式2 TL1=0xf4; /波特率为2400b/s TH1=0xf4; TR1=1; SCON=0x50; /设置串行口工作在方式1,允许接收 while(1) if(k1=0) delay(5); if(k1=0) i=1; if(k2=0) delay(5); if(k2=0) i=2; if(i!=0) SBUF=i; / 发送数据 i while(TI=0); / 查询等待发送是否完成 TI=0; / 发送完成,TI由软件清0 i=0; /双机串口通信,b接收数据程序#include#define uchar unsigne

8、d char sbit beep=P20;sbit D1=P27;uchar x,y;/*void delay(uchar i) /延时子函数 uchar j,k; for(k=0;ki;k+) for(j=0;j0;y-) beep=0; D1=0; delay(100); beep=1; D1=1; /*void serial(void) interrupt 4 /串口中断类型号为4 EA=0; /关中断 RI=0; /软件清除中断标志位 x=SBUF; /接收数据 EA=1; /开中断允许位单片机知识:串行口1、串行口的工作寄存器51串行口工作时,需要进行相关寄存器的设置。只有设置正确,

9、串行口才能正常工作。需要进行设置的寄存器,有串行口控制寄存器SCON、电源控制器PCON、中断允许寄存器IE和中断优先级寄存器IP。其中IE和IP寄存器已在第4章有过详细介绍,此处重点介绍SCON和PCON。(1)串行口控制寄存器SCON串行口控制寄存器SCON是一个8位的寄存器,如表9-2所列。系统复位时,SCON中的所有位都被清0。其各位功能及含义如下: 表9-2 SCON寄存器位7位6位5位4位3位2位1位0SM0SM1SM2RENTB8RB8TIRI位7、位6SM0、SM1:串行口操作方式选择位。SM0和SM1这两个选择位组合后,对应串行口的四种工作方式,具体如表9-3所示。表9-3

10、串行口方式选择SM0 SM1方 式功 能 说 明波 特 率0 00同步移位寄存器方式,8位全部是数据,无起始停止位fosc/120 1110位UART(其中1位起始位,8位数据位,1位停止位)可变1 0211位UART(其中1位起始位,9位数据位,1位停止位)fosc/64或 fosc/321 13同方式2可变位5SM2:方式2和3的多机通信使能位。在方式2或方式3中,若SM2为0,则不论接收到的第9位数据RB8是0还是1,均可使接收到的数据进入SBUF,并激活接受中断标志位RI;若SM2为1,且接收到的第9位数据RB8为1,则接收到的数据进入SBUF,并激活接受中断标志位RI;若SM2为1,

11、且接收到的第9位数据RB8为0,则接收到的数据被丢弃,接收中断标志RI不会被激活。在方式1中,若SM2=1,则只有在收到有效的停止位时,才会激活RI。在方式0中,SM2必须置为0。位4REN:串行数据接收允许位。REN=1,允许串行口接受数据;REN=0,禁止串行口接受数据。该位由软件置位或清零。 位3TB8:方式0和方式1中不使用该位。在方式2和方式3中,TB8中的值(1位二进制数)是发送数据的第9位,可按需要由软件指定其功能(数据的奇偶校验位或多机通信中的地址帧/数据帧的标志,一般1是地址帧,0是数据帧)。位2RB8:是方式2和3中已接收到的第9位数据。在方式1中,若SM2=0,RB8是接

12、收到的停止位。在方式0中,不使用RB8位。位1TI:发送中断标志位。在方式0中,当串行发送完8位数据时,由硬件置1,表明发送中断有请求;在其他方式中,在发送停止位时,由内部硬件置1。需要特别注意的是,无论在何种方式,该位都必须由软件来清0。 位0RI:接收中断标志位。在方式0中,当串行接收到8位数据结束时,由硬件置1。无论在何种方式,该位都必须由软件来清0。(2) 电源控制器PCONPCON是一个特殊功能寄存器,它是一个8位寄存器。在串口通信中,只用到8位中SMOD这一位(位7)。 该位是波特率选择位,在串行口工作在方式为1、2或3时,若SMOD=1,则波特率提高一倍。复位时,SMOD值为0。

13、(3)中断允许寄存器IE中断允许寄存器IE的位4(ES)是串行口中断允许位,ES=1,允许串行口中断(总开关EA=1时);ES=0,禁止串行口中断。中断允许寄存器IE如表9-4所列。表9-4 IE寄存器位7位6位5位4位3位2位1位0EAESET1EX1ET0EX0(4)中断优先级寄存器IP中断优先级寄存器IP的位4(PS),是串行口中断优先级控制位。PS=1,串行口定义为高优先级中断源;PS=0,串行口定义为低优先级中断源。2、串行口工作方式串行口的工作方式由SM0和SM1定义,编码和功能如表9-3所示,下面分别介绍4种工作方式及其用途。(1)方式0串行口的工作方式0为同步移位寄存器输入输出

14、方式,可外接移位寄存器,以扩展I/O口,也可外接同步I/O设备。当串行口在方式0下发送(输出)数据时,数据串行逐位从RXD引脚输出;而TXD引脚则作移位脉冲的输出端,输出移位需要的同步时钟。当串行口在方式0下接收(输入)数据时,RXD端为数据输入端,TXD仍为同步脉冲信号输出端。接收器接收RXD端输入的数据信息,波特率是振荡频率的1/12。方式0主要用于I/O扩展的场合。此方式下的串行口,通过外接串入并出移位寄存器,可扩展输出口;通过外接并入串出移位寄存器,可扩展输入口。串行口工作在方式0时,需要注意以下两点:方式0发送或接收完8位数据后,发送中断标志TI或接收中断标志RI,由硬件置1。但在C

15、PU响应了发送中断或接收中断的中断请求,并转入中断服务程序时,CPU并不自动将TI或RI清0,因此,用户必须编程将中断标志TI或RI清0。串行口在方式0下工作时,SM2位必须为0。(2)方式1串行口工作在方式1时,是一个波特率可变的10位异步通信接口,即1位起始位,8位数据位(低位在先)和1位停止位,其中起始位和停止位是在发送时自动插入的。波特率的大小,取决于定时器1或定时器2的溢出速率。当串行口在方式1下发送(输出)数据时,TI必须为0。当CPU执行任何一条以SBUF为目的寄存器的指令或语句,都启动一次发送。数据发送完时,发送中断标志位TI置1。当串行口在方式1下接收(输入)数据时,其接收的

16、前提条件是,串行口控制寄存器SCON的REN位为1,同时还要满足两个条件:RI必须为0,SM2=0或者接收到的停止位为1,否则接收到的数据会被丢弃。如果正确接收,则接收到的数据被装载进SBUF和RB8位,接收中断标志位RI被置1。方式1一般多用于两个单片机之间的数据通信。串行口工作在方式1时,发送中断标志TI或接收中断标志RI,须由用户清0。 ).8F下=1; _(3)方式2和方式3串行口工作在方式2和方式3,是11位的异步通信接口。方式2和方式3的操作过程完全一样,仅仅是波特率不同。方式2的波特率固定,为fosc/32或fosc/64;方式3的波特率可变,取决于定时器1或定时器2溢出速率。方

17、式2和方式3的帧格式如表9-5所示。表9-5 方式2和方式3的帧格式位0位1位2位3位4位5位6位7位8位9位10起始D0D1D2D3D4D5D6D7TB8/RB8停止当串行口在方式2或者3下发送(输出)数据时,任何一条写SBUF的语句,都可启动一次发送。当第9位数据(TB8)输出之后,发送中断标志位TI被置1。当串行口在方式2或者3下接收(输入)数据时,其前提条件依然是,SCON寄存器的REN位为1;同时还要满足两个条件RI必须为0,SM2=0或者接收到的停止位为1,否则接收到的数据会被丢弃。如果正确接收,则接收到的数据被装载进SBUF和RB8位,接收中断标志位RI被置1。需要注意的是,在方

18、式2和方式3中,装入RB8的是第9位数据,而不是停止位;但在方式1中,装入的RB8第9位是停止位。3、波特率串行口每秒钟发送(或接收)的二进制数的位数称为波特率。设发送一位数据所需要的时间为T,则波特率为1/T。为保证数据的正确发送和接收,单片机间必须使用相同的波特率。串行口以方式0工作时,波特率固定为时钟振荡器频率的1/12;以方式2工作时,波特率为时钟振荡器频率的1/64或1/32(PCON中的SMOD位为1对应1/32; PCON中的SMOD位为0对应1/64)。方式1和3的波特率,由定时器1的溢出率所决定。当定时器1作波特率发生器时,波特率由下式确定: 波特率 = 2SMOD(T1溢出

19、率)/n 式中,T1溢出率,是定时器1在1秒钟内溢出的次数。n为32或16(若SMOD=0,则n=32;若SMOD=1,则n=16)。在串行通信的实际使用中,单片机的晶振频率必须选用11.0592MHz,否则,在定时器1的初值计算时,将会出现晶振频率不能被整除的问题,使波特率存在较大误差,从而导致串行通信的质量变差。9.3单片机多机通信9.3.1 多机通信概述承前所述,串行口以方式2和方式3接收时,若SM2为1,则只有当接收器接收到的第9位数据为1时,数据才被装入接收缓冲器,并将接收中断标志RI位置1,同时向CPU发出中断申请;如果接收到的第9位数据为0,则不产生中断标志,接收到的数据也将被丢

20、弃;而SM2为0时,当接收到一个数据信息后,不管第9位数据是1还是0,都使接收中断标志位RI置1,并将接收到的数据装入接收缓冲器。通过上述这种方式,就可以实现多个单片机之间的通信。如图9-7所示,为一种简单的主从式的多机通信系统,主机控制它与各个从机之间的通信,而各个从机之间的通信也必须经过主机才能实现,可见,从机是被动的。TXD RXD89C51从机3 图9-7 多机通信连接原理图从机的初始化程序(或相关的处理程序)中,将从机的串行口设置在方式2或方式3下,用于接收数据,且置SM2为1和允许串行口中断。当主机准备发送一数据块给从机时,主机首先送出一个地址字节,用于辨认目标从机。可用发送数据的

21、第9位来区别当前发送的是地址字节信息还是数据字节信息:发出地址信息时第9位为1,发数据(包括命令)信息时第9位为0。主机发送的是地址信息,所以发送数据的第9位为1;而各从机接收到主机发送来的地址信息中,接收到的第9位信息(RB8)必定为1。由于此时所有从机的SM2都为1,所以,所有从机将其接收中断标志RI置1,并将接收到的地址信息存进SBUF中。这时,让每一台从机都检查一下,看自己的地址与接收到主机发送来的地址是否相符。若某一台从机的地址与接收到的地址相符,则将该从机的SM2位清0;其它地址不相符的从机,则保持SM2=1的状态不变。地址相符的从机,将SM2位清0的目的,是准备接收主机即将发送来

22、的数据(或命令)。在主机发送数据时,地址相符的从机由于SM2=0,则不论接收的第9位(RB8)是0还是1,它都将接收到的数据存入SBUF,并激活接收中断标志RI。相反,那些地址不相符的从机,由于SM2依旧保持为1,则当主机发送数据时(主机发送的第9位数据是0,0代表的是数据,而1代表的是地址),这些从机接收到的第9位数据也是0,于是,这些从机将所接收到的数据丢失,同时并不激活接收中断标志位RI。这样,就实现了主机仅对地址相符的那一台从机传输数据信息的功能。9.3.2单片机多机通信实例功能说明:A、B、C三个单片机中,A为主机,B和C为从机。独立按键K1是主机A外部中断0的中断源。当K1被第一次

23、按下时,数码管1显示数字1, 数码管2显示字符“A”(“A”是主机A的编号);同时,连接到主机A上P1.0引脚的LED灯,点亮1秒钟时间。 当K1被第二次按下时,数码管1显示数字2,数码管2显示字符“B”(“B”是从机B的编号,此值由从机B传回到主机);同时,连接到从机B上的P1.0引脚的LED灯,点亮1秒钟时间。当K1被第三次按下时,数码管1显示数字3,数码管2显示字符“C”(“C”是从机C的编号,此值由机C传回到主机);同时,连接到从机C上的P1.0引脚的LED灯,点亮1秒钟时间。当K1被第四次按下时,数码管1显示数字1, 数码管2显示字符“A”(“A”是主机A的编号);同时,连接到主机A

24、上P1.0引脚的LED灯,点亮1秒钟时间。上述过程循环进行。硬件说明:1、 硬件电路如图9-8所示。主机A的 P0口和P2口,分别连接共阴数码管1和2,数码管使用74HC573驱动;独立按键K1连接到主机A的P3.2引脚(外部中断0输入引脚);主机A上P1口的P1.0引脚连接有一只发光二极管D3;从机B和从机C的P3.1引脚,都连接到主机A的P3.0引脚;从机B和从机C的P3.0引脚都连接到主机A的P3.1引脚。2、从机B和从机C,除跟主机通过串行线连接外,其P1口分别连接一只发光二极管。图9-8 单片机多机通信硬件连接图程序清单如下:/多机通信主机A程序#include #define uc

25、har unsigned char#define uint unsigned intuchar code table=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71;uchar mode;sbit D3 = P10;/*void init() TMOD = 0x20; /设定时器1的工作方式为方式2 TH1 = 0xfd; /设置串行口波特率为9600 TL1 = 0xfd; TR1 = 1; SCON = 0xd0; /设置串行口的工作方式为方式3,允许接收 ES = 1; /开串

26、行口中断 EX0 = 1; /开外部中断0 IT0 = 1; /INT0下降沿触发 EA = 1; /开总中断允许位 TI = 0;/*void delay(uint i) /延时子函数 uint j,k; for(k=0;ki;k+) for(j=0;j110;j+);/*void serial_procedure(uchar c) /本机串口发送程序 SBUF = c; while(TI = 0); TI = 0;/*void host_control(uchar Add, uchar Cmd) /主机控制处理程序 TB8 = 1; /地址信息标志 serial_procedure(Add); delay(50); TB8 = 0; /数据信息标志 serial_procedure(Cmd); delay(50);/*void INT_EX0(void) interrupt 0 /外中断0中断处理程序 P0 = tablemode; /模式数据送P0口显示 if(mode

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1