串行口及串行通信技术.ppt

上传人:牧羊曲112 文档编号:6219953 上传时间:2023-10-06 格式:PPT 页数:73 大小:1.29MB
返回 下载 相关 举报
串行口及串行通信技术.ppt_第1页
第1页 / 共73页
串行口及串行通信技术.ppt_第2页
第2页 / 共73页
串行口及串行通信技术.ppt_第3页
第3页 / 共73页
串行口及串行通信技术.ppt_第4页
第4页 / 共73页
串行口及串行通信技术.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

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

1、第7章 串行口及串行通信技术,串行通信基本知识89C51串口及其应用两个单片机之间的通信单片机与PC机之间的通信,什么是串行通信?,串行通信和并行通信,并行通信:数据的各位同时传送;,串行通信:数据一位一位顺序传送。,快、多(数据线)、近,慢、少、远,串行通信制式:单工(a)、半双工(b)和全双工(c)(simplex half duplex full duplex),异步通信,ASYNC(Asynchronous Data Communication):帧格式传送,信息量不大1个起始位,058个数据位奇偶校验位12个停止位,0,串行通信的分类:异步(Asynchronous Communic

2、ation)同步(Synchronous Communication),同步通信,SYNC(Synchronous Data Communication):严格同步,发送同步字符,数据连续,信息量大,速度较高按数据块传送把要传送的字符顺序连接起来数据块前有同步字符,后有检验字符,同步字符可由通信双方约定,也可采用ASCII码中规定的SYNC代码,即16H。,同步传送时,要求用时钟来实现发送端与接收端之间的同步。,波特率(Band rate),数据传送速率:每秒传送的二进制代码的位数。波特率反映了串行通信的速率,也反映了对于传输通道的要求。波特率越高,要求传输通道的频率越宽,一般异步通信的波特率

3、在50b/s19200b/s之间。相互通信的甲乙双方必须具有相同的波特率,否则无法成功地完成串行数据通信。,通信线上传送的所有位信号都保持一致的信号持续时间,每一位的信号持续时间都由数据传送速度确定。,举例,假如在1秒内,89C51串口把100个FFH的数据发送出去,问波特率是多少?假若每个字符是包含一个起始位、一个终止位和8个数据位。,根据串行通信的格式及约定(如:同步方式、通讯速率、数据块格式、信号电平等)不同,形成了多种串行通信的协议与接口标准。常见的有:通用异步收发器(UART)本课程介绍的串口通用串行总线(USB)I2C总线CAN总线SPI总线RS-485,RS-232C,RS422

4、A标准等等,串行通信的基本特征是数据逐位顺序进行传送。,串行口及串行通信技术,串行通信基本知识89C51串口及其应用两个单片机之间的通信单片机与PC机之间的通信,概述有一个可编程全双工异步串行通信接口(UART)(Universal Asynchronous Receiver/Transmitter)管脚:TXD(P3.1)、RXD(P3.0)可同时发送、接收数据(Transmit/Receive)有四种工作方式,帧格式有8、10、11位。波特率(Baud rate)可设置 波特率:每秒钟传送二进制数码的位数,也叫比特数,单位为b/s,即位/秒。,89C51的串行接口,图7-7,return,

5、串行口结构,引脚RXD(P3.0串行数据接收端)引脚TXD(P3.1串行数据发送端)MOV SBUF,A:发送数据到串口引脚 MOV A,SBUF:接收数据 RI:从串口上接收数据到SBUF RI=1 TI:数据从SBUF向外发送完 TI=1,MCS-51串行接口寄存器,SBUF串行口数据缓冲器SCON串行口控制寄存器PCON电源及波特率选择寄存器,控制寄存器SCON,SM2置1,多机通信,用于方式2和方式3D81,地址帧D80,数据帧SM2置0,不属于多机通信,串行方式的定义,例:设串行口工作在方式1,允许接收,则指令为:MOV SCON,#01010000B,串行通信只用该位,为1时,波特

6、率2;为0时不变。,电源及波特率选择寄存器PCON,87H,串行口四种工作方式应用比较,方式的选择由SM1、SM0实现。,波特率的设定可参见表7.2,实际无需计算。,表,方式0,在方式0下,串行口作同步移位寄存器用,其波特率固定为fosc/12。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式常用于扩展I/O口。,方式0用于扩展I/O口输出,方式0用于扩展I/O口输入,方式1,10位的帧格式,串行口为波特率可调的10位通用异步接口UART。每发送或接收的一帧信息中,包括1位起始位0,8位数据位和1位停止位1。,方式2,串行口为11位UART,传送波特率与

7、SMOD有关。发送或接收的一帧数据中包括1位起始位0,8位数据位,1位可编程位(用于奇偶校验)和1位停止位1。,11位的帧格式,方式3,方式3为波特率可变的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。,MCS-51串行口的波特率,1.方式0和方式2的波特率是固定的,在方式0中,波特率为时钟频率的1/12,即fosc/12,固定不变,图,2.方式1和方式3的波特率可变,由定时器1的溢出率决定,波特率=,return,RETURN,解决的方法只有调整单片机的时钟频率fosc,通常采用11.0592MHz晶振。,常用波特率及其产生条件,常用波特率通常按规范取1200、2400、4

8、800、9600、,若采用晶振12MHz和6MHz,则计算得出的T1定时初值将不是一个整数,产生波特率误差而影响串行通信的同步性能。,四种工作方式应用举例,串行口的应用,编程注意事项设置串行口工作方式设置波特率(SMOD,若是方式1、3,设置TI初值)若串行口接收数据,REN必须赋值为1TI和RI标志,须由软件清0第9位,串行口工作方式0,用于扩展I/O口,外接74HC164(串入并出)或165(并入串出)。RXD作为数据输入/输出端,TXD作为同步时钟信号,接至时钟端。8位数据为1帧,由低位到高位,无起始位和停止位。波特率:fosc/12,例,用89C51串行口外接CD4049或164串入-

9、并出移位寄存器扩展8位并行口;8位并行口的每位都接一个发光二极管,要求发光二极管从左到右以一定延迟轮流显示,并不断循环。设发光二极管为共阴极接法。如图所示。,解:设数据串行发送采用中断方式,显示延迟通过延迟程序DELAY来实现。程序清单:ORG 0000H LJMP MAINORG0023HAJMPSBRORG2000HMAIN:MOVSCON,#00H;串行口方式0初始化MOVA,#80H;最左一位发光二极管先亮CLRP1.0;关闭并行输出MOVSBUF,A;开始串行输出LOOP:SJMP$;等待中断SBR:SETBP1.0;启动并行输出ACALL DELAY;显示延迟一段时间CLRTI;清

10、发送中断标志RRA;准备右移一位显示CLR P1.0;关闭并行输出MOVSBUF,A;再一次串行输出RETI,串行口工作方式1,10位通用异步串行口UART(Universal Asynchronous Receiver/Transmitter),1位起始位、8位数据、1位停止位。波特率可调,由定时器T1的溢出率(定时时间)决定。当一帧数据接收完毕后,必须同时满足以下条件,这次接收才真正有效:REN=1RI=0,SBUF为空SM2=0或SM2=1时,收到停止位为1,收到的数据才能装到SBUF里。,串行口工作方式1,波特率(定时器T1的溢出速率),PCON.7波特率选择位,7位ASCII码+1位

11、奇偶校验位=8A中1的个数为奇数,P=1,如果最高位为为P的值,则A的1的个数编程偶数,因此,要把P的值取反以后放入ASCII码最高位,才是奇校验。设发送数据区的首地址为20H,接收首地址为40H,例 89C51串行口按双工方式收发ASCII字符,最高位用作奇校验,要求传送码率为1200b/s,fosc=11.059MHz。,奇偶校验位:数据位和奇偶位中1的个数偶校验:以上1的个数为偶数奇校验:以上1的个数为奇数,MOV TMOD,#20H;MOV TL1,#0E8H;MOV TH1,#0E8H;SETB TR1;MOV SCON,#50H;MOV R0,#20H;MOV R1,#40H;SE

12、TBES;SETBEA;LCALLSOUT;SJMP$;,T1为模式2时间常数,见表7-2重装时常启动T1串行口方式1,允许接收发送数据区首址接收数据区首址串行口开中断CPU开中断发送一个字符等待中断,表,ORG0000HLJMP MAINORG0050H,MAIN:,中断服务程序,ORG0023HLJMP SBR1ORG0100HPUSHACCPUSHPSWJNBRI,SENDLCALLSINSJMP NEXTLCALLSOUTPOPPSWPOPACCRETI,SBR1:SEND:NEXT:,发送子程序,CLRTIMOV A,R0MOV C,PCPLCMOV ACC.7,CMOV SBUF,

13、AINC R0RET,SOUT:,;若奇数个1,P1,;取要发送的数据,;A中的ASCII码为奇校验,;发送,;修改发送数据区指针,接收子程序,CLR RIMOV A,SBUFJNB P,ERANL A,#7FHMOV R1,AINC R1RET,SIN:,;若偶数个1,出错,;读接收到的数据,;数据存入接收区,;修改接收数据区指针,;若奇数个1,ACC.7清0,ER:,;处理出错程序,串行口工作方式2和方式3,每帧11位:1位起始位,9位数据(D8D0),1位停止位;第9位数据作为奇偶校验位或地址/数据标志位;发送时,第9位(D8)数据装入TB8;-串口自动完成MOV A,DATAMOV T

14、B8,CMOV SBUF,A接收时,第9位(D8)数据装入RB8;D0D7 SBUFD8RB8RI=1,多机通信,串行口工作方式2和方式3,方式2,波特率位fosc/32或fosc/64;方式3,波特率可调,同方式1。,用第9个数据位作奇偶校验位,编制串行口方式2的发送程序。例:设计一个发送程序,将片内RAM 50H5FH中的数据串行发送;串行口设定为方式2状态,TB8作奇偶校验位,采用偶校验。,程序清单,TRT:MOV SCON,#80H;方式2设定 MOV PCON,#80H;波特率=fosc/32 MOV R0,#50H;首地址R0 MOV R7,#10H;数据长度LOOP:MOV A,

15、R0;取数据 MOV C,PSW.0;PTB8 MOV TB8,C MOV SBUF,A;数据SBUF,启动发送WAIT:JBC TI,CONT;判断发送中断标志 SJMP WAITCONT:INC R0 DJNZ R7,LOOP RET,串行口及串行通信技术,串行通信基本知识89C51串口及其应用两个单片机之间的通信单片机与PC机之间的通信,两个单片机之间的通信,通信协议:帧格式、校验方式等 波特率,双机通信软件编程,查询方式 1)甲机发送 编程将甲机片外1000H101FH单元的数据块从串行口输出。定义方式2发送,TB8为奇偶校验位。发送波特率375 kb/s,晶振为12 MHz,SMOD

16、=1。,参考发送子程序如下:MOV SCON,#80H;设置串行口为方式2 MOV PCON,#80H;SMOD=1 MOV DPTR,#1000H;设数据块指针 MOV R7,#20H;设数据块长度 START:MOVX A,DPTR;取数据给A MOV C,P MOV TB8,C;奇偶位P送给TB8 MOV SBUF,A;数据送SBUF,启动发送 WAIT:JBC TI,CONT;判断一帧是否发送完。若送完,清TI,取下一个数据 AJMP WAIT;未完等待 CONT:INC DPTR;更新数据单元 DJNZ R7,START;循环发送至结束 RET,2)乙机接收 编程使乙机接收甲机发送过

17、来的数据块,并存入片内50H6FH单元。接收过程要求判断RB8,若出错置F0标志为1,正确则置F0标志为0,然后返回。在进行双机通信时,两机应采用相同的工作方式和波特率。,参考接收子程序如下:MOV SCON,#80H;设置串行口为方式2 MOV PCON,#80H;SMOD=1MOV R0,#50H;设置数据块指针MOV R7,#20H;设置数据块长度SETB REN;启动接收WAIT:JBC RI,READ;判断是否接收完一帧。若完,清RI,读入数据AJMP WAIT;未完等待READ:MOV A,SBUF;读入一帧数据aJNB PSW.0,PZ;奇偶位为0则转JNB RB8,ERR;P=

18、1,RB8=0,则出错 SJMP RIGHT;二者全为1,则正确 PZ:JB RB8,ERR;P=0,RB8=1,则出错RIGHT:MOV R0,A;正确,存放数据INC R0;更新地址指针DJNZ R7,WAIT;判断数据块是否接收完CLR PSW.5;接收正确,且接收完清F0标志RET;返回 ERR:SETB PSW.5;出错,置F0标志为1RET;返回,7.3 多个89C51通信,多机通信步骤:主机SM20,所有从机的SM21,以便接收主机发来的地址。主机发送地址,其中D81。所有从机接收主机发来的地址,进入中断服务程序,并和本机地址比较,确认是否是被寻址从机。被寻址从机清除SM2,以便

19、接收数据,并向主机发回从机地址,供主机核对。其他从机保持SM21,并退出中断服务程序。数据通信完毕,被寻址从机SM21,退出中断服务程序,等待下次通信。,串行口及串行通信技术,串行通信基本知识89C51串口及其应用两个单片机之间的通信单片机与PC机之间的通信,PC机与单片机通信,PC机是国内目前使用应用最广泛的微机,在与单片机串行接口后,可以方便地构成主从分布式多机系统。从机(单片机)作数据采集或实时控制,主机作数据处理或中央管理等。这种多机系统在过程控制、仪表生产、生产自动化和企业管理等方面都有广泛的应用。此外微机和单片机串行接口后,可以大大方便单片机的开发过程。,7.4 89C51与PC机

20、通信,电气规范不一致,TTL与RS232电平转换,1488、1489,89C51,采用MAX232芯片接口的PC机与89C51单片机串行通信接口电路,只需单一的+5V电源即可,Tin、Rout-接单片机Rin、Tout-接PC机 Tin、Tout成对使用 Rin、Rout成对使用 T、R是针对单片机的动作命名的,PC机一般使用通用异步接收器/发送器(8250)或16c550/作为串行通讯的控制器,使用9针或25针的接插件将串行口的信号送出。,一、PC机串口资源及编程使用方法 PC机一般有COM1和COM2两个串口。,8250系列寄存器的定义:,使用串口必须先初始化,有以下4个步骤,例:设COM

21、1的波特率为9600,则outportb(0 x3fb,0 x80);/*写线路控制寄存器,访问波特率因子寄存器*/outportb(0 x3f8,0 x0c);/*写入波特率因子低字节*/outportb(0 x3f9,0 x00);/*写入波特率因子高字节*/,设置波特率,PC机串口初始化,设置数据格式 例:设数据为7位,1位起始位,1位停止位,偶校验,则设置如下:outportb(0 x3fb,0 x1a);设置操作方式不允许中断:outportb(0 x3fc,0 x03);允许中断:outportb(0 x3fc,0 x0b);自测试工作方式,且不允许中断:outportb(0 x3

22、fc,0 x13);设置中断允许寄存器开放中断语句:outportb(0 x3f9,0 x0f);,PC机串口初始化,例1 将PC机的COM1初始化为9600波特率、7位数据、偶校验、1位停止位、不中断,则初始程序如下:initcom1()outportb(0 x3fb,0 x80);/*写线路控制寄存器,访问波特率因子寄存器*/outportb(0 x3f8,0 x0c);/*写入波特率因子低字节*/outportb(0 x3f9,0 x00);/*写入波特率因子高字节*/outportb(0 x3fb,0 x1a);/*设数据为7位,1位起始 位,1位停止位,偶校验*/outportb(0

23、 x3fc,0 x03);/*不允许中断*/,PC机的发送、接收程序,例2 PC机从COM1发送一个字符,程序如下:send(char sendchar)Int coms;do/*查询发送缓冲器是否空*/coms=inportb(0 x3fd);while(coms!=0 x20);查询等待com1的线路状态寄存器(LSR)的第五位的状态是否为1,即发送保持寄存器是否为空?outportb(0 x3f8,sendchar);,例3 PC机从COM1接收一个字符,程序如下:char receive()char coms,receivechar;waitok:/*查询接收数据是否有效*/coms=

24、inportb(0 x3fd);if(coms&0 x01)=0)goto waitok;receivechar=inportb(0 x3f8);return receivechar;,二、PC机与单片机双机通信 PC机与单片机构成主从式上下位计算机系统。例:从PC机键盘上输入一个字符,然后将这个字符发送给单片机,单片机接收到这个字符后,不做任何处理,又将它发回给PC机,PC机将这个字符显示在屏幕上。连接电路如下:,约定:波特率:2400b/s信息格式:8位数据,1位停止位传送方式:PC机采用查询式收发数据,单片机采用中断式收发数据,由于PC机是RS-232C电平,单片机是TTL电平,用MAX

25、232进行电平转换。,PC机与单片机通信设计,PC机的通信软件#include“stdio.h”main()char c1,c2;int coms;outportb(0 x3fb,0 x80);/*初始化8250*/outportb(0 x3f8,0 x30);outportb(0 x3f9,0 x00);outportb(0 x3fb,0 x03);/*8位数据,1位停止位*/outportb(0 x3fc,0 x03);c1=getchar();,PC机发送程序,MCS-51单片机通信软件,主程序,中断服务程序,主程序:ORG0000HLJMPMAINORG0023HLJMPSERVEMA

26、IN:MOVTMOD,#20H;初始化T1MOVTH1,#0F3HMOVTL1,#0F3HMOVSCON,#50H;串行口为方式1,REN=1MOVPCON,#80H;SMOD=1SETBTR1SETBEASETBESHERE:SJMPHERE,单片机接收程序,中断服务程序:SERVE:CLREA;中断服务程序CLRRIPUSHPSW;保护现场PUSHACCMOVA,SBUF;接收PC机发来的字符MOVSBUF,A;将字符回送给PC机WAIT:JNBTI,WAIT;等待发送完毕CLRTIPOPACC;恢复现场POPPSWSETBEARETIEND,三、PC机与单片机通讯多机通信多机通信的关键问

27、题:识别单片机!给单片机编号。怎样识别单片机?,从PC机和单片机帧格式可知:通过软件编程,使得PC机在发送地址(单片机编号)时,奇偶位为1,发送数据时为0;单片机接收时,TB8为1表示收到的地址,为0表示收到的数据。,PC机与单片机通讯多机通信,例:从PC机的键盘上输入单片机的编号,要求PC机与该单片机进行通信测试,从键盘上输入一个字符,发送给某单片机,单片机受到该字符后,又发回给PC机,在屏幕上显示出来。由于RS-232C不能实现多机通信,故采用RS-422标准。电路如下:,PC机与单片机的多机通信,图中75174是长线发送器,它将单端输入信号变成差动输出信号,并增强驱动能力。75175是长

28、线接收器,它将差动输入信号变成单端输出信号。,什么是差分信号?一个差分信号是用一个数值来表示两个物理量之间的差异。一个差分信号作用在两个导体上,信号值是两个导体间的电压差。采用差分信号有什么好处?因为你在控制基准电压,所以能够很容易地识别小信号。它对外部电磁干扰(EMI)是高度免疫的。在一个单电源系统,能够从容精确地处理双极信号,多机通讯程序设计,程序清单:#include“stdio.h”main()char c1,c2,n1,n2;int coms;outportb(0 x3fb,0 x80);/*初始化8250*/outportb(0 x3f8,0 x30);outportb(0 x3f

29、9,0 x00);outportb(0 x3fb,0 x2b);/*8位数据,1位停止,奇偶校验位为1*/outportb(0 x3fc,0 x03);/*PC机处于发送地址状态*/outportb(0 x3f9,0 x00);/*禁止8250中断*/printf(“Please input the number of MCS:n”);scanf(“%c”,&n1);do/*查询发送移位寄存器是否空*/coms=inportb(0 x3fd)&0 x40;while(coms!=0 x40);outportb(0 x3f8,n1);/*PC机发送单片机地址编号*/outportb(0 x3fc

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

31、否空*/coms=inportb(0 x3fd)&0 x40;while(coms!=0 x40);outportb(0 x3f8,c1);outportb(0 x3fc,0 x01);/*PC机处于接收状态*/waitok2:/*查询单片机返回的字符是否有效*/coms=inportb(0 x3fd);if(coms&0 x01)=0)goto waitok2;c2=inportb(0 x3f8);/*读入单片机返回的字符*/printf(“The return char is:”);/*显示返回的字符*/putchar(c2);,单片机程序流程,单片机软件设计,3、程序清单:ORG0000

32、HLJMPMAINORG0023HLJMPSERVEMAIN:MOVTMOD,#20H;初始化T1MOVTH1,#0F3HMOVTL1,#0F3HMOVSCON,#0F0H;串行口为方式3,REN=1MOVPCON,#80H;SMOD=1SETBTR1SETBEASETBESHERE:SJMPHERESERVE:CLREAPUSHACCPUSHPSWCLRRS1SETBRS0,MOVA,SBUF;接收地址XRLA,#01H;与本机地址进行比较JNZRETURN;与本机地址不符,则返回CLRSM2;置单片机为接收数据状态CLRRIMOVA,#01HMOVSBUF,A;发送本机地址给PC机JNBTI,;等待发送完毕CLRTIJNBRI,;等待PC机发来的字符接收完毕MOVA,SBUF;读入字符CLRRIMOVSBUF,AJNBTI,;等待发送完毕CLRTIRETURN:POPPSWPOPACCSETBEARETIEND,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号