片机的串行接口及串行通信V.ppt

上传人:牧羊曲112 文档编号:6176587 上传时间:2023-10-02 格式:PPT 页数:106 大小:670.61KB
返回 下载 相关 举报
片机的串行接口及串行通信V.ppt_第1页
第1页 / 共106页
片机的串行接口及串行通信V.ppt_第2页
第2页 / 共106页
片机的串行接口及串行通信V.ppt_第3页
第3页 / 共106页
片机的串行接口及串行通信V.ppt_第4页
第4页 / 共106页
片机的串行接口及串行通信V.ppt_第5页
第5页 / 共106页
点击查看更多>>
资源描述

《片机的串行接口及串行通信V.ppt》由会员分享,可在线阅读,更多相关《片机的串行接口及串行通信V.ppt(106页珍藏版)》请在三一办公上搜索。

1、第7章 单片机的串行接口及串行通信,掌握串行通信的基本概念掌握单片机串行通信接口的结构掌握串行通信控制寄存器掌握单片机串行通信的工作方式掌握串行通信的应用及编程方法,学习目标,7.1 串行通信基础7.2 串行口的结构与工作原理7.3 串行口的控制寄存器7.4 单片机串行通信工作方式7.5 单片机串行通信接口技术,主要内容,7.1 串行通信基础,通信:通常把控制器与外部设备或控制器与控制器之间的数据传送称为通信。串行通信就是数据按位顺序进行串行传送,最少只需一根传输线即可完成,一般成本低但速度较慢。串行通信分为异步和同步两种方式。同步通信方式在单片机系统中使用较少,所以本节只介绍异步通信。,7.

2、1.1 异步串行通信的字符格式,异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。异步串行通信在时钟控制下每次发送一位数据,若干个位组成字符帧,一个完整的字符帧完成一个字符的发送,一个字符接另一个字符的传送就实现了发送与接收设备间的数据通信。,起始位开始一个字符传送的标志位。数据位起始位之后传送的数据信号位。奇偶效验位用于对字符的传送作正确性检查。停止位用以标志一个字符的结束。位时间发送1位数据所需时间。帧(frame)从起始位开始到停止位结束的全部内容称 为一帧。,下图给出了一个字符帧的异步串行通信格式:,单片机的异步串行通信根据通信距离、抗干扰性能的要求,信号的形式可

3、选择TTL电平传输、RS-232电平传输、RS-422A或RS-485差分传输等信号形式进行串行数据的传输。单片机串行口控制器的输入、输出信号均为TTL电平。这种信号传输形式受传输距离限制,抗干扰性能差,不能进行远距离通信。对于远距离的系统与系统之间的串行通信,通常将TTL电平变换为RS-232电平或采用差分形式来实现,如RS-232、RS-422A、RS-485等标准来实现串行通信传输。,7.1.2 异步串行通信的信号形式,单工(Simplex)形式:数据传送是单向的,通信双方中一方固定为接收端、一方固定为发送端。半双工(Half-duplex)形式:数据传送是双向的,但任何时刻只能由其中的

4、一方发送数据,另一方接收数据,发送和接收不能同时进行。全双工(Full-duplex)形式:数据传送是双向的,且可以同时发送和接收数据。,7.1.3 串行通信的数据通路形式,分时:半双工一个缓冲器同时:全双工两个缓冲器,4.串行通信接口,发送方式,CPU,发送寄存器SBUF,0,1,发送时钟:,接收方式,CPU,接收时钟,接收数据寄存器SBUF,度量一个数据通信系统通信能力的方法有两种,即波特率和数据传输率。波特率:指单位时间内线路变化次数,反映了数据的调制信号波形变换的频繁程度。单位是“波特”(baud)。数据传输率:指单位时间内传送的信息量,以每秒钟传送格式位的数量来表示。单位是“比特/秒

5、”(bps)。,7.1.4 串行通信的数据传输速率,1波特=1bps(位/秒),波特率和数据传输率两者相似但不等同,只有当采用基波传输时两者的数值相同。即:,1.波特率bps 表征数据位的宽度同步:Baud=Tclk=Rclk异步:发Baud=收BaudTclk=nBaud;Rclk=mBaud2.数据帧每位作用同步:D0D7异步:0,D0D7,(P),1,采样频率,3.数据包:每一帧数据作用用户名、密码、长度、DATA1、DATA2等 ADR4.硬件连接:,232,MCU,TTL电平,MCU,MCU,MCU,232,TTL电平,负逻辑,TTL电平,0:00.3V+8V+15V1:2.75V

6、15V8V,7.1 串行通信基础7.2 串行口的结构与工作原理7.3 串行口的控制寄存器7.4 单片机串行通信工作方式7.5 单片机串行通信接口技术,主要内容,在单片机芯片中,通用异步接收和发送器UART(Universal Asynchronous ReceiverTransmitter)已作为一个功能部件集成在其中,构成一个串行通信口。5l系列单片机的串行口是一个可编程的全双工串行通信接口,通过软件编程,其帧格式可设置为8位、10位和11位,数据传输率可以灵活设置,使用非常方便灵活。,7.2 串行口的结构与工作原理,7.2.1 串行口结构,主要由两个物理上独立的接收、发送缓冲器SBUF(占

7、用同一地址99H);一个输入移位寄存器、一个串行控制寄存器SCON和一个波特率发生器组成。接收器是双缓冲结构;发送器为单缓冲器,因为发送时CPU是主动的,不会产生重叠错误。,7.2.2 工作原理,发送数据时:CPU向输出缓冲器SBUF写入数据,同时启动数据串行发送,在波特率发生器产生的发送时钟控制下,按照预先设置的帧格式逐位由TXD端输出发送数据。,接收数据时:UART通过对RXD引脚信号的采样来确认串行数据,若检测到数据发送起始位,则其后对RXD引脚每间隔一定时间进行采样,采样到的数据在接收时钟控制下以移位方式存入输入移位寄存器,当数据接收完成或检测到停止位时,则完成了一个字符帧的接收,输入

8、移位寄存器的内容被送入接收缓冲器SBUF,并置相应的标志位。,注意:在串行通信中,收发双方的数据传输率必须一致,否则接收方接收的数据会产生混乱。,当一帧数据发送完毕(即发送缓冲器空),硬件置位发送中断标志位TI(SCON.1)。这样就可以采用中断或查询的方式来可发送下一个数据,采用查询方式发送数据的过程为:发送一个数据查询TI发送下一个数据(先发后查)当一帧数据接收完成后(接收缓冲器满),硬件自动置位接收中断标志RI(SCON.0)。同样可以采用中断或查询的方式来可接收下一个数据,采用查询方式接收数据的过程为:查询RI读入一个数据查询RI读下一个数据(先查后收),内部逻辑结构:发送器:8位 8

9、位 8位 Tclk TI=1 Tclk/n=Baud(f)(n个发送时钟周期发送一位数据)接收器 8/10/11 8位 RI=1 8位 RclkmBaud,T_SHIFT_Reg,SFR(A),T_BUF(SBUF),CPU,TXD(P3.1),SFR(A),R_SHIFT_Reg,R_BUF(SBUF),RXD(P3.0),m/2 0,m个,7.1 串行通信基础7.2 串行口的结构与工作原理7.3 串行口的控制寄存器7.4 单片机串行通信工作方式7.5 单片机串行通信接口技术,主要内容,与串行通信有关的控制寄存器是:SCON:串行控制寄存器。PCON:电源控制寄存器。IE:中断允许寄存器。,

10、7.3 串行口的控制寄存器,7.3.1 串行控制寄存器SCON,SCON 是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志,字节地址为98H:,SM0和SM1为工作方式选择位,可选择四种工作方式:,SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB80时不激活RI,收到的信息丢弃;RB81时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM

11、2,可以实现多机通信。在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。在方式0时,SM2必须是0。REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。,TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。在双机通信时,可以用作数据的奇偶校验位;或在多机通信中,作为地址帧/数据帧的标志位(一般约定:TB8=0为数据帧,TB8=1为地址帧)。在方式0和方式1中,该位未用。RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。,TI,

12、发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1。TI=1表示帧发送结束,其状态既可供软件查询使用,也可用于请求中断。发送中断被响应后,必须由软件复位。RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1。RI=1表示帧接收结束。其状态既可供软件查询使用,也可用于请求中断。RI亦必须由软件清“0”。,7.3.2 电源控制寄存器PCON,PCON(字节地址为87H)中只有一位SMOD与串行口工作有关:,SMOD(PCON.7)波特率倍增位。在串行口方式1、方式2、

13、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。,其格式如下:,7.3.3 中断允许寄存器IE,这个寄存器已在中断一节介绍过,其中ES位为串行中断允许位:ES=0 禁止串行中断 ES=1 允许串行中断,7.1 串行通信基础7.2 串行口的结构与工作原理7.3 串行口的控制寄存器7.4 单片机串行通信工作方式7.5 单片机串行通信接口技术,主要内容,51系列单片机的串行口共有4种工作方式,4种工作方式基本情况如下表所示:,7.4 单片机串行通信工作方式,7.4.1 串行口工作方式0,方式0时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出

14、口。数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后。波特率固定为fosc/12。1、工作方式说明:方式0输出:发送过程以写SBUF寄存器开始。当八位数据传送完,TI被硬件自动置1,这时方可再发下一帧数据。,方式0输入:接收时必须先置REN为1(允许接收)并且使RI=0,当八位数据接收完毕,RI被硬件置1,此时,可通过读SBUF指令,将串行数据读入。,2.应用举例:例6-1 利用串行口,使接到CD4094输出端的8只发光二极管,从左向右依次点亮,并反复循环。分析:使用串口方式0实现数据的移位输入输出时,实际上是把串行口

15、变成为并行口使用。串行口作为并 行口输出使用时,要有“串入并出”的移位寄存器(例 如CD4094或74LS164、74HC164等)配合,按此要求 所设计的电路原理图如下图所示:,发送过程可叙述如下:数据预先写入串行口数据缓冲器,然后从串行口RXD端,在移位时钟脉冲(TXD)的控制下,逐位移入CD4094。当8位数据全部移出后,SCON寄存器的发送中断TI被自动置“1”。其后主程序就可用中断或查询的方法,通过设置STB状态的控制,把CD4094的内容并行输出。,使用C51编程语言编写的程序代码如下:/*/*功能说明:*/*查询方式发送数据,使用CD4094扩展IO接口点亮二极管*/*/#inc

16、lude#define uchar unsigned char/定义P1.0引脚用于控制CD4094的STB引脚sbit STB=P10;/*延时函数*/void delay(int a)int i,j;for(i=0;ia;i+)for(j=0;j255;j+);,/*主函数*/void main()uchar rec;SCON=0 x00;/串行口工作方式0 ES=0;/禁止串行中断rec=0 x80;/发光管从左边亮起while(1)STB=0;/关闭并行输出if(rec=0 x00)rec=0 x80;,SBUF=rec;/串行输出while(!TI);/查询SBUF数据是否已经发送完

17、毕 TI=0;/清除发送TI标志STB=1;/开启并行输出delay(10);/状态维持时间TI=0;/清发送中断标志rec=rec1;/继续,7.4.2 串行口工作方式1,方式1是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位,8位数据位,1位停止位。,方式1传送的数据格式,2.方式1数据的发送与接收 数据发送由一条CPU写入发送寄存器SBUF的指令启动。8位数据在串行口由硬件自动加入起始位和停止位组成完整的帧格式。在内部移位脉冲作用下,由TXD端串行输出。一帧数据发送完后,TXD输出线维持“1”状态,并将SCON寄存器的TI置

18、“1”,通知CPU可发送下一个数据。,2.方式1数据的发送与接收接收数据时,当SCON的REN位为允许接收状态时,串行口采样RXD端,当采样到从“1”向“0”状态跳变时,就认定是接收到起始位。随后在移位脉冲的控制下,把收到的数据位移入输入移位寄存器,直到停止位到来之后把停止位送入RB8中,输入移位寄存器的数据送入接收缓冲器(SBUF)中,并置位中断标志位RI,通知CPU从SBUF取走接收到的一个字符。,3.波特率的设定 方式1的波特率是可变的,以定时器T1作波特率发器使用,其值由定时器1的计数溢出率来决定,其公式为:其中SMOD为PCON寄存器的最高位的值,其值为1或0.当定时器1作波特率发生

19、器使用时,选用方式2(即8位自动加载方式)。因为方式2具有自动加载功能,可以避免通过程序反复装入初值所引起的定时误差,使波特率更加稳定。假定计数初值为X,则波特率计算公式为:,4.串口初始化程序 方式1中串口初始化一般按以下步骤来编写:(1)设置串口工作方式;(2)确定定时器1的工作方式;(3)确定波特率倍增器的值;(4)确定定时器1的初值;(5)确定数据发送和接收方式,若采用中断方式必须设置相应的中断控制位,若采用采用查询方式则 必须禁止串口中断;(6)启动定时器1。,例6-2 某51单片机系统的主频为11.0592MHZ,现拟以工作方式1与外部设备进行串行数据通信,波特率为2400,试编写

20、该单片机串口初始化程序。分析:因串口采用方式1,不考虑多机通信,接收允许则SCON控制字为50H;定时器1作波特率发生器使用时,选用方式2,不考虑定时器0,则TMOD控制字应为20H;若波特率特率倍增器有效,即SMOD=1,PCON=80H;定时器的初值:,采用查询方式接收和发送数据的初始化子程序可用C51编写为:Void initial_mode1_ check(void)SCON=0 x50;/串口方式1、SM2=0、接收收允许 TMOD=0 x20;/定时器1设定为方式2 PCON=0 x80;/设置波特率为2400bps,SMOD=1 TH1=0Xe8;/设置定时器1的初值 TL1=0

21、Xe8;/设置定时器1重新装载值 ES=0;/禁止串口中断 TR1=1;/启动定时器1,串口控制器开始工作,若采用中断方式接收和发送数据的初始化子程序可用C51编写为:Void initial_mode1_int(void)SCON=0 x50;/串口方式1、SM2=0、接收允许TMOD=0 x20;/定时器1设定为方式2PCON=0 x80;/设置波特率为2400bps,SMOD=1TH1=0Xe8;/设置定时器1的初值TL1=0Xe8;/设置定时器1重新装载值ES=1;/允许串口中断 PS=1;/串口中断为高优先级TR1=1;/启动定时器1,串口控制器开始工作,5.串行接口调试 串行口通信

22、程序的调试相对比较复杂,只有当通信双方的硬件和软件都正确无误时,才能实现成功通信。当调试中出现无法正常通信的问题时,首先应检查硬件是否工作正常,通常可能表现为:通信接口芯片损坏,通信线路接触不良等。为了迅速准确查明通信中的故障点,可采用编制测试程序的方法配合查找硬件问题。一般按照以下步骤进行检查:1)本机发送通路检查:本机发送通路检查一般断开串口连接线,编写测试程序连续发送字符“55H”或“AAH”,通过检测发送引脚的信号是否正常,来确定本机数据发送通路是否工作正常。,假设串口初始化程序与例6-2一致并采用查询发送方式,用C51编写的测试程序如下:#include void initial_m

23、ode1_ check(void);void main(void)initial_mode1_ check();/调用串口初始化程序 while(1)/程序不断发送0 xAA SBUF=0 xAA;while(TI!=1);TI=0;注:为了减少篇幅,本程序直接调用了例6-2的串口初始化程序,后面的例子采用同样的方法,不再做说明。,(2)本机回环自检:指断开本机与外部设备的串口连接线,把本机的数据发送和数据接收端短接,即采用自发自收的方式来确认本机的收发通路都是正常的。用C51编写的测试程序如下:#include void initial_mode1_check(void);void main

24、(void)initial_mode1_look();/调用串口初始化程序 while(1)SBUF=0 xAA;/发送0 xAA while(TI!=1);/等待发送完成 TI=0;while(RI!=1);/等待接收数据/接收数据若不是0 xAA,则停止发送数据 while(SBUF!=0 xAA);RI=0;,(3)联机检查:指两台设备串口连接线接好后的通信.通路的检查,一般通过发送一个约定的检验字并要求对方有一个约定的回应方式,如果回应正确则表明通信信道顺畅。例如约定检验字为AAH,回应字也为AAH,用C51 编写的测试程序与本机回环自检的程序可以完全一致。,7.应用程序举例例6-3

25、设有甲乙两台单片机系统,均采用11.0592MHz的晶振,采用串行口进行通信,数据传输率为2400bps。甲机将存储于外部RAM起始地址为0100H的8个数据发送给乙机,乙机把接收到的8个数据存储于一个定位于片内寄存器的数组中。乙机接收完数据后将存储于外部RAM起始地址为0100H的8个数据发送给甲机,甲机也将接收的8个数据也存储于定位于片内寄存器的数组中,甲机再将存储于外部RAM起始地址为0100H的8个数据发送给乙机,实现循环往复的通信过程。为了保证通信数据的准确无误,需要在发送数据之前检查通信通道是否顺畅。,分析:单片机串行通信的程序设计,一般可采用查询方式或中断方式两种,这个例子相对任

26、务单一,所以可以直接使用查询方式实现通信的编程方法。题目要求在发送数据之前检查通信信道是否顺畅,可采用联机检查方式,约定检验字为AAH,回应字也为AAH。甲机先发送检验字AAH,若收到回应字也为AAH则可以发送数据,数据发送完成后则等待接收乙机发来的数据,接收完成后则继续发送数据,循环执行这一过程。乙机则接收到甲机发来的检验字后,判断是否为约定的检验字,若是则回应一个约定的回应字AAH,然后等待接收甲机发来的数据,数据接收完成后,把乙机发送缓冲区的数据发送给甲机,发送完后再次等待接收甲机发来的数据,循环执行这一过程。,在详细的分析过甲乙机发送接收过程之后,则甲机的程序执行流程为:(1)初始化串

27、口;(2)等待乙机完成初始;(3)发送检验字AAH;(4)等待接收回应字;(5)若回应字不正确,停机;(6)若回应字正确,发送0100H0107中的8个数据;(7)等待接收乙机发送的数据;(8)8个数据接收完成则继续循环执行(6)、(7)。,乙机的程序执行流程为:(1)初始化串口;(2)接收检验字;(3)判断检验字是否正确;(4)不正确则停机;(5)检验字正确则接收甲机发送的数据;(6)8个数据接收完成则发送乙机0100H0107中 的8个数据;(7)等待接收甲机发送的数据;(8)8个数据发送完成则循环执行(6)、(7)。,甲机和乙机程序执行流程图如下图所示:,用C51编写的通信程序如下:/*

28、/*功能说明*/*甲机,T1做波特率发生器,工作在方式一,允许接收,查询方式发送,接收*/*/#include#include#define uchar unsigned char#define uint unsigned int#define CHECK(0 xAA)/定义检验字#define ACK(0 xAA)/定义乙机向甲机响应信号#define TX_BASE(0 x0100)/定义发送缓冲区首地址 uchar data rx_buffer8;/定义接收缓冲区数组 void initial_mode1_ check(void);,/*主函数*/void main()uint i;/辅

29、助变量,校验和定义 void initial_mode1_ check();/调用串口初始化程序 for(i=0;i5000;i+)/等待乙机完成初始化处理while(1);TI=0;RI=0;SBUF=CHECK;/发送检测字while(TI=0);/等待发送结束while(RI=0);/等待乙机回应while(SBUF!=ACK);/接收数据若不是0 xAA,则停止,for(i=0;i8;i+)/发送ram中的8个数据 SBUF=XBYTETX_BASE+i;/发送数据 while(TI=0);TI=0;for(i=0;i8;i+)/接收8个数据 while(RI=0);rx_buffer

30、i=SBUF;/接收数据存入 rx_buffer数组 RI=0;,乙机程序如下:/*/*功能说明:*/*乙机,T1做波特率发生器,工作在方式一,允许接收,查询方式发送,接收。*/*/#include#include#define uchar unsigned char#define uint unsigned int#define CHECK(0 xAA)/定义检验字#define ACK(0 xAA)/定义乙机向甲机响应信号#define TX_BASE(0 x0100)/定义发送缓冲区首地址uchar data rx_buffer8;/定义接收缓冲区数组void initial_mode1

31、_ check(void);,/*主函数*/void main()uint i;/辅助变量,校验和定义 void initial_mode1_ check();/调用串口初始化程序while(1);TI=0;RI=0;while(RI=0);/接收数据若不是检测字,则为死循环 while(SBUF!=CHECK);SBUF=ACK;/是,则发送回应字while(TI=0);/等待发送结束,for(i=0;i8;i+)/接收8个数据while(RI=0);rx_buffer i=SBUF;RI=0;for(i=0;i8;i+)/发送ram中的8个数据 SBUF=XBYTETX_BASE+i;/发

32、送数据 while(TI=0);TI=0;,方式2或方式3时为11位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚。,方式2和方式3时起始位1位,数据9位(含1位附加的第9位,发送时为SCON中的TB8,接收时为RB8),停止位1位,一帧数据为11位。方式2的波特率固定为晶振频率的1/64或1/32,方式3的波特率由定时器T1的溢出率决定。,7.4.3 串行口工作方式2和方式3,1、方式2和方式3输出,发送数据(D0D7)由MOV指令向SBUF写入,而D8位的内容则由硬件电路从TB8中直接送到发送移位寄存器的第9位,并以此来启动串行发送。一个字符帧发送完毕后,将TI位置“1”,其

33、它过程与方式1相同。,2、方式2和方式3输入,接收时,数据从右边移入输入移位寄存器,在起始位0移到最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的第9位数据为1)时,接收到的数据装入接收缓冲器SBUF和RB8(接收数据的第9位),置RI=1,向CPU请求中断。如果条件不满足,则数据丢失,且不置位RI,继续搜索RXD引脚的负跳变。,采用方式2查询方式发送接收数据的初始化程序非常简单,C51编写的初始化程序为:Void initial_mode2_ check(void)PCON=0 x80;/SMOD=1,波特率为fosc的三十二/分之一 SCON=0 x90;/串口方式

34、2、SM2=0、接收允许 ES=0;/禁止串口中断,若单片机的主频为11.0592MHz,数据传输为9600bps,采用方式3以查询方式接收和发送数据的串口初始化子程序可用C51编写为:Void initial_mode3_ check(void)SCON=0 xd0;/串口方式3、SM2=0、接收允许TMOD=0 x20;/定时器1设定为方式2PCON=0 x80;/设置波特率为9600bps,SMOD=1TH1=0Xfa;/设置定时器1的初值TL1=0Xfa;/设置定时器1重新装载值ES=0;/禁止串口中断TR1=1;/启动定时器1,串口控制器开始工作,采用方式3以中断方式接收和发送数据的

35、初始化子程序可用C51编写为:Void initial_mode3_int(void)SCON=0 xd0;/串口方式3、SM2=0、接收允许TMOD=0 x20;/定时器1设定为方式2PCON=0 x80;/设置波特率为9600bps,SMOD=1,TH1=0Xfa;/设置定时器1的初值TL1=0Xfa;/设置定时器1重新装载值ES=1;/允许串口中断 PS=1;/串口中断为高优先级TR1=1;/启动定时器1,串口控制器开始工作,3.方式3应用举例 下面通过一个双机通信的例子来说明方式3的应用和编程方法。例6-4 设有甲乙两台单片机系统,均采用11.0592MHz的晶振,采用串行口进行通信,

36、数据传输率为9600bps。甲机将存储于外部RAM起始地址为0100H的8个数据发送给乙机,乙机把接收到的8个数据存储于一个定位于片内寄存器的数组中,要求采用方式3,中断方式发送和接收数据。分析:通信双方均采用系统时钟频率fosc=11.0592MHz,数据传输率为9600bps。要求采用方式3中断方式发送和接收数据。串口初始化程序可以调用前面的Void initial_mode3_int(void)函数。,题目要求甲机为发送方,采用中断的方式将发送缓冲区0100H0107H中的8个数据发送给乙机,用C51编写的程序如下:/*/*功能说明*/*甲机用T1做波特率发生器,工作在方式3,允许接收,

37、中断方式发送数据*/*/#include#include#define uchar unsigned char#define uint unsigned int#define TX_BASE(0 x0100)/定义发送缓冲区首地址 unchar data tx_count=0;/定义数据发送计数变量 void initial_mode3_ check(void);,/*-串行通信中断处理-*/void SerialPort(void)interrupt 4 using 1 if(TI=1)TI=0;tx_count+;if(tx_count=0 x08)tx_count=0;/发送完则停止发送

38、数据 else SBUF=XBYTETX_BASE+tx_count;/发送下1个数据,/*主函数*/void main()/辅助变量,校验和定义uint i;/调用串口初始化程序 void initial_mode3_ check();/等待乙机完成初始化处理 for(i=0;i5000;i+)TI=0;RI=0;EA=1;/总中断开放 SBUF=XBYTETX_BASE;/发送第1个数据 while(1);/数据发送完则停机,题目要求乙机为接收方,采用中断接收的方式将数据存入一个定位于片内寄存器的数组中,用C51编写的程序如下:/*/*功能说明:*/*乙机用T1做波特率发生器,工作在方式3

39、,允许接收,中断方式接收数据*/*/#include#include#define uchar unsigned char#define uint unsigned int#define TX_BASE(0 x0100)/定义发送缓冲区首地址 unchar data rx_count=0;/定义数据接收计数变量 uchar data rx_buffer8;/定义数据接收数组 void initial_mode3_ check(void);,/*-串行通信中断处理-*/void SerialPort(void)interrupt 4 using 1 if(RI=1)RI=0;rx_bufferr

40、x_count=SBUF;rx_count+;,/*主函数*/void main()uint i;/辅助变量,校验和定义 void initial_mode3_ check();/调用串口初始化程序TI=0;RI=0;EA=1;/总中断开放while(1);/数据发送完则停机,7.1 串行通信基础7.2 串行口的结构与工作原理7.3 串行口的控制寄存器7.4 单片机串行通信工作方式7.5 单片机串行通信接口技术,主要内容,由于单片机串行口的输入输出均为TTL电平,而这种以TTL电平传输数据的方式,抗干扰性差,传输距离短。为了提高串行通讯的可靠性,增大通讯距离,在实际工业现场中一般采用RS-23

41、2C,RS-422A,RS-485等串行接口标准来进行串行通讯。,7.5 单片机串行通信接口,7.5.1 常用的标准串行通信接口,RS-232C接口 RS-232C是异步串行通讯中应用最广泛的标准总线,它包括了按位串行传输的电气和机械方面的规定。适用于数据端设备(DTE)和数据通讯设备(DCE)之间的接口。RS-232的机械标准规定:RS-232C接口通向外部的连接器(插针插座)是一种“D”型25针插头。在微机通讯中,通常使用的RS-232接口信号只有9根引脚。,通常PC机都带有9针“D”型的RS-232C连接器。其引脚定义如下图所示:,1)电气特性 RS-232C规定的逻辑电平为:逻辑“1”

42、:-3V-15V;逻辑“0”:+3V+15V。RS-232标准的信号传输的最大电缆长度为30米,最高传输效率为20kbps。2)电平转换 电平转换芯片MAX232可以实现2组TTL电平与RS-232电平的双向转换。MAX232内部有电压倍增电路和转换电路,仅需要外接5个电容,在+5V电源下工作。使用十分方便。,2.RS-422A接口 RS-232C虽然应用很广,但因其推出较早,在对传输距离、传输速度要求更高的通信过程中存在数传起率低、通讯距离短、容易产生串扰等缺点。鉴于此,EIA又制定了RS-422A标准。RS-232C既是一种电气标准,又是一种物理接口功能标准,而RS-422A仅仅是一种电气

43、标准。,1)电气特性 RS-422A标准规定了差分平衡的电气接口,采用平衡驱动和差分接收的方法。这相当于两个单端驱动器。RS-422A能在长距离、高速率下可靠传输数据。它的最大传输率为10 Mbps,在此速率下,电缆允许长度为12m,如果采用较低传输速率,最大距离可达1200 m。RS-422A电路由发送器、平衡连接电缆、电缆终端负载、接收器四部分组成。在电路中规定只允许有一个发送器,可有多个接收器。因此,通常采用点对点通讯方式。该标准允许驱动器输出为,接收器可以检测的输入信号电平可低到200 mV。,2)电平转换 可以把TTL电平转换成RS-422A电平的常用芯片有SN75172,SN751

44、74,MC3487,AM26LS30,VI26IS31,UA9638等。器件特性为:最大电缆长度1.2km,最大数传率为10Mbit/s,无负载输出电压,加负载输出电压,断电下输出阻抗,短路输出电流。可以把RS-422A电平转换成TTL电平的常用芯片有:SN75173,SN75175,MC3486,AM26IS32,AM26LS33,UA9637等。器件特性为:输入阻抗,阈值为-0.2V+0.2V,最大输入电压为。,3.RS-485接口 1)电气特性 RS-485是RS-422A的变型,它与RS-422A的区别在于:RS-422A为全双工,采用两对平衡差分信号线;而RS-485为半双工,采用一

45、对平衡差分信号线。RS-485标准允许最多并联32台驱动器和32台接收器。总线两端接匹配电阻(左右),驱动器负载为54欧。驱动器输出电平在-1.5V以下时为逻辑“1”,在+1.5V以上时为逻辑“0”。接收器输入电平在-0.2V以下时为逻辑“1”,在+0.2V以上为逻辑“0”。RS-485传输速率最高为l0Mbps,最大电缆长度为1200m。,2)电平转换 在RS-422A标准中所用的驱动器和接收器芯片,在RS-485中均可使用。除了RS-422A电平转换中所列举的驱动器和接收器外,还有收发器SN75176芯片,该芯片集成了一个差分驱动器和一个差分接收器。,7.5.2 单片机串行通信接口,1.T

46、TL电平通信接口 在同一个电路内的两个单片机之间的通信通常直接选用TTL电平进行传输,通过将双方的RXD引脚与TXD引脚直接相连即可实现双机通信。如下图所示:,2.RS-232C双机通信接口 两个不同的单片机系统如果通信距离在30 m之内,可利用RS-232C标准接口实现点对点的双机通信,接口电路如下图所示。,3.RS-422A双机通信接口 为了增加传输距离,减小线路上干扰造成的传输误码率,在距离较远的两个单片机系统之间的通信可以选择RS-422通信接口。如下图所示:,4.RS-485双机通信接口 RS-422A双机通信需要四芯传输线,这对工业现场的长距离通信是很不经济的,故在工业现场,通常采

47、用两芯双绞线传输的RS-485串行通信接口,而且这种接口很容易实现多机通信。下图给出了采用RS-485实现双机通信的接口电路。,5.RS-485主从多机通信接口 在工业现场中,多个单片机通信使用最多的方式是利用RS485构成的串行总线网络结构。其中,一台单片机为主机,其他单片机为从机。接口电路如下图所示:,7.5.3 单片机与PC机通信接口,在以单片机为基础的数据采集和实时控制系统中,经常以计算机为控制中心,各单片机系统组成采集和控制的智能单元构成小型分布式测控系统。在工业现场中,通常使用扩展多个串行接口分别与近距离的多个单片机系统进行通信的星型连接方式;当距离较远时,通常采用RS-485通信

48、接口标准,采用串行总线结构方式与多个单片机系统组成通信网络。下图为计算机与多个近距离单片机系统进行通信的星型连接方式示意图。,7.5.4 单片机与计算机通信程序设计,数据通信与电话通信不同,在工业现场,数据通信过程没有人直接参与,因此必须通过遵守相同的传输控制规程(通信协议规程)才可能使通信双方协调、可靠地工作。因此,主机要对通信网络中的多个智能仪器仪表单元进行控制,需要设计一套完善的通信协议。通信协议一般对通信双方的接口标准、字符帧格式、命令帧格式、响应帧格式和数据帧格式进行约定。通信双方的接口标准必须一致,字符帧格式一般需约定:数据传输率、起始位个数、数据位个数、停止位个数。,命令帧格式、

49、响应帧格式和数据帧格式一般格式为:命令帧:界定符号地址命令标识符 命令代码 校验和结束符响应帧:界定符号地址响应标识符 响应代码 校验和结束符数据帧:界定符号地址数据标识符 数据 校验和结束符其中:界定符号:通信帧起始标志;地址:标明该通信帧要发往的从机地址;命令标识:标明后续内容为命令代码,通常是ASCII码字符;响应标识:标明后续内容为响应代码,通常是ASCII码字符;,数据标识:标明后续内容为数据,通常是ASCII码字符;命令代码:系统中的命令编码;响应代码:对所有命令的响应编码;数据:主机和从机之间传递的参数或数据。校验和:从地址字节开始到最后一个数据字节的所有字节的累加和,模除256

50、的结果作为通信帧接收正确与否的判断依据;结束符:通信帧结束标志。,常用智能仪器仪表的通信协议往往比较复杂,这里以智能汽车侧滑检测仪的通信协议为基础,以其中的一条指令为例,介绍单片机与计算机通信程序设计方法。以智能汽车侧滑检测仪的第一组通信命令为例,该命令为读侧滑表数据命令,主机发送的数据命令格式为:#AAX(CR)。其中ASCII字符#为通信帧起始界定符;AA为一个接收从机的十六进制地址;X为命令代码,为ASCII码的0或没有。为0时表示检测结果精确到一位小数,命令字节不存在时表示检测结果不带小数;(CR)为ASCII字符回车,代表通信帧结束符。,从机收到读侧滑表数据命令后,进行数据检测,检测

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号