汇编语言实现串口通信(PC和单片机间)_第1页
汇编语言实现串口通信(PC和单片机间)_第2页
汇编语言实现串口通信(PC和单片机间)_第3页
汇编语言实现串口通信(PC和单片机间)_第4页
汇编语言实现串口通信(PC和单片机间)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8 用用C语言或汇编语言实现串口通信 语言或汇编语言实现串口通信 PC和单片机间 和单片机间 上位机和下位机的主从工作方式为工业控制及自动控制系统所采用 由于 PC机分析能力强 处理速度更快及单片机使用灵活方便等特点 所以一般都将 PC 机作为上位机 单片机作为下位机 二者通过RS 232或者RS 485接收 发送数 据和传送指令 单片机可单独处理数据和控制任务 同时也将数据传送给PC机 由PC机对这些数据进行处理或显示 1 1 硬件电路的设计硬件电路的设计 MCS 51单片机有一个全双工的串行通讯口UART 利用其RXD和TXD与外界进行通信 其 内部有2个物理上完全独立的接收 发送缓冲器SBUF 可同时发送和接收数据 所以单片机 和PC机之间可以方便地进行串口通讯 单片机串口有3条引线 TXD 发送数据 RXD 接收数 据 和GND 信号地 因此在通信距离较短时可采用零MODEM方式 简单三连线结构 IBM PC 机有两个标准的RS 232串行口 其电平采用的是EIA电平 而MCS 51单片机的串行通信是由 TXD 发送数据 和RXD 接收数据 来进行全双工通信的 它们的电平是TTL电平 为了PC机与 MCS 51机之间能可靠地进行串行通信 需要用电平转换芯片 可以采用MAXIM公司生产的专 用芯片MAX232进行转换 电路如图1所示 硬件连接时 可从MAX232中的2路发送器 和接收器中任选一路 只要注意发送与接收的引脚对应关系即可 接口电路如 图3 5所示 总体设计按照整体设计思路方案绘制原理图如下所示 2 2 系统软件设计系统软件设计 软件设计分上位机软件设计和下位机软件设计 这两部分虽然在不同的机器上编写和运行 但它们要做的工作是对应的 一个发送 另一个接收 为了保证数据通信的可靠性 要制定 通信协议 然后各自根据协议分别编制程序 现约定通信协议如下 PC机和单片机都可以发 送和接收 上位机和下位机均采用查询方式发送控字符和数据 中断方式接收控制字符和 数据 采用RS 232串口异步通信 上位上位 PC 机与下位单片机异步串行通信的机与下位单片机异步串行通信的通信协议通信协议 为了保证可靠的通信 必须有一套完善的通信协议 分布式控制系统中的每台单片机 均有唯一的番号 通信开始时 先由 机呼叫被叫单片机的番号 单片机在接收到微机 的呼叫后 首先判断是不是自己的番号 如果是 则发送呼叫应答信号 否则不予理睬 微机在接收到呼叫应答信号之后 将向单片机发出通信命令字符串 以下是上位 机协 议的格式 单片机号单片机号命令码命令码停止标志 其中 单片机号代表现场第几台单片机 占用 个字节 发送两次的目的是为了防止 干扰 命令码则代表上位机向下位机发布的工作命令 它也占用 个字节 发送两次的目 的也是为了防止干扰 而停止标志则表明一次命令发送完毕 使用时可依据该标志判断上 位机的命令是否发送完毕 下位机协议格式如下 数据块校验位 该格式中 数据块为下位机上传到上位 机的数据 校验位则用于 机对收到的 数据进行奇偶校验 占 个字节 校验正确后 可将数据写入内存 否则发出数据传输 错误信息 以要求单片机重新传输数据 另外 作为一个完整的通信协议 只有上述约定还不够 还必须在发送和接收数据的 时间间隔上加以限制 否则 很可能由于某些原因而造成无限制的等待对方应答 使整个 系统处于工作不正常状态 或者延误其它动作的处理 具体时间限制可根据通信内容 处理速度 再加上适当的余量来确定 2 2 单片机通信程序设计单片机通信程序设计 单片机的数据通信由串行口完成 定时器T1 作为波特率发生器 其波特率要与PC 机 一致 数据的传送格式为1 位起始位 8 位数据位和1 位停止位 采用中断方式发送和接 收数据 定时器T1 设置为工作工作模式2 串行口设置为工作方式3 由第9位判断停止 具体的程序流程图见下 单片机中断方式接收程序单片机中断方式接收程序 当PC 机不发送任何数据的时候 从机单片机始终处于等待状态 P 直到PC 机发送数 据过来 由于PC 机在发送有效数据之前会加一个开始符 FFH 在有效数据之后会加一 个开始符 7FH 所以单片机接收到主机发送来的FFH 之后 置RAM 存贮单元的初始地址 30H 单元 用来放紧接着接收的数据 程序中还用了一个计数器COUNTER 来计接收到的数 据位数 直到接收到7FH 为止 单片机接收主程序单片机接收主程序MAINMAIN 及中断服务程序及中断服务程序STRSTR 清单如下 清单如下 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 s MOV TL1 0F4H MOV 30H 15 MOV COUNTER 1 MOV R0 30H 接收数据存放区 MOV R1 30H SETB TR1 开始计数 CLR ET1 清定时中断 MOV SCON 50H 串行口控制寄存器给值 SETB EA 开总中断 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 是结束符 放发送缓存区开始字符 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 单元内数据逐一发送出去 程序框图见下 单片机发送主程序单片机发送主程序MAINMAIN 及中断服务程序及中断服务程序SENDSEND清单如下 清单如下 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 s MOV TL1 0F4H MOV 30H 15 MOV COUNTER 1 MOV R0 30H 接收数据存放区 MOV R1 30H SETB TR1 开始计数 CLR ET1 清定时中断 MOV SCON 50H 串行口控制寄存器给值 SETB EA 开总中断 SETB ES 开串行口中断 MOV IP 10H 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 从串行口收到的数据显示出来 在程序设计中 在AT89C51RAM 存贮器中的四个显示缓冲器 单元30H 34H 分别存放着由PC 机方发送过来的数据 AT89C51 的P2 口扫描输出总是只 有一位为高电平 即4 位显示器中仅有一位公共阴极为低电平 其它位为高电平 AT89C51 的P0 口相应位 阴极为低 的显示数据的段数据 使该位显示出一个字符 其它们为暗 依次地改变P2 口输出为高的位 P0 口输出对应的段数据 4 位显示器就显示出由缓冲器 中显示数据所确定的字符 程序框图见下 单片机显示子程序清单如下单片机显示子程序清单如下 DISP PUSH ACC MOV DPTR TAB MOV R1 30H MOV A COUNTER JZ DISP2 没有接收到数据 跳出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 3 3 PCPC机通信程序机通信程序 PC 通信程序采用 Visual Basic 语言编程 VB 提供了串行端口控制 Mscomm 来为应用 程序提供串行通讯 该控件屏蔽了通信过程中的底层操作 我们可以设置 监视 Mscomm 控件的属性和事件 结合 Timer 控件即可完成对串行口的初始化和数据的输入输出工作 主程序按照通信协议的要求 首先确定波特率和信息帧格式 然后调用发送子程序将键盘 输入的数据发送出去 为了使主机能够对整个检测过程进行控制 须要在发送命令以后设 定等待的时间 也可以通过条件判断下一步是发送还是接收命令 对发送的命令 可能是 文本方式或二进制代码 在发送二进制代码时 应特别注意发送的格式 PCPC 机通信程序清单 机通信程序清单 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 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 MSComm1 OnComm Dim lenth As Integer i As Integer lenth Len Text1 Text 2 ReDim instring 1 To lenth As Integer Select Case MSComm1 CommEvent Case comEvReceive For i 1 To lenth instring i MSComm1 Input 0 Next i End Select Text2 Text For i 1 To lenth If instring i 255 And instring i 127 Then Text2 Text Text2 Text 定时器T1的方式2 MOV PCON 00H 串行口波特率控制位 MOV TH1 0F4H 2400Kb s MOV TL1 0F4H MOV 30H 15 MOV COUNTER 1 MOV R0 30H 接收数据存放区 MOV R1 30H SETB TR1 开始计数 CLR ET1 清定时中断 MOV SCON 50H 串行口控制寄存器给值 SETB EA 开总中断 SETB ES 开串行口中断 MOV IP 10H 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 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 是结束符 放发送缓存区开始字符 INC R5 MOV POINT 30H MOV SBUF 255 SJMP EXIT GET2 MOV R0 A INC R0 INC COUNTER EXIT POP 01H POP ACC RETI 显示程序显示程序 DISP PUSH ACC MOV DPTR TAB MOV R1 30H MOV A COUNTER JZ DISP2 没有接收到数据 跳出DISP 继续显示P 等待状态 MOV R2 A MOV R6 08H DISP1 MOV A R1 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 PCPC 机通信程序清单 机通信程序清单 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 End Sub Private Sub Command2 Click Text2 Text End Sub Private Sub Command3 Click If MSComm1 PortOpen False Then MSComm1 PortOpen True Comman

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论