串行通信.ppt

上传人:本田雅阁 文档编号:3107235 上传时间:2019-07-09 格式:PPT 页数:56 大小:1.02MB
返回 下载 相关 举报
串行通信.ppt_第1页
第1页 / 共56页
串行通信.ppt_第2页
第2页 / 共56页
串行通信.ppt_第3页
第3页 / 共56页
串行通信.ppt_第4页
第4页 / 共56页
串行通信.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《串行通信.ppt》由会员分享,可在线阅读,更多相关《串行通信.ppt(56页珍藏版)》请在三一文库上搜索。

1、基本概念: 串行通信和并行通信,MCS-51系列单片机串行通信,并行通信:数据的各位同时传送;,串行通信:数据一位一位顺序传送。,串行、并行通信各自特点,并行/串行:并行方式可一次同时传送N位数据,而串行方式一次只能传送一位;但并行传送的线路复杂(需要N根数据线),串行传送的线路简单(只需要12根数据线);并行方式常用于短距离通信,串行方式则多用于长距离通信。 串行传送主要用于计算机与远程终端之间的数据传送,也很适合于经由公共电话网连接的计算机之间的通信。另外在某些场合,串行接口也可代替并行接口来控制外设,以节省软硬件资源,简化线路。,串行通信的分类:异步(Asynchronous Commu

2、nication) 同步(Synchronous Communication),串行通信制式:单工(a)、半双工(b)和全双工(c) (simplex half duplex full duplex),同步、异步数据通信格式,同步通讯异步通信的概念,同步和异步都属于串行数据传送方式,但二者的传送格式有所不同。同步方式的一帧内含有很多数据位,而异步方式一帧内只含有几个数据位。如果要传送一大堆数据,同步方式只给这串数据进行一次外包装(即添加“头帧”、“尾帧”、“校验”帧),而异步方式在传送这串数据时则要对数据的每一个字节分别加以包装(即添加“头”位、“尾”位和校验)。 显然在相同的数据传输波特率下

3、,同步方式比异步方式的传送速度快,但同步方式要求收发双方在整个事件传送过程中始终保持严格同步,这将增加硬件上的难度,而异步通信只要求每帧(字节)的传送中短时间保持同步即可,实现起来要容易得多。,MCS-51串行接口的结构,1.数据缓冲寄存器SBUF 两个SBUF,一个用于发送(只写);一个用于接收(只读)。映象地址均为99H。,2.数据发送与接收控制 发送控制器在波特率作用下,将发送SBUF中的数据由并到串,一位位地传输到发送端口;接收控制器在波特率作用下,将接收接收端口的数据由串到并,存入接收SBUF中。,MCS-51的串行接口,概述 有一个可编程全双工串行通信接口(UART) (Unive

4、rsal Asychronous Receiver/Transmitter ) 管脚:TXD(P3.1)、RXD(P3.0) 可同时发送、接收数据(Transmit/Receive) 有四种工作方式,帧格式有8、10、11位。 波特率(Baud rate)可设置 波特率:每秒钟传送二进制数码的位数,也叫比特数,单位为b/s,即位/秒。,MCS-51串行接口寄存器,SBUF串行口数据缓冲器 共两个:一个发送寄存器SBUF,一个接收SBUF,二者共用一个地址99H。 SCON串行口控制寄存器 PCON电源及波特率选择寄存器,控制寄存器SCON,串行方式的定义,例:设串行口工作在方式1,允许接收,则

5、指令为: MOV SCON,#01010000B,串行通信只用该位,为1时,波特率2;为0时不变。,87H,电源及波特率选择寄存器PCON,方式的选择由SM1、SM0实现。,串行口四种工作方式应用比较,在方式0下,串行口作同步移位寄存器用,其波特率固定为fosc/12。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式常用于扩展I/O口。,方式0用于扩展I/O口输出,方式0,方式0用于扩展I/O输出口原理,串行数据从RXD引脚输出,TXD引脚输出移位脉冲。CPU将数据写入发送寄存器SBUF时,立即启动发送,将8位数据以Fosc/12的固定波特率从RXD输出

6、,低位在前,高位在后。发送完一帧数据后,发送标志TI由硬件置位。 例:单片机串行口方式设为移位寄存器方式,外接6片74LS164作为6位LED显示器的静态显示接口 。,串口方式0应用,入口:把要显示的数分别放在显示缓冲区60H-65H共6个单元中,并且分别对应各个数码管LED0-LED5。 出口:将预置在显示缓冲区中的6个数成相应的显示字形码,然后输出到显示器中显示。,DISP: MOV SCON,#00H ;初始化串行口方式0 MOV R1,#06H ;显示6位数 MOV R0,#65H ;60H-65H为显示缓冲区 MOV DPTR, #SEGTAB ;字形表的入口地址 LOOP: MOV

7、 A, R0 ;取最高位的待显示数据 MOVC A, A+DPTR ;查表获取字形码 MOV SBUF,A ;送串口显示 DELAY: JNB TI, DELAY ;等待发送完毕 CLR TI ;清发送标志 DEC R0 ;指针下移一位,准备取下一个待显示数 DJNZ R1,LOOP ;直到6个数据全显示完。 RET SETTAB: ;字形表, DB 03H 9FH 27H 0DH 99H 49H 41H 1FH 01H 09H 0FFH,方式0用于扩展I/O口输入,方式0用于扩展I/O输入口原理,方式0用于扩展I/O输入口原理,输入:RXD为串行输入端,TXD仍为同步脉冲移位输出端。当(RI

8、)=0且(REN)=1时开始接受。当接受到第8位数据时,将数据亦如接收寄存器,并由硬件置位RI。 例:利用串行口扩展了1片74LS165,从而实现了8个按键的输入,在单片机的P1口连接了 8个LED发光二极管,程序中实现了用按键控制发光二极管的亮与灭。流程为8路开关-74165-3PIN数据线-8路指示灯。 由此可以看出通过165传输,只用了3条数据线, 就实现了8个开关控制8个灯的目的。 从而节约了控制的连线。,串口方式0扩展输入口应用,接线方法: 1 用一个4PIN数据排线一端插入CPU部分JP53(P3口)的P3.0,P3.1,P3.2,P3.3。另外一端插入74LS165部分的输入端J

9、P21。 2 用一根8PIN的数据排线, 一端插入74LS165部分的输出端JP28, 另一端插入8路按键开关的的JP48。 3 用一条8PIN的数据排线把CPU部份的P1口(JP44)连接到八路指示灯部份的JP32。运行后分别按k00-k07,可以看到d00-d07八个灯受控制,程序清单,org 00h loop : mov scon,#00010000b ; 设定 sm0sm1=00,mode0 clr p3.2 ; P3.2=0 载入数据 call delay1 ;延时 setb p3.2;P3.2=1 ;数据输出 clr ri ;RI=0 loop1:jbc ri,loop2 ;RI=

10、1?是则到LOOP2 jmp loop1 ; 否则继续监测 loop2:mov a,sbuf ;将SUBF载入ACC mov p1,a ;输出到P1 jmp loop ;重新开始,delay: mov r7,#00h ;延时子程序 tt: mov r6,#00h djnz r6,$ djnz r7,tt ret delay1: ;短延时子程序 mov r7,#02 djnz r7,$ ret end,1.方式0:移位寄存器方式,方式0时序,方式1,串行口为波特率可调的10位通用异步接口UART。每发送或接收的一帧信息中,包括1位起始位0,8位数据位和1位停止位1。,方式1时序 一帧数据为10位

11、:1位起始位、8位数据位和1位停止位。,方式1时序,方式2,1、 串行口为11位UART,传送波特率与SMOD有关。发送或接收的一帧数据中包括1位起始位0,8位数据位,1位可编程位(用于奇偶校验)和1位停止位1。,方式3,方式3为波特率可变的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。,MCS-51串行口的波特率,1.方式0和方式2的波特率是固定的,在方式0中,波特率为时钟频率的1/12,即fosc/12,固定不变,2. 方式1和方式3的波特率可变,由定时器1的溢出率决定,波特率=,方式0:波特率是固定的,为fosc/12 方式2:SMOD=1时为fosc/32,SMOD=

12、0时为fosc/64 方式1和方式3:波特率=2SMODT1溢出率/32 T1溢出率=fosc/3212(28N) ,N为定时器T1的计数初值 例:要求串行口以方式1工作,通信波特率为2400b/s,设振荡频率fosc为6MHz,请初始化T1和串口。 解:若选SMOD=1,则T1时间常数 N=256216106/(3842400)=242.98243=F3H 则,定时器T1和串行口的初始化程序如下: MOV TMOD,#20H ;设置T1为方式2 MOV TH1,#0F3H ;置时间常数 MOV TL1,#0F3H SETB TR1 ;启动T1 ORL PCON,#80H ;SMOD=1 MO

13、V SCON,#50H ;设串行口为方式1,设置通讯波特率,串行通信接口标准 1.RS-232C通信接口 接口信号:9针D型头,MCS-51系列单片机串行通信接口,电气特性: 逻辑“1”:3V15V;逻辑“0”:3V15V。 传输距离15米。 最大负载电容2500pF。 波特率20kb/s。 接受器输入阻抗:37k。 驱动器输出阻抗300。 驱动器转换速率30V/s。 输出短路电流0.5A。,RS232特性,电平转换 单片机电平是TTL电平,它与RS-232C电平不兼容,必须进行电平转换。电平转换的电路很多,MAX232是一种新型的专用集成电路,类似的集成电路还很多。,RS232电平转换芯片,

14、PC机COM口,接8051机11p(TXD) 10p(RXD),PC机和单片机串口通讯的硬件电路, RS-422A通信接口 接口信号:9针D型头 电气特性 电平转换 3.RS-485通信接口:将RS-422A的发送数据信号正端与接收数据信号正端连起来,发送数据信号负端与接收数据信号负端连起来就成为RS-485通信接口,MCS-51系列单片机串行通信接口,RS232、RS422、RS485对比,6.3 PC机与单片机通信,PC机是国内目前使用应用最广泛的微机,在与单片机串行接口后,可以方便地构成主从分布式多机系统。从机(单片机)作数据采集或实时控制,主机作数据处理或中央管理等。 这种多机系统在过

15、程控制、仪表生产、生产自动化和企业管理等方面都有广泛的应用。此外微机和单片机串行接口后,可以大大方便单片机的开发过程。,一、PC机串口资源及编程使用方法 PC机一般有COM1和COM2两个串口。,使用串口必须先初始化,有以下4个步骤。,例:设COM1的波特率为9600,则 outportb(0x3fb,0x80);/*写线路控制寄存器,访问波特率因子寄存器*/ outportb(0x3f8,0x0c);/*写入波特率因子低字节*/ outportb(0x3f9,0x00);/*写入波特率因子高字节*/, 设置波特率,PC机串口初始化, 设置数据格式 例:设数据为7位,1位起始位,1位停止位,偶

16、校验,则设置如下: outportb(0x3fb,0x1a); 设置操作方式 不允许中断: outportb(0x3fc,0x03); 允许中断: outportb(0x3fc,0x0b); 自测试工作方式,且不允许中断: outportb(0x3fc,0x13); 设置中断允许寄存器 开放中断语句: outportb(0x3f9,0x0f);,PC机串口初始化,例1 将PC机的COM1初始化为9600波特率、7位数据、偶校验、1位停止位、不中断,则初始程序如下: initcom1() outportb(0x3fb,0x80); /*写线路控制寄存器,访问波特率因子寄存器*/ outportb

17、(0x3f8,0x0c); /*写入波特率因子低字节*/ outportb(0x3f9,0x00); /*写入波特率因子高字节*/ outportb(0x3fb,0x1a); /*设数据为7位,1位起始 位,1位停止位,偶校验*/ outportb(0x3fc,0x03); /*不允许中断*/ ,PC机的发送、接收程序,例2 PC机从COM1发送一个字符,程序如下: send(char sendchar) int coms; do /*查询发送缓冲器是否空*/ coms=inportb(0x3fd)&0x20; while(coms!=0x20); outportb(0x3f8,sendcha

18、r); ,例3 PC机从COM1接收一个字符,程序如下: char receive() char coms,receivechar; waitok: /*查询接收数据是否有效*/ coms=inportb(0x3fd); if(coms&0x01)=0) goto waitok; receivechar= inportb(0x3f8); return receivechar; ,二、PC机与单片机双机通信 PC机与单片机构成主从式上下位计算机系统。 例:从PC机键盘上输入一个字符,然后将这个字符发送给单片机,单片机接收到这个字符后,不做任何处理,又将它发回给PC机,PC机将这个字符显示在屏幕上

19、。连接电路如下:,约定: 波特率:2400b/s 信息格式:8位数据,1位停止位 传送方式:PC机采用查询式收发数据,单片机采用中断式收发数据,由于PC机是RS-232C电平,单片机是TTL电平,用MAX232进行电平转换。,PC机与单片机通信设计, PC机的通信软件 #include “stdio.h” main() char c1,c2; int coms; outportb(0x3fb,0x80);/*初始化8250*/ outportb(0x3f8,0x30); outportb(0x3f9,0x00); outportb(0x3fb,0x03);/*8位数据,1位停止位*/ outp

20、ortb(0x3fc,0x03); c1=getchar();,PC机发送程序,do /*查询发送缓冲器是否空*/ coms=inportb(0x3fd)&0x20; while(coms!=0x20); outportb(0x3f8,c1); waitok: /*查询接收数据是否有效*/ coms=inportb(0x3fd); if(coms&0x01)=0) goto waitok; c2=inportb(0x3f8); printf(“The return char is:”); putchar(c2); ,MCS-51单片机通信软件,主程序,中断服务程序,主程序: ORG 0000H

21、 LJMP MAIN ORG 0023H LJMP SERVE MAIN: MOV TMOD,#20H ;初始化T1 MOV TH1,#0F3H MOV TL1,#0F3H MOV SCON,#50H ;串行口为方式1,REN=1 MOV PCON,#80H ;SMOD=1 SETB TR1 SETB EA SETB ES HERE: SJMP HERE,单片机接收程序,中断服务程序: SERVE: CLR EA ;中断服务程序 CLR RI PUSH PSW ;保护现场 SETB RS0 CLR RS1 PUSH ACC MOV A,SBUF ;接收PC机发来的字符 MOV SBUF,A ;

22、将字符回送给PC机 WAIT: JNB TI,WAIT ;等待发送完毕 CLR TI POP ACC ;恢复现场 POP PSW SETB EA RETI END,三、PC机与单片机通讯多机通信 多机通信的关键问题:识别单片机!给单片机编号。 怎样识别单片机?,从PC机和单片机帧格式可知:通过软件编程,使得PC机在发送地址(单片机编号)时,奇偶位为1,发送数据时为0;单片机接收时,TB8为1表示收到的地址,为0表示收到的数据。,PC机与单片机通讯多机通信,例:从PC机的键盘上输入单片机的编号,要求PC机与该单片机进行通信测试,从键盘上输入一个字符,发送给某单片机,单片机受到该字符后,又发回给P

23、C机,在屏幕上显示出来。 由于RS-232C不能实现多机通信,故采用RS-422标准。电路如下:,PC机与单片机的多级通信, PC机软件设计,多机通讯程序设计,程序清单: #include “stdio.h” main() char c1,c2,n1,n2; int coms; outportb(0x3fb,0x80); /*初始化8250*/ outportb(0x3f8,0x30); outportb(0x3f9,0x00); outportb(0x3fb,0x2b); /*8位数据,1位停止,奇偶校验位为1*/ outportb(0x3fc,0x03); /*PC机处于发送地址状态*/

24、outportb(0x3f9,0x00); /*禁止8250中断*/ printf(“Please input the number of MCS:n”); scanf(“%c”,&n1); do /*查询发送移位寄存器是否空*/ coms=inportb(0x3fd)&0x40; while(coms!=0x40); outportb(0x3f8,n1); /*PC机发送单片机地址编号*/ outportb(0x3fc,0x01); /*PC机处于接收状态*/ waitok1: /*查询单片机返回的编号是否有效*/ coms=inportb(0x3fd); if(coms&0x01)=0),

25、PC机端的程序,goto waitok1; n2=inportb(0x3f8); /*读入单片机返回的编号*/ if(n1!=n2) printf(“The number of MCS is error!n”); break; else outportb(0x3fc,0x03); /*PC机处于发送状态*/ outportb(0x3fb,0x3b); /* PC机处于发送数据状态*/ c1=getchar(); do /*查询发送移位寄存器是否空*/ coms=inportb(0x3fd)&0x40; while(coms!=0x40); outportb(0x3f8,c1); outport

26、b(0x3fc,0x01); /*PC机处于接收状态*/ waitok2: /*查询单片机返回的字符是否有效*/ coms=inportb(0x3fd); if(coms&0x01)=0) goto waitok2; c2=inportb(0x3f8); /*读入单片机返回的字符*/ printf(“The return char is:”); /*显示返回的字符*/ putchar(c2); , 单片机程序流程,单片机软件设计,3、程序清单: ORG 0000H LJMP MAIN ORG 0023H LJMP SERVE MAIN: MOV TMOD,#20H ;初始化T1 MOV TH1

27、,#0F3H MOV TL1,#0F3H MOV SCON,#0F0H ;串行口为方式3,REN=1 MOV PCON,#80H ;SMOD=1 SETB TR1 SETB EA SETB ES HERE: SJMP HERE SERVE:CLR EA PUSH ACC PUSH PSW CLR RS1 SETB RS0,MOV A,SBUF ;接收地址 XRL A,#01H ;与本机地址进行比较 JNZ RETURN ;与本机地址不符,则返回 CLR SM2 ;置单片机为接收数据状态 CLR RI MOV A,#01H MOV SBUF,A ;发送本机地址给PC机 JNB TI, ;等待发送

28、完毕 CLR TI JNB RI, ;等待PC机发来的字符接收完毕 MOV A,SBUF ;读入字符 CLR RI MOV SBUF,A JNB TI, ;等待发送完毕 CLR TI RETURN:POP PSW POP ACC SETB EA RETI END,本章要求: 了解通信、并行通信、串行通信、同步通信、异步通信、信息帧、波特率等概念; 了解MCS-51单片机串行口的结构; 掌握MCS-51单片机的4种工作方式及波特率的设置; 掌握4种方式下串行数据的收发过程; 了解RS232C、RS422A/485通信协议; 了解PC机串口资源及其使用方法; 掌握单片机与PC机进行双机和多机通信的电路及实现程序。,小结,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1