收藏 分销(赏)

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

上传人:二*** 文档编号:10296485 上传时间:2025-05-19 格式:PPT 页数:68 大小:806.04KB
下载 相关 举报
2022年串行口及串行通信技术.ppt_第1页
第1页 / 共68页
本文档共68页,全文阅读请下载到手机保存,查看更方便
资源描述
,第5章 串行口通信技术,*,*,MCS-51的串行接口,MCS-51单片机之间的通信,PC机和单片机之间的通信,第5章 串行口通信技术,本章将介绍以下内容:,5/19/2025,1,5.1 MCS-51的串行接口,MCS-51,串行口结构,MCS-51,内部有两个独立的接收、发送缓冲器,SBUF,。,SBUF,属于特殊功能寄存器。发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入,二者共用一个字节地址(,99H,)。,串行口的结构如图所示。,5/19/2025,2,串行口结构示意图,5/19/2025,3,1.,串行口数据缓冲器,SBUF,SBUF是两个在物理上独立的接收、发送寄存器,一个用于存放接收到的数据,另一个用于存放欲发送的数据,可同时发送和接收数据。两个缓冲器共用一个地址99H,通过对SBUF的读、写指令来区别是对接收缓冲器还是发送缓冲器进行操作。CPU在写SBUF时,就是修改发送缓冲器;读SBUF,就是读接收缓冲器的内容。接收或发送数据,是通过串行口对外的两条独立收发信号线RXD(P3.0)、TXD(P3.1)来实现的,因此可以同时发送、接收数据,其工作方式为全双工制式。,5/19/2025,4,2.串行口控制寄存器SCON,SCON用来控制串行口的工作方式和状态,可以位寻址,字节地址为98H。单片机复位时,所有位全为0。,SCON,9FH,9EH,9DH,9CH,9BH,9AH,99H,98H,SM0,SM1,SM2,REN,TB8,RB8,TI,RI,SCON的各位定义,5/19/2025,5,SM0、SM1:串行方式选择位。,SM2:多机通信控制位,用于方式2和方式3中。在方式2和方式3处于接收方式时,若SM2=1,且接收到的第9位数据RB8为0时,不激活RI;若SM2=1,且RB8=1时,则置RI=1。在方式2、3处于接收或发送方式时,若SM2=0,不论接收到的第9位RB8为0还是为1,TI、RI都以正常方式被激活。在方式1处于接收时,若SM2=1,则只有收到有效的停止位后,RI置1。在方式0中,SM2应为0。,REN:允许串行接收位。它由软件置位或清零。REN=1时,允许接收;REN=0时,禁止接收。,5/19/2025,6,TB8:发送数据的第9位。在方式2和方式3中,由软件置位或复位,可做奇偶校验位。在多机通信中,可作为区别地址帧或数据帧的标识位,一般约定地址帧时,TB8为1,数据帧时,TB8为0。,RB8:接收数据的第9位。功能同TB8。,TI:发送中断标志位。在方式0中,发送完8位数据后,由硬件置位;在其它方式中,在发送停止位之初由硬件置位。因此,TI是发送完一帧数据的标志,可以用指令JBC TI,rel来查询是否发送结束。TI=1时,也可向CPU申请中断,响应中断后,必须由软件清除TI。,5/19/2025,7,RI:接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其它方式中,在接收停止位的中间由硬件置位。同TI一样,也可以通过JBC RI,rel来查询是否接收完一帧数据。RI=1时,也可申请中断,响应中断后,必须由软件清除RI。,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,可变,5/19/2025,8,如用指令MOV SCON,#40H,使单片机工作在串行通信的方式1下。,3.,电源及波特率选择寄存器,PCON,PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,不可以位寻址,字节地址为87H。在HMOS的8051单片机中,PCON除了最高位以外,其它位都是虚设的。,PCON的各位定义,PCON(87H),D7,D6,D5,D4,D3,D2,D1,D0,位符号,SMOD,-,-,-,GF1,GF0,PD,IDL,5/19/2025,9,5.2 MCS-51串行的工作方式,MCS-51的串行口有4种工作方式,通过SCON中的SM1、SM0位来决定,如表8.1所示。,1.,方式0,在方式0下,串行口作同步移位寄存器用,其波特率固定为f,osc,/12。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式常用于扩展I/O口。,1)发送,当一个数据写入串行口发送缓冲器SBUF时,串行口将8位数据以f,osc,/12的波特率从RXD引脚输出(低位在前),发送完置中断标志TI为1,请求中断。在再次发送数据之前,必须由软件清TI为0。具体接线图如图所示。其中,74LS164为串入并出移位寄存器。,5/19/2025,10,方式,0,用于扩展,I/O,口输出,5/19/2025,11,2)接收,在满足REN=1和RI=0的条件下,串行口即开始从RXD端以f,osc,/12的波特率输入数据(低位在前),当接收完8位数据后,置中断标志RI为1,请求中断。在再次接收数据之前,必须由软件清RI为0。具体接线图如图所示。其中,74LS165为并入串出移位寄存器。,串行控制寄存器SCON中的TB8和RB8在方式0中未用。值得注意的是,每当发送或接收完8位数据后,硬件会自动置TI或RI为1,CPU响应TI或RI中断后,必须由用户用软件清0。方式0时,SM2必须为0。,5/19/2025,12,方式,0,用于扩展,I/O,口输入,5/19/2025,13,2.,方式,1,串行口为波特率可调的10位通用异步接口UART。发送或接收一帧信息,包括1位起始位0,8位数据位和1位停止位1。其帧格式如下图所示。,1)发送,发送时,数据从TXD端输出,当数据写入发送缓冲器SBUF后,启动发送器发送。当发送完一帧数据后,置中断标志TI为1。方式1所传送的波特率取决于定时器1的溢出率和PCON中的SMOD位。,5/19/2025,14,10,位的帧格式,5/19/2025,15,2)接收,接收时,由REN置1,允许接收,串行口采样RXD,当采样由1到0跳变时,确认是起始位“0”,开始接收一帧数据。当RI=0,且停止位为1或SM2=0时,停止位进入RB8位,同时置中断标志RI;否则信息将丢失。所以,方式1接收时,应先用软件清除RI或SM2标志。,3.,方式,2,方式2下,串行口为11位UART,传送波特率与SMOD有关。发送或接收一帧数据包括1位起始位0,8位数据位,1位可编程位(用于奇偶校验)和1位停止位1。其帧格式如下图所示。,5/19/2025,16,11,位的帧格式,5/19/2025,17,1)发送,发送时,先根据通信协议由软件设置TB8,然后用指令将要发送的数据写入SBUF,启动发送器。写SBUF的指令,除了将8位数据送入SBUF外,同时还将TB8装入发送移位寄存器的第9位,并通知发送控制器进行一次发送。一帧信息即从TXD发送,在送完一帧信息后,TI被自动置1,在发送下一帧信息之前,TI必须由中断服务程序或查询程序清0。,5/19/2025,18,2)接收,当REN=1时,允许串行口接收数据。数据由RXD端输入,接收11位的信息。当接收器采样到RXD端的负跳变,并判断起始位有效后,开始接收一帧信息。当接收器接收到第9位数据后,若同时满足以下两个条件:RI=0和SM2=0或接收到的第9位数据为1,则接收数据有效,8位数据送入SBUF,第9位送入RB8,并置RI=1。若不满足上述两个条件,则信息丢失。,4.,方式,3,方式3为波特率可变的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。,5/19/2025,19,5.3 MCS-51串行口的波特率,在串行通信中,收发双方对传送的数据速率,即波特率要有一定的约定。通过8.3.2节的论述,我们已经知道,MCS-51单片机的串行口通过编程可以有4种工作方式。其中,方式0和方式2的波特率是固定的,方式1和方式3的波特率可变,由定时器1的溢出率决定,下面加以分析。,1.,方式0和方式2,在方式0中,波特率为时钟频率的1/12,即f,osc,/12,固定不变。在方式2中,波特率取决于PCON中的SMOD值,当SMOD=0时,波特率为f,osc,/64;当SMOD=1时,波特率为f,osc,/32.,即:波特率=,5/19/2025,20,实际上,当定时器1做波特率发生器使用时,通常是工作在模式2,即自动重装载的8位定时器,此时TL1作计数用,自动重装载的值在TH1内。设计数的预置值(初始值)为X,那么每过256-X个机器周期,定时器溢出一次。为了避免因溢出而产生不必要的中断,此时应禁止T1中断。溢出周期为:,溢出率为溢出周期的倒数,所以,波特率=,5/19/2025,22,定时器,1,产生的常用波特率,波特率/(b/s),f,osc,/MHz,SMOD,定时器1,C/,模式,初始值,方式0:1,方式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,5/19/2025,23,5.4 MCS-51单片机之间的通信,5.4.1,双机通信硬件电路,如果两个MCS-51单片机系统距离较近,那么就可以将它们的串行口直接相连,实现双机通信。,为了增加通信距离,减少通道和电源干扰,可以在通信线路上采用光电隔离的方法,利用RS-422A标准进行双机通信,实用的接口电路如下图所示。,5/19/2025,24,双机异步通信接口电路,5/19/2025,25,RS-422A,双机异步通信接口电路,5/19/2025,26,发送端的数据由串行口TXD端输出,通过74LS05反向驱动,经光电耦合器送到驱动芯片SN75174的输入端。SN75174将输出的TTL信号转换为符合RS-422A标准的差动信号输出,经传输线(双绞线)将信号送到接收端。接收芯片SN75175将差动信号转换为TTL信号,通过反向后,经光电耦合器到达接收机串行口的接收端。,每个通道的接收端都有三个电阻:R,1,,R,2,,R,3,。R,1,为传输线的匹配电阻,取值在1001 k之间,其它两个电阻是为了解决第一个数据的误码而设置的匹配电阻。值得注意的是,光电耦合器必须使用两组独立的电源,只有这样才能起到隔离、抗干扰的作用。,5/19/2025,27,5.4.2 双机通信软件编程,1.查询方式,1)甲机发送,编程将甲机片外1000H101FH单元的数据块从串行口输出。定义方式2发送,TB8为奇偶校验位。发送波特率375 kb/s,晶振为12 MHz,所以SMOD=1。,5/19/2025,28,发送子程序如下:,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,启动发送,5/19/2025,29,WAIT:JBC TI,CONT ;判断一帧是否发送完,发送完,清TI,取下一个数据,AJMP WAIT ;未完等待,CONT:INC DPTR ;更新数据单元,DJNZ R7,START ;循环发送至结束,RET,5/19/2025,30,2)乙机接收,编程使乙机接收甲机发送过来的数据块,并存入片内50H6FH单元。接收过程要求判断RB8,若出错置F0标志为1,正确则置F0标志为0,然后返回。,在进行双机通信时,两机应采用相同的工作方式和波特率。参考接收子程序如下:,MOV SCON,#80H ;设置串行口为方式2,MOV PCON,#80H ;SMOD=1,MOV R0,#50H ;设置数据块指针,MOV R7,#20H ;设置数据块长度,SETB REN ;启动接收,5/19/2025,31,WAIT:JBC RI,READ ;判断是否接收完一帧,,若完,清RI,读入数据,AJMP WAIT ;未完等待,READ:MOV A,SBUF ;读入一帧数据,JNB PSW.0,PZ ;奇偶位为0则转,JNB RB8,ERR ;P=1,RB8=0,则出错,SJMP RIGHT ;二者全为1,则正确,PZ:JB RB8,ERR ;P=0,RB8=1,则出错,5/19/2025,32,RIGHT:MOV R0,A ;正确,存放数据,INC R0 ;更新地址指针,DJNZ R7,WAIT ;判断数据块是否接收完,CLR PSW.5 ;接收正确,且接收完清F0标志,RET ;返回,ERR:SETB PSW.5 ;出错,置F0标志为1,RET ;返回,5/19/2025,33,在上述查询方式的双机通信中,因为发送双方单片机的串行口均按方式2工作,所以帧格式是11位的,收发双方均是采用奇偶位TB8来进行校验的。传送数据的波特率与定时器无关,所以程序中没有涉及定时器的编程。,2.,中断方式,在很多应用中,双机通信的接收方都采用中断的方式来接收数据,以提高CPU的工作效率;发送方仍然采用查询方式发送。,5/19/2025,34,1)甲机发送,上面的通信程序,收发双方是采用奇偶位TB8来进行校验的,这里介绍一种用累加和进行校验的方法。,编程将甲机片内60H6FH单元的数据块从串行口发送,在发送之前将数据块长度发送给乙机,当发送完16个字节后,再发送一个累加校验和。定义双机串行口按方式1工作,晶振为11.059 MHz,波特率为2400 b/s,定时器1按方式2工作。经计算或查表得到定时器预置值为0F4H,SMOD=0。,参考发送子程序如下:,5/19/2025,35,MOV TMOD,#20H ;设置定时器1为方式2,MOV TL1,#0F4H ;设置预置值,MOV TH1,#0F4H,SETB TR1 ;启动定时器1,MOV SCON,#50H ;设置串行口为方式1,允许接收,START:MOV R0,#60H ;设置数据指针,MOV R5,#10H ;设置数据长度,MOV R4,#00H ;累加校验和初始化,MOV SBUF,R5 ;发送数据长度,5/19/2025,36,WAIT1:JBC TI,TRS ;等待发送,AJMP WAIT1,TRS:MOV A,R0 ;读取数据,MOV SBUF,A ;发送数据,ADD A,R4,MOV R4,A ;形成累加和,INC R0 ;修改数据指针,5/19/2025,37,WAIT2:JBC TI,CONT ;等待发送一帧数据,AJMP WAIT2,CONT:DJNZ R5,TRS ;判断数据块是否发送完,MOV SBUF,R4 ;发送累加校验和,WAIT3:JBC TI,WAIT4 ;等待发送,AJMP WAIT3,WAIT4:JBC RI,READ ;等待乙机回答,AJMP WAIT4,5/19/2025,38,READ:MOV A,SBUF ;接收乙机数据,JZ RIGHT ;00H,发送正确,返回,AJMP START ;发送出错,重发,RIGHT:RET,2)乙机接收,乙机接收甲机发送的数据,并存入以2000H开始的片外数据存储器中。首先接收数据长度,接着接收数据,当接收完16个字节后,接收累加和校验码,进行校验。数据传送结束后,根据校验结果向甲机发送一个状态字,00H表示正确,0FFH表示出错,出错则甲机重发。,5/19/2025,39,接收采用中断方式。设置两个标志位(7FH,7EH位)来判断接收到的信息是数据块长度、数据还是累加校验和。,参考接收程序如下:,ORG 0000H,LJMP CSH ;转初始化程序,ORG 0023H,LJMP INTS ;转串行口中断程序,ORG 0100H,5/19/2025,40,CSH:MOV TMOD,#20H ;设置定时器1为方式2,MOV TL1,#0F4H ;设置预置值,MOV TH1,#0F4H,SETB TR1 ;启动定时器1,MOV SCON#50H ;串行口初始化,SETB 7FH ;置长度标志位为1,SETB 7EH ;置数据块标志位为1,5/19/2025,41,INTS:CLR EA ;关中断,CLR RI ;清中断标志,PUSH A ;保护现场,PUSH DPH,PUSH DPL,JB 7FH,CHANG ;判断是数据块长度吗?,JB 7EH,DATA ;判断是数据块吗?,5/19/2025,43,SUM:MOV A,SBUF ;接收校验和,CJNZ A,40H,ERR ;判断接收是否正确,MOV A,#00H ;二者相等,正确,,向甲机发送00H,MOV SBUF,A,WAIT1:JNB TI,WAIT1,CLR TI,SJMP RETURN ;发送完,转到返回,ERR:MOV A,#0FFH ;二者不相等,错误,,向甲机发送FFH,MOV SBUF,A,5/19/2025,44,WAIT2:JNB TI,WAIT2,CLR TI,SJMP AGAIN ;发送完,转重新开始,CHANG:MOV A,SBUF ;接收长度,MOV 41H,A ;长度存入41H单元,CLR 7FH ;清长度标志位,SJMP RETURN ;转返回,DATA:MOV A,SBUF ;接收数据,MOV DPH,31H ;存入片外RAM,MOV DPL,30H,5/19/2025,45,MOVX DPTR,A,INC DPTR ;修改片外RAM的地址,MOV 31H,DPH,MOV 30H,DPL,ADD A,40H ;形成累加和,放在40H单元,MOV 40H,A,DJNZ 41H,RETURN ;判断数据块是否接收完,CLR 7EH ;接收完,清数据块标志位,SJMP RETURN,5/19/2025,46,AGAIN:SETB 7FH ;接收出错,恢复标志位,,重新开始接收,SETB 7EH,MOV 31H,#20H ;恢复片外RAM起始地址,MOV 30H,#00H,MOV 40H,#00H ;累加和寄存器清零,RETURN:POP DPL ;恢复现场,POP DPH,POP A,SETB EA ;开中断,RETI ;返回,5/19/2025,47,5.4.3,多机通信,MCS-51串行口的方式2和方式3有一个专门的应用领域,即多机通信。这一功能通常采用主从式多机通信方式,在这种方式中,要用一台主机和多台从机。主机发送的信息可以传送到各个从机或指定的从机,各从机发送的信息只能被主机接收,从机与从机之间不能进行通信。图是多机通信的一种连接示意图。,多机通信的实现,主要依靠主、从机之间正确地设置与判断SM2和发送或接收的第9位数据来(TB8或RB8)完成的。我们首先将上述二者的作用总结如下:,5/19/2025,48,多机通信连接示意图,5/19/2025,49,多机通信的实现,主要依靠主、从机之间正确地设置与判断SM2和发送或接收的第9位数据来(TB8或RB8)完成的。我们首先将上述二者的作用总结如下。,在单片机串行口以方式2或方式3接收时,一方面,若SM2=1,表示置多机通信功能位。这时有两种情况:接收到第9位数据为1,此时数据装入SBUF,并置RI=1,向CPU发中断请求;接收到第9位数据为0,此时不产生中断,信息将被丢失,不能接收。另一方面,若SM2=0,则接收到的第9位信息无论是1还是0,都产生RI=1的中断标志,接收的数据装入SBUF。根据这个功能,就可以实现多机通信。,5/19/2025,50,在编程前,首先要给各从机定义地址编号,如分别为00H、01H、02H等。在主机想发送一个数据块给某个从机时,它必须先送出一个地址字节,以辨认从机。编程实现多机通信的过程如下:,(1)主机发送一帧地址信息,与所需的从机联络。主机应置TB8为1,表示发送的是地址帧。例如:,MOV SCON,#0D8H ;设串行口为方式3,TB8=1,允许接收,(2)所有从机初始化设置SM2=1,处于准备接收一帧地址信息的状态。例如:,MOV SCON,#0F0H ;设串行口为方式3,SM2=1,允许接收,5/19/2025,51,5.5 PC机和单片机之间的通信,在工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。它们大多由IBMPC微机和单片机组成。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。,5/19/2025,53,5.5.1 接口设计,PC机与单片机之间可以由RS-232C、RS-422A或RS-423等接口相连。,在PC机系统内都装有异步通信适配器,利用它可以实现异步串行通信。该适配器的核心元件是可编程的Intel 8250芯片,它使PC机有能力与其它具有标准的RS-232C接口的计算机或设备进行通信。而MCS-51单片机本身具有一个全双工的串行口,因此只要配以电平转换的驱动电路、隔离电路就可组成一个简单可行的通信接口。同样,PC机和单片机之间的通信也分为双机通信和多机通信。,5/19/2025,54,PC机和单片机最简单的连接是零调制三线经济型。这是进行全双工通信所必须的最少线路。因为MCS-51单片机输入、输出电平为TTL电平,而PC机配置的是RS-232C标准接口,二者的电气规范不同,所以要加电平转换电路。常用的有MC1488、MC1489和MAX232,下图给出了采用MAX232芯片的PC机和单片机串行通信接口电路,与PC机相连采用9芯标准插座。,5/19/2025,55,PC,机和单片机串行通信接口,5/19/2025,56,5.5.2 软件编程,1.单片机通信软件例:,设单片机串行口工作在方式1,通过中断方式接收PC机发送的数据,并返回PC,。晶振为6 MHz,波特率2400 b/s,定时器1按方式2工作。经计算,定时器预置值为0F3H,SMOD=1。,参考程序如下:,ORG 0000H,LJMP CSH ;转初始化程序,ORG 0023H,LJMP INTS ;转串行口中断程序,ORG 0050H,5/19/2025,57,CSH:MOV TMOD,#20H ;设置定时器1为方式2,MOV TL1,#0F3H ;设置预置值,MOV TH1,#0F3H,SETB TR1 ;启动定时器1,MOV SCON#50H ;串行口初始化,MOV PCON#80H,SETB EA ;允许串行口中断,SETB ES,LJMP MAIN ;转主程序(主程序略),5/19/2025,58,INTS:CLR EA ;关中断,CLR RI ;清串行口中断标志,PUSH DPL ;保护现场,PUSH DPH,PUSH A,MOV A,SBUF ;接收PC机发送的数据,MOV SBUF,A ;将数据回送给PC机,5/19/2025,59,WAIT:JNB TI,WAIT ;等待发送,CLR TI,POP A ;发送完,恢复现场,POP DPH,POP DPL,SETB EA ;开中断,RETI ;返回,5/19/2025,60,2.,PC,机通信软件,PC机方面的通信程序可以直接用汇编语言编写,也可以用其它高级语言,如C,语言,来编写,但这种方法不仅编程复杂而且调试也很繁琐。,在,Windows,环境下,利用PC机串口进行通信的常用方法有两种,第一是调用,Windows API,函数;第二是使用,ActiveX,的MSComm 控件。第一种方法需声明及调用许多API 函数,十分烦琐。而第二种方法,实际上是通过通信组件间接的调用了Windows API 函数,其过程要比直接调用API要复杂,但是在实际程序的实现上要比前一种方式简单得多。,5/19/2025,61,用VB 6.0进行串行通信程序设计的方法:,5/19/2025,62,INC R0 ;,TI:发送中断标志位。,MOV TL1,#0F4H ;,在其它方式中,在接收停止位的中间由硬件置位。,另一方面,若SM2=0,则接收到的第9位信息无论是1还是0,都产生RI=1的中断标志,接收的数据装入SBUF。,在很多应用中,双机通信的接收方都采用中断的方式来接收数据,以提高CPU的工作效率;,JB 7EH,DATA ;,MOV TH1,#0F3H,在进行双机通信时,两机应采用相同的工作方式和波特率。,即:波特率=,1)甲机发送,如用指令MOV SCON,#40H,使单片机工作在串行通信的方式1下。,AJMP WAIT1,MOV DPL,30H,串行控制寄存器SCON中的TB8和RB8在方式0中未用。,MSComm提供了两种处理通信问题的方法,一是事件驱动方法,一是查询法。,在使用事件驱动法设计程序时,每当有新字符到达或端口状态改变,或发生错误时,MSComm控件将触发OnComm事件,而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以获知所发生的事件或错误,从而采取相应的操作。这种方法的优点是程序响应及时,可靠性高。,2.查询法,查询法适合于较小的应用程序,在这种情况下,每当应用程序执行完某一串行口操作后,将不断检查MSComm控件的CommEvent属性,以检查执行结果或检查某一事件是否发生。,5/19/2025,63,进行串行通信时有两种传输方式:1.字符形式:,通常以小于ASCII码128的字符码来传递,通常用于传送指令。2.二进制形式:,将数据以二进制编码的方式传递,它可能含有ASCII码128以上的字符码,通常用来传送数据,以提高速度。,5/19/2025,64,串行通信例:,本例子用VB6.0的MSComm控件开发PC串行通信的程序。采用一位开始位、一位停止位、8位数据位、,无奇偶校验,,波特率为2400bps。,步骤:,在窗体中添加名为,MSComm1,的,MSComm,控件,并设置空间的属性,如下:,.,CommPort,=2,使用,COM2.Setting=“2400,n,8,1”,波特率,2400,,无奇偶校验,,8,个数据位,,1,个停止位,.,InputMode,=,comInputModeBinary,设置接收数据模式为二进制模式,.,PortOpen,=True,打开通信口,5/19/2025,65,2.二进制数据的接收,当接收到数据时,将触发,OnComm,事件,,CommEvent,属性值改变为2。,Private Sub MSComm1_OnComm()Dim inbuf(4)As Byte Dim myrxd As Variant mysrr=inbuf if MSComm1.CommEvent=2 Then if MSComm1.InBufferCount=4 Then MSComm1.InputLen=0 myrxd=,MSComm1.Input End if End if End Sub,5/19/2025,66,3.,发送数据,由于VB中不能直接处理二进制数据,所以须用CByte函数将其它格式的常量或变量转换为二进制格式。例:发送一组四字节数据,前两个字节为识别码ED4CH,第三个字节为动作码“A”,最后一个字节为一个0-255的位置码:,Dim outbuf(3)As Byteoutbuf(0)=CByte(237)outbuf(1)=CByte(76)outbuf(2)=CByte(49),outbuf(3)=CByte(Number)MSComm1.Output=outbuf,5/19/2025,67,作业,老教材,234页:7、8、10、14、16,新教材,192页:7、8、10、13,、15,5/19/2025,68,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服