汇编语言实现串口通信(pc和单片机间)

上传人:艾力 文档编号:34783697 上传时间:2018-03-01 格式:DOC 页数:14 大小:331.50KB
返回 下载 相关 举报
汇编语言实现串口通信(pc和单片机间)_第1页
第1页 / 共14页
汇编语言实现串口通信(pc和单片机间)_第2页
第2页 / 共14页
汇编语言实现串口通信(pc和单片机间)_第3页
第3页 / 共14页
汇编语言实现串口通信(pc和单片机间)_第4页
第4页 / 共14页
汇编语言实现串口通信(pc和单片机间)_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《汇编语言实现串口通信(pc和单片机间)》由会员分享,可在线阅读,更多相关《汇编语言实现串口通信(pc和单片机间)(14页珍藏版)》请在金锄头文库上搜索。

1、8.用C语言或汇编语言实现串口通信(PC和单片机间) 上位机和下位机的主从工作方式为工业控制及自动控制系统所采用。由于 PC机分析能力强、处理速度更快及单片机使用灵活方便等特点,所以一般都将 PC 机作为上位机,单片机作为下位机,二者通过RS-232或者RS-485接收、发送数 据和传送指令。单片机可单独处理数据和控制任务,同时也将数据传送给PC机, 由PC机对这些数据进行处理或显示 1 硬件电路的设计 MCS-51单片机有一个全双工的串行通讯口UART,利用其RXD和TXD与外界进行通信,其 内部有2个物理上完全独立的接收、发送缓冲器SBUF,可同时发送和接收数据。所以单片机 和PC机之间可

2、以方便地进行串口通讯。单片机串口有3条引线:TXD(发送数据),RXD(接收数 据)和GND(信号地)。因此在通信距离较短时可采用零MODEM方式,简单三连线结构。IBM-PC 机有两个标准的RS-232串行口,其电平采用的是EIA电平,而MCS-51单片机的串行通信是由 TXD(发送数据)和RXD(接收数据)来进行全双工通信的,它们的电平是TTL电平;为了PC机与 MCS-51机之间能可靠地进行串行通信,需要用电平转换芯片,可以采用MAXIM公司生产的专 用芯片MAX232进行转换。电路如图1所示。硬件连接时,可从MAX232中的2路发送器 和接收器中任选一路,只要注意发送与接收的引脚对应关

3、系即可。接口电路如 图3.5所示。总体设计按照整体设计思路方案绘制原理图如下所示: 2 系统软件设计 软件设计分上位机软件设计和下位机软件设计。这两部分虽然在不同的机器上编写和运行, 但它们要做的工作是对应的:一个发送,另一个接收。为了保证数据通信的可靠性,要制定 通信协议,然后各自根据协议分别编制程序。现约定通信协议如下:PC机和单片机都可以发 送和接收。上位机和下位机均采用查询方式发送控字符和数据、中断方式接收控制字符和 数据。采用RS-232串口异步通信, 上位PC 机与下位单片机异步串行通信的通信协议为了保证可靠的通信,必须有一套完善的通信协议。分布式控制系统中的每台单片机 均有唯一的

4、番号。通信开始时,先由机呼叫被叫单片机的番号,单片机在接收到微机 的呼叫后,首先判断是不是自己的番号,如果是,则发送呼叫应答信号,否则不予理睬。 微机在接收到呼叫应答信号之后,将向单片机发出通信命令字符串。以下是上位机协 议的格式: 单片机号 单片机号 命令码 命令码 停止标志 其中,单片机号代表现场第几台单片机,占用个字节,发送两次的目的是为了防止 干扰;命令码则代表上位机向下位机发布的工作命令,它也占用个字节,发送两次的目 的也是为了防止干扰。而停止标志则表明一次命令发送完毕。使用时可依据该标志判断上 位机的命令是否发送完毕。 下位机协议格式如下: 数据块 校验位 该格式中,数据块为下位机

5、上传到上位机的数据。校验位则用于机对收到的 数据进行奇偶校验(占个字节)。校验正确后,可将数据写入内存,否则发出数据传输 错误信息,以要求单片机重新传输数据。 另外,作为一个完整的通信协议,只有上述约定还不够,还必须在发送和接收数据的 时间间隔上加以限制。否则,很可能由于某些原因而造成无限制的等待对方应答,使整个 系统处于工作不正常状态,或者延误其它动作的处理。具体时间限制可根据通信内容、 处理速度,再加上适当的余量来确定。 2 单片机通信程序设计 单片机的数据通信由串行口完成,定时器T1 作为波特率发生器,其波特率要与PC 机 一致。数据的传送格式为1 位起始位、8 位数据位和1 位停止位。

6、采用中断方式发送和接 收数据,定时器T1 设置为工作工作模式2,串行口设置为工作方式3,由第9位判断停止。 具体的程序流程图见下。单片机中断方式接收程序 当PC 机不发送任何数据的时候,从机单片机始终处于等待状态(P.),直到PC 机发送数 据过来。由于PC 机在发送有效数据之前会加一个开始符(FFH),在有效数据之后会加一 个开始符(7FH),所以单片机接收到主机发送来的FFH 之后,置RAM 存贮单元的初始地址 30H 单元,用来放紧接着接收的数据,程序中还用了一个计数器COUNTER 来计接收到的数 据位数,直到接收到7FH 为止。 单片机接收主程序MAIN 及中断服务程序STR 清单如

7、下: COUNTER EQU 40H POINT EQU 41H ORG 0000H LJMP MAIN ORG 0023H LJMP SRT MAIN:MOV SP,#60H MOV TMOD,#20H ;定时器T1 的方式2 MOV PCON,#00H ;串行口波特率控制位 MOV TH1,#0F4H ;2400Kb/sMOV TL1,#0F4H MOV 30H,#15 MOV COUNTER,#1 MOV R0,#30H ;接收数据存放区 MOV R1,#30H SETB TR1 ;开始计数 CLR ET1 ;清定时中断 MOV SCON,#50H ;串行口控制寄存器给值 SETB EA

8、 ;开总中断 SETB ES ;开串行口中断 MOV IP,#10H MAIN1: ACALL DISP SJMP MAIN1 SRT: PUSH ACC PUSH 01H JBC RI,GET SJMP EXIT GET: MOV A,SBUF CJNE A,#0FFH,GET1 ;判断是否为开始字符,不是跳GET1 放数据存贮 MOV R0,#30H ;是开始符就置存贮区首地址30H,计数器清0 并跳出中断 MOV COUNTER,#0 SJMP EXIT GET1: CJNE A,#07FH,GET2 判断是否为结束符,不是跳GET2 放数据存贮区 MOV R5,COUNTER ;是结束

9、符,放发送缓存区开始字符 INC R5 MOV POINT,#30H MOV SBUF,#255 SJMP EXIT GET2: MOV R0,A INC R0 INC COUNTER EXIT: POP 01H POP ACC RETI 单片机中断方式发送程序 由于本次设计的系统要实现的功能是将PC 机送到单片机的数据回送到PC机,所以单片机要 在接收完PC 机数据后立即将数据回送到PC 机。也就是说要将RAM 存贮单元的初始地址30H 单元内数据逐一发送出去。程序框图见下。单片机发送主程序MAIN 及中断服务程序SEND清单如下: COUNTER EQU 40H POINT EQU 41H

10、 ORG 0000H LJMP MAIN ORG 0023H LJMP SRT MAIN:MOV SP,#60H MOV TMOD,#20H ;定时器T1 的方式2 MOV PCON,#00H ;串行口波特率控制位 MOV TH1,#0F4H ;2400Kb/s MOV TL1,#0F4H MOV 30H,#15 MOV COUNTER,#1MOV R0,#30H ;接收数据存放区 MOV R1,#30H SETB TR1 ;开始计数 CLR ET1 ;清定时中断 MOV SCON,#50H ;串行口控制寄存器给值 SETB EA ;开总中断 SETB ES ;开串行口中断 MOV IP,#1

11、0H MAIN1: ACALL DISP SJMP MAIN1 SRT: PUSH ACC PUSH 01H JBC RI,GET ;判断是否为接收,是跳GET 接收程序,否执行发送程序 CLR TI DJNZ R5,SEND1 SJMP EXIT SEND1: MOV R1,POINT MOV A,R1 MOV SBUF,A INC R1 MOV POINT,R1 SJMP EXIT EXIT: POP 01H POP ACC RETI 单片机显示程序 单片机显示部分可以用来检测接收到的数据是否正确,单片机显示程序主要将接AT89C51 从串行口收到的数据显示出来。在程序设计中,在AT89C

12、51RAM 存贮器中的四个显示缓冲器 单元30H34H,分别存放着由PC 机方发送过来的数据,AT89C51 的P2 口扫描输出总是只 有一位为高电平,即4 位显示器中仅有一位公共阴极为低电平,其它位为高电平,AT89C51 的P0 口相应位(阴极为低)的显示数据的段数据,使该位显示出一个字符,其它们为暗, 依次地改变P2 口输出为高的位,P0 口输出对应的段数据,4 位显示器就显示出由缓冲器 中显示数据所确定的字符。程序框图见下:单片机显示子程序清单如下: DISP: PUSH ACC MOV DPTR,#TAB MOV R1,#30H MOV A,COUNTERJZ DISP2 ;没有接收

13、到数据,跳出DISP 继续显示P.等待状态 MOV R2,A MOV R6,#08H DISP1:MOV A,R1 CPL A ANL A,#0FH MOVC A,A+DPTR MOV P0,A ;送字形码到P0 口 MOV A,R6 MOV P2,A ;送位控制到P2 口 RR A MOV R6,A DJNZ R7,$ INC R1 DJNZ R2,DISP1 ;判断接收位数 DISP2:MOV R1,#30H POP ACC RET TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DB 77H,7CH,39H,5EH,79H,0F3H END

14、 3 PC机通信程序 PC 通信程序采用Visual Basic 语言编程,VB 提供了串行端口控制Mscomm来为应用 程序提供串行通讯。该控件屏蔽了通信过程中的底层操作,我们可以设置、监视Mscomm 控件的属性和事件,结合Timer 控件即可完成对串行口的初始化和数据的输入输出工作。 主程序按照通信协议的要求,首先确定波特率和信息帧格式,然后调用发送子程序将键盘 输入的数据发送出去,为了使主机能够对整个检测过程进行控制,须要在发送命令以后设 定等待的时间,也可以通过条件判断下一步是发送还是接收命令。对发送的命令,可能是 文本方式或二进制代码。在发送二进制代码时,应特别注意发送的格式。 P

15、C 机通信程序清单: Private Sub Command1_Click() Dim outstring As String Dim i As Integer Dim de As Integer outstring = Text1.Text MSComm1.RThreshold = Len(Text1.Text) + 2 MSComm1.Output = Chr(255) For i = 1 To Len(outstring) MSComm1.Output = Chr(Asc(Mid(outstring, i, 1) - 48) Next i MSComm1.Output = Chr(127

16、) End Sub Private Sub Command2_Click()Text2.Text = “ End Sub Private Sub Command3_Click() If MSComm1.PortOpen = False Then MSComm1.PortOpen = True Command3.Caption = “关闭端口“ Else MSComm1.PortOpen = False Command3.Caption = “打开端口“ End If End Sub Private Sub Form_Load() MSComm1.CommPort = 1 定义用端口COM1 MSComm1.Settings = “2400,n,8,1“ 波特率,无奇偶校验,8 位数据,1 位停止位 MSComm1.PortOpen = True 打开端口 Command3.Caption = “关闭端口“ End Sub Private Sub MSCom

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号