运用Visual Basic实现PC与89C51单片机之间的串行通信 沈 飙 夏海燕 摘要 在Visual
Basic开发环境下,运用VB提供的通信控件,实现PC机与89C51单片机之间的串行通信。
Serial
Communication between PC Abstract:Serial communication between PC
and 89C51 single-chip-computer by MSCOMM control box of Visual Basic is
introduced. 1 系统简介 |
图1 系统原理图 系统上位机由一台(PC586)微机构成,软件采用Visual Basic编程,作出十分直观的人机界面,并通过串行口将所需的各种予置信号(数字信号)传给单片机系统,再由单片机系统产生实际的模拟信号经线性光电隔离器送到现场。予置数值可以分别显示在PC机软件窗口和单片机系统的予置数字表头上。同时,现场实测信号经过线性光电隔离器,也可以实时显示在本系统的检测数字表头上和PC机的界面上。如此设计界面直观,而且利于对现场信号进行实时监测。因此,采用本系统,大大提高了现场信号予置精度,对实验操作人员来说人机界面良好,简单易懂。我们将分硬件和软件两方面分别介绍该系统的情况。 2 硬件介绍 图2 系统硬件原理图 本系统采用CPU为89C51的单片微机,89C51本身带有2K的内存储器,可以在编程器上实现闪烁式的电擦写达几万次以上,比以往惯用的8031CPU外加EPROM为核心的单片机系统在硬件上具有更加简单、方便等优点,而且完全兼容MCS 51系列单片机的所有功能。该单片机系统的工作流程是这样的:89C51单片机利用自身具有的串行通信口,直接接收PC机传送下来的串行数据,然后将所接收的各组数据通过并行口输出,经过数字光隔,送到数据锁存器74LS373,最后将锁存的数据送到D/A转换器进行数模转换并通过运放将模拟信号输出,同时显示在相应的予置数字表上。现场返回的信号通过隔离,经过A/D转换器和数据锁存器变成单片机所需的并行数字信号送到单片机的数据存储单元中,再由串行口返送到PC机上,同时显示在PC机界面和本系统相对应的检测数字表上以便于予置和实际情况相对比。利用89C51输出口对不同数据锁存器74LS373和A/D、D/A的片选输出可以实现一台单片机同时对多路不同信号进行予置和检测。 3 软件结构 Global comm_time As
Integer //定义一些全局变量 3.2 单片机部分 |
SM0 | SM1 | SM2 | REN | TB8 | RB8 | T1 | R1 |
本系统中89C51串口控制器SCON设置为50H,SM0、SM1为0、1,即为串行工作方式1,REN为1,即允许串口接收。另外,还应使89C51的中断允许寄存器IE的开放或禁止所有中断位EA为1,开放或禁止串行通道中断位ES为1,即允许串行口中断。89C51的并行口P0和P2分别作为八位数据的输入和输出口。P3口的输出作为数据锁存器和D/A、A/D的禁止和允许。程序流程如图4所示。 单片机程序清单简介: (1)主程序 MOV SP,#07 ACALL INIT //调串口初始化子程序 STRAT:CLR EA 清中断 MOV R0,#DATA1 存放接收数据首地址#DATA1 MOV R1,#DATA2 存放发送数据首地址#DATA2 MOV R2,#N 数据个数 SETB EA 开中断 ACALL D/A 调延时并启动D/A转换子程序 ACALL SEND 启动A/D转换子程序并串口发送 SJMP START 返回 (2)串口初始化程序 INIT:MOV TH1,#FD 设置波特率 MOV TL1,#00 MOV TMOD,#20 定时器2为工作方式2 MOV TCON,#40 启动定时器 SETB ES 允许串口中断 MOV SCON,#50 置串行口工作方式1 MOV P2,#0F RET (3)中断服务程序 0023 PUSH ACC 保护堆栈 PUSH PSW MOV DPH,#00 JB TI,TEMP1 判断是否为发送,是则跳转 WAIT:JNB RI,WAIT 判断是否为接收,否则循环 MOV A,SBUF 将接收的数据送到数据地址内 MOV @R0,A CLR 98 清接收中断 INC R0 DJNZ R1,TEMP1 数据若送完则将标志置1 SETB 00 TEMP1:CLR 99 清发送中断 POP PSW POP ACC RETI (4)延时及调D/A转换子程序 D/A:INC DPTR 延时 MOV A,DPH CJNE A,#FF,D/A JNB 00,D/A 数据未送完,返回 CLR 00 送完则将送完标志清零 ACALL OUT RET OUT:CLR A MOV A,@R0 将接收的串行口数据送到P2口 MOV P2,A SETB 90 封锁数据锁存器 MOV R3,#00 WAIT1:DJNZ R3,WAIT1 延时 CLR 90 解除封锁数据锁存器 RET (5)A/D转换及串口发送子程序 SEND:MOV DPTR,#ADRESS IN0通道地址首址 MOV R7,#08H 从IN0-IN7依次采集的通道个数 LOOP1:MOVX @DPTR,A 启动A/D转换 MOV R6 #0AH 延时100μs DELAY:NOP NOP NOP DJNZ R6,DELAY MOVX A,@DPTR 将转换结果送到指定地址R1 MOV @R1 A MOVX A,@R1 MOV SBUF,A 将指定地址数据从串口输出 INC DPTR INC R1 DJNZ R7,LOOP1 RET |
图3 程序流程图 4 结束语 作者单位:中科院等离子体物理研究所 合肥 230031
|