资源描述
Copyright,2006,1,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Copyright,2006,单击此处编辑母版文本样式,第二级,第三级,2,基本概念:,串行通信和并行通信,MCS-51系列单片机串行通信,计算机1,GND,计算机2,GND,并行通信,计算机1,GND,计算机2,GND,发送,接收,串行通信,并行通信:数据的各位,同时,传送;,串行通信:数据,一位一位,顺序传送。,基本概念:MCS-51系列单片机串行通信并行通信发送接收串,1,串行、并行通信各自特点,并行/串行:并行方式可一次同时传送N位数据,而串行方式一次只能传送一位;但并行传送的线路复杂(需要N根数据线),串行传送的线路简单(只需要12根数据线);并行方式常用于短距离通信,串行方式则多用于长距离通信。,串行传送主要用于计算机与远程终端之间的数据传送,也很适合于经由公共电话网连接的计算机之间的通信。另外在某些场合,串行接口也可代替并行接口来控制外设,以节省软硬件资源,简化线路。,串行、并行通信各自特点 并行/串行:并行方式可一次同,2,串行通信的分类:,异步,(Asynchronous Communication),同步,(Synchronous Communication),串行通信制式:,单工(a),、,半双工(b),和,全双工(c),(simplex half duplex full duplex),发送器,A站,接收器,B站,单工通信,(,a,),发,收,A站,发,收,B站,发,收,A站,发,收,B站,(,b,),(,c,),串行通信的分类:异步(Asynchronous Commun,3,同步、异步数据通信格式,数据,数据,数据,数据,数据,同步字符,同步字符1,同步字符2,图6.1 同步传送的数据格式,1,1,0,0/1,0/1,0/1,0/1,0/1,0/1,0/1,0/1,0/1,1,1,1,起始位,停止位,奇偶校验,8位数据,空闲位,空闲位,第n个字符,1,0,0/1,0/1,起始位,第n+1个字符,0/1,0/1,图6.2 异步通信数据帧格式,同步、异步数据通信格式数据数据数据数据数据同步字符同,4,同步通讯异步通信的概念,同步和异步都属于串行数据传送方式,但二者的传送格式有所不同。同步方式的一帧内含有很多数据位,而异步方式一帧内只含有几个数据位。如果要传送一大堆数据,同步方式只给这串数据进行一次外包装(即添加“头帧”、“尾帧”、“校验”帧),而异步方式在传送这串数据时则要对数据的每一个字节分别加以包装(即添加“头”位、“尾”位和校验)。,显然在相同的数据传输波特率下,同步方式比异步方式的传送速度快,但同步方式要求收发双方在整个事件传送过程中始终保持严格同步,这将增加硬件上的难度,而异步通信只要求每帧(字节)的传送中短时间保持同步即可,实现起来要容易得多。,同步通讯异步通信的概念 同步和异步都属于串行数据传送,5,MCS-51串行接口的结构,SBUF,SBUF,发送控制,接收控制,发 送,端 口,接 收,端 口,1,波特率控制,TXD,RXD,DB,DB,TI,RI,串行中断,写SBUF,读SBUF,1.数据缓冲寄存器SBUF,两个SBUF,一个用于发送(只写);一个用于接收(只读)。映象地址均为99H。,2.数据发送与接收控制,发送控制器在波特率作用下,将发送SBUF中的数据由并到串,一位位地传输到发送端口;接收控制器在波特率作用下,将接收接收端口的数据由串到并,存入接收SBUF中。,MCS-51串行接口的结构SBUFSBUF发送控制接收控制发,6,MCS-51的串行接口,概述,有一个可编程全双工串行通信接口(UART),(Universal Asychronous Receiver/Transmitter,),管脚:TXD(P3.1)、RXD(P3.0),可同时发送、接收数据(,Transmit/Receive),有四种工作方式,帧格式有8、10、11位。,波特率(Baud rate)可设置,波特率:每秒钟传送二进制数码的位数,也叫比特数,单位为b/s,即位/秒。,MCS-51的串行接口概述,7,MCS-51串行接口寄存器,SBUF串行口数据缓冲器,共两个:一个发送寄存器SBUF,一个接收SBUF,二者共用一个地址99H。,SCON串行口控制寄存器,PCON电源及波特率选择寄存器,MCS-51串行接口寄存器SBUF串行口数据缓冲器,8,控制寄存器,SCON,SM0,SM1,SM2,REN,TB8,RB8,TI,RI,工作方式选择,多机通信控制位,允许串行接收位,接收数据的第9位,发送数据的第9位,接收中断标志,发送中断标志,9FH,9EH,9DH,9CH,9BH,9AH,99H,98H,控制寄存器SCONSM0SM1SM2RENTB8RB8TIR,9,SM0 SM1,工作方式,功能,波特率,0 0,方式0,8位同步移位寄存器,f,osc,/12,0 1,方式1,10位UART,可变,1 0,方式2,11位UART,f,osc,/64或f,osc,/32,1 1,方式3,11位UART,可变,串行方式的定义,例:设串行口工作在方式1,允许接收,则指令为:,MOV SCON,#01010000B,SM0 SM1工作方式功能波特率0 0方式08位同,10,串行通信只用该位,为1时,波特率2;为0时不变。,SMOD,GF1,GF0,PD,IDL,87H,电源及波特率选择寄存器PCON,串行通信只用该位,为1时,波特率2;为0时不变。SMOD,11,方式的选择由SM1、SM0实现。,工作方式,功能,说明,波特率,方式0,8位同步移位寄存器,常用于扩展I/O口,fosc/12,方式1,10位UART,8位数据、起始位、结束位,可变(取决于定时器1溢出率),方式2,11位UART,8位数据、起始位0、结束位1,和奇偶校验位,fosc/64或,fosc/32,方式3,11位UART,数据、起始、校验、结束位,可变(取决于定时器1溢出率),串行口四种工作方式应用比较,方式的选择由SM1、SM0实现。工作方式功能说明波特率方式0,12,在方式0下,串行口作同步移位寄存器用,其波特率固定为f,osc,/12。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式常用于扩展I/O口。,方式,0,用于扩展I/O口输出,方式0,在方式0下,串行口作同步移位寄存器用,其波特率固定为,13,方式0用于扩展I/O输出口原理,串行数据从RXD引脚输出,TXD引脚输出移位脉冲。CPU将数据写入发送寄存器SBUF时,立即启动发送,将8位数据以Fosc/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送标志TI由硬件置位。,例:单片机串行口方式设为移位寄存器方式,外接6片74LS164作为6位LED显示器的静态显示接口。,方式0用于扩展I/O输出口原理 串行数据从R,14,串口方式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 A,R0 ;取最高位的待显示数据,MOVC A,A+DPTR;查表获取字形码,MOVSBUF,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应用入口:把要显示的数分别放在显示缓冲区60H-6,15,方式,0,用于扩展I/O口输入,方式0用于扩展I/O输入口原理,方式0用于扩展I/O口输入方式0用于扩展I/O输入口原理,16,方式0用于扩展I/O输入口原理,输入:RXD为串行输入端,TXD仍为同步脉冲移位输出端。当(RI)=0且(REN)=1时开始接受。当接受到第8位数据时,将数据亦如接收寄存器,并由硬件置位RI。,例:利用串行口扩展了1片74LS165,从而实现了8个按键的输入,在单片机的P1口连接了 8个LED发光二极管,程序中实现了用按键控制发光二极管的亮与灭。流程为8路开关-74165-3PIN数据线-8路指示灯。由此可以看出通过165传输,只用了3条数据线,就实现了8个开关控制8个灯的目的。从而节约了控制的连线。,方式0用于扩展I/O输入口原理输入:RXD为串行输入端,TX,17,串口方式0扩展输入口应用,接线方法:,1 用一个4PIN数据排线一端插入CPU部分JP53(P3口)的P3.0,P3.1,P3.2,P3.3。另外一端插入74LS165部分的输入端JP21。,2 用一根8PIN的数据排线,一端插入74LS165部分的输出端JP28,另一端插入8路按键开关的的JP48。,3 用一条8PIN的数据排线把CPU部份的P1口(JP44)连接到八路指示灯部份的JP32。运行后分别按k00-k07,可以看到d00-d07八个灯受控制,串口方式0扩展输入口应用接线方法:,18,程序清单,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=1?是则到LOOP2,jmp loop1 ;否则继续监测,loop2:mov a,sbuf ;将SUBF载入ACC,mov p1,a ;输出到P1,jmp loop ;重新开始,程序清单org 00h,19,delay:,movr7,#00h;延时子程序,tt:movr6,#00h,djnzr6,$,djnzr7,tt,ret,delay1:;短延时子程序,mov r7,#02,djnz r7,$,ret,end,delay:,20,1.方式0:移位寄存器方式,写SBUF,内部移出脉冲,RXD(数据输出),TXD(移位时钟),TI,D0,D1,D2,D3,D4,D5,D6,D7,方式0发送时序,写SCON,清RI,置REN,内部移出脉冲,RI,RXD(数据输入),TXD(移位时钟),D0,D1,D2,D3,D4,D5,D6,D7,方式0接收时序,方式0时序,1.方式0:移位寄存器方式写SBUF内部移出脉冲RXD(数据,21,方式1,串行口为波特率可调的10位通用异步接口UART。每发送或接收的一帧信息中,包括1位起始位0,8位数据位和1位停止位1。,方式1串行口为波特率可调的10位通用异步接口UART。每发送,22,方式1时序,一帧数据为10位:1位起始位、8位数据位和1位停止位。,写SBUF,TXD,起始位,停止位,TI,D0,D1,D2,D3,D4,D5,D6,D7,方式1发送时序:,起始位,停止位,RXD,RI,采样时间,D0,D1,D2,D3,D4,D5,D6,D7,方式1接收时序:,方式1时序,方式1时序写SBUFTXD起始位停止位TID0D1D2D3D,23,方式2,1、串行口为11位UART,传送波特率与SMOD有关。发送或接收的一帧数据中包括1位起始位0,8位数据位,1位可编程位(用于奇偶校验)和1位停止位1。,方式21、串行口为11位UART,传送波特率与SMOD有,24,方式3,方式3为波特率可变的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。,方式3 方式3为波特率可变的11位UART通信方式,除,25,MCS-51串行口的波特率,1.方式0和方式2的波特率是固定的,在方式2中,波特率取决于PCON中的SMOD值:,当SMOD=0时,波特率为f,osc,/64;,当SMOD=1时,波特率为f,osc,/32.即波特率=。,osc,SMOD,f,64,2,在方式0中,波特率为时钟频率的1/12,即f,osc,/12,固定不变,MCS-51串行口的波特率1.方式0和方式2的波特率是固定的,26,2.方式1和方式3的波特率可变,由定时器1的溢出率决定,波特率/(b/s),f,osc,/MHz,SMOD,定时器1,C/,模式,初始值,方式0:1 M,方式2:375 k,方式1、3:62.5 k,19.2 k,9.6 k,4.8 k,2.4 k,1.2 k,137.5 k,110,110,12,12,12,11.059,11.059,11.059,11.059,11.059,11.986,6,12,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,1,FFH,FDH,FDH,FAH,F4H,E8H,1DH,72H,FEEBH,T,波特率=,2.方式1和方式3的波特率可变,由定时器1的溢出率决定波特,27,方式0:波特率是固定的,为fosc/12,方式2:SMOD=1时为fosc/32,SMOD=0时为fosc/64,方式1和方式3:波特率=2,SMOD,T1溢出率/32,T1溢出率=fosc/32,12(28N),N为定时器T1的计数初值,例:要求串行口以方式1工作,通信波特率为2400b/s,设振荡频率fosc为6MHz,请初始化T1和串口。,解:若选SMOD=1,则T1时间常数,N=25621,6,106/(384,2400)=242.98243=F3H,则,定时器T1和串行口的初始化程序如下:,MOVTMOD,#20H;设置T1为方式2,MOVTH1,#0F3H;置时间常数,MOVTL1,#0F3H,SETBTR1;启动T1,ORLPCON,#80H;SMOD=1,MOVSCON,#50H;设串行口为方式1,设置通讯波特率,方式0:波特率是固定的,为fosc/12设置通讯波特率,28,串行通信接口标准,1.RS-232C通信接口,接口信号:9针D型头,1,5,6,9,载波检测DCD,接收数据RXD,发送数据TXD,数据终端就绪,信号地GND,数据装置就绪,请求发送RTS,清除发送CTS,振铃指示,MCS-51系列单片机串行通信接口,串行通信接口标准1569载波检测DCD接收数据RXD发送数据,29,电气特性:,逻辑“1”:3V15V;逻辑“0”:3V15V。,传输距离15米。,最大负载电容2500pF。,波特率20kb/s。,接受器输入阻抗:37k。,驱动器输出阻抗300。,驱动器转换速率30V/s。,输出短路电流0.5A。,RS232特性,电气特性:RS232特性,30,电平转换,单片机电平是TTL电平,它与RS-232C电平不兼容,必须进行电平转换。电平转换的电路很多,MAX232是一种新型的专用集成电路,类似的集成电路还很多。,C,1+,C,1-,C,2+,C,2-,V,CC,V,+,V,-,电压倍增器,+5V+10V,电压反向器,+10V-10V,1,1,1,1,+5V,T,1OUT,T,2OUT,R,1OUT,R,2OUT,T,1IN,T,2IN,R,1IN,R,2IN,C,1,C,2,C,3,C,4,TTL/CMOS,输入,TTL/CMOS,输出,RS-232C,输出,RS-232C,输入,MAX,232,C,2-,V,-,C,1+,V,+,C,1-,C,2+,T,2OUT,R,2IN,R,2OUT,T,2IN,T,1IN,R,1OUT,R,1IN,T,1OUT,V,CC,GND,1,2,3,4,5,6,7,8,9,10,16,15,14,13,12,11,RS232电平转换芯片,电平转换 C1+C1-C2+C2-VCCV+V-电压倍增器电,31,PC机COM口,接8051机11p(TXD),10p(RXD),PC机和单片机串口通讯的硬件电路,PC机COM口接8051机11p(TXD)PC机和单片机串口,32,RS-422A通信接口,接口信号:9针D型头,电气特性,电平转换,3.RS-485通信接口:将RS-422A的发送数据信号正端与接收数据信号正端连起来,发送数据信号负端与接收数据信号负端连起来就成为RS-485通信接口,1,5,6,9,发送数据负TX,发送数据正TX+,接收数据正RX+,接收数据负RX,信号地GND,请求发送负RTS,清除发送正CTS+,请求发送负RTS,+,清除发送负CTS,MCS-51系列单片机串行通信接口,RS-422A通信接口1569发送数据负TX发送数据正,33,接 口,性 能,RS-232C,RS-422A,RS-485,功能,双向,全双工,双向,全双工,双向,半双工,传输方式,单端,差分,差分,逻辑“0”电平,3V15V,2V6V,1.5V6V,逻辑“1”电平,3V15V,2V6V,1.5V6V,最大速率,20kb/s,10Mb/s,10Mb/s,最大距离,30m,1200m,1200m,驱动器加载输出电压,5,V,15V,2V,1.5V,接受器输入敏感度,3V,0.2V,0.2V,接收器输入阻抗,3,7K,4K,7K,组态方式,点对点,1台驱动器:10台接收器,32台驱动器:32台接收器,抗干扰能力,弱,强,强,传输介质,扁平或多芯电缆,二对双绞线,一对双绞线,RS232、RS422、RS485对比,接 口RS-232CRS-422ARS-485功能双向,全,34,6.3 PC机与单片机通信,PC机是国内目前使用应用最广泛的微机,在与单片机串行接口后,可以方便地构成主从分布式多机系统。从机(单片机)作数据采集或实时控制,主机作数据处理或中央管理等。,这种多机系统在过程控制、仪表生产、生产自动化和企业管理等方面都有广泛的应用。此外微机和单片机串行接口后,可以大大方便单片机的开发过程。,6.3 PC机与单片机通信 PC机是国内目前使,35,一、PC机串口资源及编程使用方法,PC机一般有COM1和COM2两个串口。,寄存器名称,端口地址,复位后初始值,COM1,COM2,发送器保持寄存器(TBR),3F8H,2F8H,XXXXXXXXB,接收器数据寄存器(RBR),3F8H,2F8H,XXXXXXXXB,波特绿因子低位寄存器(DLL),3F8H,2F8H,00000000B,波特绿因子高位寄存器(DLH),3F9H,2F9H,00000001B,中断允许寄存器(IER),3F9H,2F9H,00000000B,中断标识寄存器(IIR),3FAH,2FAH,00000000B,线路控制寄存器(LCR),3FBH,2FBH,01100000B,调制解调器控制寄存器(MCR),3FCH,2FCH,XXXX0000B,线路状态寄存器(LSR),3FDH,2FDH,XXXXXXXXB,调制解调器状态寄存器(MSR),3FEH,2FEH,XXXXXXXXB,一、PC机串口资源及编程使用方法 寄存器名称端口地址复位后初,36,使用串口必须先初始化,有以下4个步骤。,DLH,DLL,波特率,DLH,DLL,波特率,DLH,DLL,波特率,09H,00H,50,00H,C0H,600,00H,18H,4800,06H,00H,75,00H,60H,1200,00H,10H,7200,04H,17H,110,00H,40H,1800,00H,0CH,9600,03H,59H,134.5,00H,3AH,2000,00H,06H,19200,03H,00H,150,00H,30H,2400,00H,03H,38400,01H,80H,300,00H,20H,3600,00H,01H,115200,例:设COM1的波特率为9600,则,outportb(0 x3fb,0 x80);/*写线路控制寄存器,访问波特率因子寄存器*/,outportb(0 x3f8,0 x0c);/*写入波特率因子低字节*/,outportb(0 x3f9,0 x00);/*写入波特率因子高字节*/,设置波特率,PC机串口初始化,使用串口必须先初始化,有以下4个步骤。DLHDLL波特率DL,37,设置数据格式,例:设数据为7位,1位起始位,1位停止位,偶校验,则设置如下:,outportb(0 x3fb,0 x1a);,设置操作方式,不允许中断:,outportb(0 x3fc,0 x03);,允许中断:,outportb(0 x3fc,0 x0b);,自测试工作方式,且不允许中断:,outportb(0 x3fc,0 x13);,设置中断允许寄存器,开放中断语句:,outportb(0 x3f9,0 x0f);,PC机串口初始化,设置数据格式 PC机串口初始化,38,例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 x3fc,0 x03);,/*,不允许中断,*/,PC机的发送、接收程序,PC机的发送、接收程序,39,例2 PC机从COM1发送一个字符,程序如下:,send(char sendchar),int coms;,do/*查询发送缓冲器是否空*/,coms=inportb(0 x3fd)&0 x20;,while(coms!=0 x20);,outportb(0 x3f8,sendchar);,例2 PC机从COM1发送一个字符,程序如下:,40,例3 PC机从COM1接收一个字符,程序如下:,char receive(),char coms,receivechar;,waitok:/*查询接收数据是否有效*/,coms=inportb(0 x3fd);,if(coms&0 x01)=0),goto waitok;,receivechar=inportb(0 x3f8);,return receivechar;,例3 PC机从COM1接收一个字符,程序如下:,41,二、PC机与单片机双机通信,PC机与单片机构成主从式上下位计算机系统。,例:从PC机键盘上输入一个字符,然后将这个字符发送给单片机,单片机接收到这个字符后,不做任何处理,又将它发回给PC机,PC机将这个字符显示在屏幕上。连接电路如下:,PC机,RXD,TXD,MAX232,T1,OUT,R1,IN,T1,IN(,R1,OUT,RXD,TXD,MCS-51,约定:,波特率:2400b/s,信息格式:8位数据,1位停止位,传送方式:PC机采用查询式收发数据,单片机采用中断式收发数据,由于PC机是RS-232C电平,单片机是TTL电平,用MAX232进行电平转换。,PC机与单片机通信设计,二、PC机与单片机双机通信 PC机RXDTXDMAX232T,42,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();,开 始,初始化8250,有键输入吗?,取键盘字符,发送寄存器空否?,向单片机发送字符,接收单片机发回的字符,接收的数据有效码?,显示发回的字符,N,N,N,Y,Y,Y,结 束,PC机发送程序,PC机的通信软件 开 始初始化8250有键输入吗?取键,43,do,/*查询发送缓冲器是否空*/,coms=inportb(0 x3fd)&0 x20;,while(coms!=0 x20);,outportb(0 x3f8,c1);,waitok:,/*查询接收数据是否有效*/,coms=inportb(0 x3fd);,if(coms&0 x01)=0),goto waitok;,c2=inportb(0 x3f8);,printf(“The return char is:”);,putchar(c2);,do/*查询发送缓冲器是否空*/,44,开 始,初始化定时器T1,初始化串行口,启动定时器T1,开放中断,主程序踏步,中断服务程序,关中断,清接收中断标志RI,保护现场,接收PC机发来的字符,将字符发送回PC机,开中断,恢复现场,中断返回,MCS-51单片机通信软件,主程序,中断服务程序,开 始初始化定时器T1初始化串行口启动定时器T1开放中断主,45,主程序:,ORG0000H,LJMPMAIN,ORG0023H,LJMPSERVE,MAIN:,MOVTMOD,#20H ;初始化T1,MOVTH1,#0F3H,MOVTL1,#0F3H,MOVSCON,#50H;串行口为方式1,REN=1,MOVPCON,#80H;SMOD=1,SETBTR1,SETBEA,SETBES,HERE:,SJMPHERE,单片机接收程序,主程序:单片机接收程序,46,中断服务程序:,SERVE:CLREA;中断服务程序,CLRRI,PUSHPSW;保护现场,SETBRS0,CLRRS1,PUSHACC,MOVA,SBUF;接收PC机发来的字符,MOVSBUF,A;将字符回送给PC机,WAIT:JNBTI,WAIT;等待发送完毕,CLRTI,POPACC;恢复现场,POPPSW,SETBEA,RETI,END,中断服务程序:,47,三、PC机与单片机通讯多机通信,多机通信的关键问题:识别单片机!给单片机编号。,怎样识别单片机?,起始位,D0,D1,D2,D3,D4,D5,D6,D7,奇偶位,停止位,起始位,D0,D1,D2,D3,D4,D5,D6,D7,TB8,停止位,从PC机和单片机帧格式可知:通过软件编程,使得PC机在发送地址(单片机编号)时,奇偶位为1,发送数据时为0;单片机接收时,TB8为1表示收到的地址,为0表示收到的数据。,PC机与单片机通讯多机通信,三、PC机与单片机通讯多机通信起始位D0D1D2D3D4D5,48,例:从PC机的键盘上输入单片机的编号,要求PC机与该单片机进行通信测试,从键盘上输入一个字符,发送给某单片机,单片机受到该字符后,又发回给PC机,在屏幕上显示出来。,由于RS-232C不能实现多机通信,故采用RS-422标准。电路如下:,PC机,TXD,RXD,232/422,转换器,RXD,TXD,MCS-51,75175,75174,1号,RXD,TXD,MCS-51,75175,75174,2号,RXD,TXD,MCS-51,75175,75174,n号,PC机与单片机的多级通信,例:从PC机的键盘上输入单片机的编号,要求PC机与该单片机进,49,PC机软件设计,开 始,初始化8250,输入单片机编号,发送单片机编号,接收单片机送回的编号,取键盘字符,编号一致吗?,向单片机发送字符,接收单片机发回的字符,显示发回的字符,N,Y,结 束,多机通讯程序设计,PC机软件设计 开 始初始化8250输入单片机编号发送,50,程序清单:,#include“stdio.h”,main(),char c1,c2,n1,n2;,int coms;,outportb(0 x3fb,0 x80);/*初始化8250*/,outportb(0 x3f8,0 x30);,outportb(0 x3f9,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,0 x01);/*PC机处于接收状态*/,waitok1:/*查询单片机返回的编号是否有效*/,coms=inportb(0 x3fd);,if(coms&0 x01)=0),PC机端的程序,程序清单:PC机端的程序,51,goto waitok1;,n2=inportb(0 x3f8);/*读入单片机返回的编号*/,if(n1!=n2),printf(“The number of MCS is error!n”);,break;,else,outportb(0 x3fc,0 x03);/*PC机处于发送状态*/,outportb(0 x3fb,0 x3b);/*PC机处于发送数据状态*/,c1=getchar();,do/*查询发送移位寄存器是否空*/,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);,goto waitok1;,52,单片机程序流程,中断服务程序,保护现场,接收地址,与本机地址相等否?,回送本机地址,接收PC机发来的字符,将收到的字符回送PC机,恢复现场,中断返回,N,Y,单片机软件设计,单片机程序流程中断服务程序保护现场接收地址与本机地址相等,53,3、程序清单:,ORG0000H,LJMPMAIN,ORG0023H,LJMPSERVE,MAIN:MOVTMOD,#20H;初始化T1,MOVTH1,#0F3H,MOVTL1,#0F3H,MOVSCON,#0F0H;串行口为方式3,REN=1,MOVPCON,#80H;SMOD=1,SETBTR1,SETBEA,SETBES,HERE:SJMPHERE,SERVE:CLREA,PUSHACC,PUSHPSW,CLRRS1,SETBRS0,3、程序清单:,54,MOVA,SBUF;接收地址,XRLA,#01H;与本机地址进行比较,JNZRETURN;与本机地址不符,则返回,CLRSM2;置单片机为接收数据状态,CLRRI,MOVA,#01H,MOVSBUF,A;发送本机地址给PC机,JNBTI,;等待发送完毕,CLRTI,JNBRI,;等待PC机发来的字符接收完毕,MOVA,SBUF;读入字符,CLRRI,MOVSBUF,A,JNBTI,;等待发送完毕,CLRTI,RETURN:POPPSW,POPACC,SETBEA,RETI,END,MOVA,SBUF;接收地址,55,本章要求:,了解通信、并行通信、串行通信、同步通信、异步通信、信息帧、波特率等概念;,了解MCS-51单片机串行口的结构;,掌握MCS-51单片机的4种工作方式及波特率的设置;,掌握4种方式下串行数据的收发过程;,了解RS232C、RS422A/485通信协议;,了解PC机串口资源及其使用方法;,掌握单片机与PC机进行双机和多机通信的电路及实现程序。,小结,本章要求:小结,56,
展开阅读全文