51单片机与pc机通讯

2024-05-18

51单片机与pc机通讯(精选5篇)

篇1:51单片机与pc机通讯

实验四单片机串行口与PC机通讯实验 一.实验目的

1.掌握串行口工作方式的程序设计,掌握单片机通讯的编制。

2.了解实现串行通讯的硬环境,数据格式的协议,数据交换的协议。3.了解PC机通讯的基本要求。二.原理说明

1.MCS-51单片机的串行接口有四种通信方式。其中方式1的波特率由定时器1的计数溢出来决定,用公式表示如下:

若已知晶振频率,则可以通过设置定时器计数初值来确定波特率; 2.当用GR命令执行程序时,实验机内部会将8031串行口电路切换与PC机通讯,无须连线; 3.程序执行前,进入LCA51,加载程序后,才进入调试菜单工具中的对话窗口,然后执行GR0,就可实行单片机串行口与PC机通信实验。三.实验设备

1.单片机开发学习板。2.PC机及配置要求如下:

①IBM PC机或兼容机(586及以上机器); ②安装有Windows9x或更新的版本;

③PC机要求有一个空余的25芯(或9芯)串行通信口。四.实验内容

利用51单片机串行口,实现与PC机通讯。

本实验实现以下功能,将从实验机键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符0-F(必须为大写字母)显示到实验机的数码管上。五.实验电路及连线

实验电路已在实验机监控电路上构成。

CS8279已固定接至8700H,无须再接。模块中的十个短路套都套在8279侧; 8279状态口地址为8701H; 8279数据口地址为8700H; 六.实验程序框图

七.实验报告 1.如果系统主频为11.0592MHz,设置串行口工作方式为方式1,当波特率分别为1200bps、4800bps和19200bps,试分别编写初始化程序; 2.心得体会及其它。

篇2:51单片机与pc机通讯

我用了两个晚上的时间查阅一些资料,利用三菱PLC的扩展RS485通讯板与其51单片机连接通讯,可写PLC任意的地址。长度可达1000米,看见网上写的都很烦且对三菱和单片机不是很熟的朋友来说有一定的阅读难度,今天将它与大家分享。希望在此基础上大家能扩展出自己想要的功能,过些时间有空我在写个半双工的程序。硬件部分:

我用的是天祥单片机实验板,由于没有RS485接口,我利用ADM485芯片自制了一个485接口与三菱PLC的扩展RS485通讯如图,但如果要进行半双工通讯,须将P3.0口到下载程序的RS232芯片的线断开可用一个跳线,用RS485的时候断开RS232,用RS232的时候插上跳线帽。硬件连接如图

PLC程序:

通讯我用单片机做主机(只发送指令),PLC做从机(只接收指令),单工单向,以便初学着掌握。

格式:1位启始,8位数据,一位停止。所以PLC寄存器D8120:0C81.plc程序很简单不懂的可以看下三菱PLC的通讯手册。如下图:

三:单片机程序:

#include

/*单片机的头文件*/ unsigned char code tab[]={0x17,0xff};/*PLC输出的Y点数,PLC输出Y灯0125678亮*/ sbit led=P1^1;

/*将RS485置为发送数据模式*/ unsigned char i;void init(){ SCON=0x50;

/*串口中断开*/ TMOD=0x20;

/*定时器设置*/

TH1=0xfd;

/*定时时间的高位*/ TL1=0xfd;

/*定时时间的低位,速度为9600BPS*/ TR1=1;

/*定时器开*/ EA=1;

/*开总中断*/ TI=0;

/*复位串口中断*/ led=1;

/*将RS485置为发送数据模式*/ } void main(){ init();

/*调用子程序*/ for(i=0;i<2;i++){ SBUF=tab[i];

/*将数据发送到串口*/ while(!TI);

/*等待串口数据发送结束*/ TI=0;

/*复位串口中断*/ } } 四:注意点。

1:RS485的线不能接反,否则数据将不正确。

2:单片机的晶振要选择11.0592MHZ,否则PLC接收到数据也不正确。

3:RS485芯片的电源不能接反,否则要烧坏芯片。

今天要去山东调试机器,现在正在高铁上,刚好有空把这篇心得写好,有错误的地方还请大家指正,也希望有共同爱好的一起交流心得。

QQ:79814563 注明时工控交友

电话:***

篇3:51单片机与pc机通讯

PC机与单片机组成的主从系统很常见, 在很多领域中都得到了应用。在这些系统中, PC机与单片机之间一般采用串行通信方式, 按照一定的格式, 进行数据、指令的交换, 完成PC机对单片机的控制、数据前送, 或者单片机上数据、状态等信息的回送。

当单片机数量较多时, 比较容易实现PC机对所有单片机的控制。一般在这种情况下, 采用广播的方式。所有单片机都挂在一条串行数据总线上, 只需对单片机进行地址编码, PC机将地址数据和控制报文进行广播, 单片机接收广播数据后进行地址比对, 筛选出所需的数据, 完成相应的数据传送。

如果PC机要对单片机多机进行广播, 并回传所有单片机的信息, 即单片机还要发送数据至PC机, 再加上单片机数量较多 (大于100个单片机) , 则要实现PC机与单片机多机的互相通信, 难度是比较大的。

本文提出了一种切实可行的方法, 通过实际电路搭建和调试, 实现了PC机与单片机多机的互相通信, 达到了预定的目标, 使该系统具有如下功能:

(1) PC机可以对所有100多个单片机进行控制, 根据需要, 发送不同控制字到达每个单片机;

(2) PC机对单片机的状态修改是随机的、没有规律的;

(3) 所有单片机将自身的一些状态信息按照顺序回传至PC机。

1 互通信的几种实现方法

PC机至多个单片机的广播比较简单, 难度较大的是多个单片机发送数据至PC机。由于100多个单片机均挂在一个数据总线上, 系统设计的难点就在于数据总线控制权的传递, 绝对不能出现有2个或者2个以上设备同时向总线上发送数据。系统设计之初, 考虑了两种总线控制方式有接力式和点名式:

(1) 接力式总线控制方式

这种控制方式的基本思路是:初始化后, 所有单片机在接收完PC机数据后, 处于串行接收状态, 不占用总线控制权。PC机发出回送开始指令, 第1个单片机响应该指令, 并立即占有总线控制权, 向总线上的PC机发送数据, 数据发送完成后, 紧接着第1个单片机发送控制指令, 通知第2个单片机, 同时第1个单片机退出总线控制权, 处于接收状态;第2个单片机接收到第1个单片机的开始指令后, 和前面第1个单片机一样, 开始向总线上发送数据, 并在结束传送之后通知第3个单片机, 如此这般, 不断接力传输, 轮流控制总线, 直至最后一个单片机完成数据传送。在单片机控制总线, 进行回传的过程中, 如果要通过PC机向某个或者某些单片机传送数据时, PC机软件会自动将这些数据存储下来, 等到最后一个单片机接收向PC机送数据之后, PC机再占用数据总线, 开始向单片机传送数据。

(2) 点名式总线控制方式

该控制方式与接力式控制方式大体相同, 不同的是这种控制方式需要等待PC机点名指令。系统初始化后, 单片机接收PC机指令、数据之后, PC机发送点名指令, 让第1个单片机开始传送数据, 第1个单片机接收该指令后, 立即占用总线, 开始传送数据, 传送结束后, 发送结束指令至PC机, PC机在接收该结束指令后, 立即占用总线, 再发送点名指令, 让第2个单片机开始传送数据, 如此不断动作, 直至最后一个单片机结束传送。

在单片机传送数据时, 如果PC机要送数据至单片机, 可以在接收完某个单片机数据之后, 暂停发送点名指令, 直接发送数据至某个或者某些单片机。待数据发送完成后, 继续接上原先的中断的点名顺序号, 继续向后点名、传送数据。综合考虑这两种总线控制方式, 不难发现, 由于没有来回传递点名的指令时间开销, 接力式的传输效率会略高于点名式, 所以, 一开始还是采用了接力式的控制方式。

但是在进行大的系统联调时, 问题出现了。由于接力式脱离PC机的过程干预, 一旦出现某个单片机程序跑飞、死机时, 整个程序就没法进行下去, 一直处于等待状态, 整个系统就瘫痪了。调试过程中出现过好几次死机的情况。最后, 不得不回头修改总体方案, 采用点名式的控制方式。如果中间某个单片机出现异常, 没有按照预定的程序回传数据, 则PC机就可以判断该单片机死机, 在经历过一段等待时间后, 自行跳过该单片机, 点名下一个单片机, 继续后续的回传和程序。如果该故障单片机还在占用总线, 影响下一个单片机的工作, 则对单片机公用的复位端发送一个整体复位信号, 让所有单片机复位。经过重新调整方案后, 经过长时间运行, 均没有出现整机死机的状况, 总体运行情况良好。另外, 这种控制方式还有其他两种控制方式所不具有的优势:可以随时打断回传, 几乎实时发送新的指令到某个或者某些单片机上, 该功能是非常实用的。

2 系统的硬件构成

根据系统的总体要求, 构建了如图1所示的硬件平台。

整个系统采用RS 485总线结构, RS 485为差分平衡数字通信方式, 具有较强的抗干扰能力, 广泛应用于远距离数字通信。RS 485和RS 422A总线最大的区别是RS 485可以单工双向传输, 而RS 422A只能单向传输数据, 在本系统由于存在大量单片机, 如果使用RS 422A, 电缆会增加一倍。另外, 由于标准的RS 485链路只可以连接32个设备[6], 故每个转换器上要增加驱动器。目前PC机上已经很难找到串口了, 故PC机与RS 485总线之间采用PL2303芯片进行桥接。PL2303为Prolific公司产品, 可以很方便地将USB接口转换成标准RS 232电平, 用户根本不用关心复杂的USB协议和规范, 在PC端的软件编程中, 只需像标准com口一样使用USB口, 因为Prolific公司提供的驱动中, 已经将该USB口模拟成了一个标准的com口了。该芯片最高速度可以达到115 200 b/s, 极大地方便了普通串行通信与PC机的连通。复位监视与读写转换电路也是一个单片机, 不过该单片机只完成两个功能。一个是就是接收RS 485总线前的PC机TXD (RS 232端的TXD) 发出信号, 一旦出现PC机发出的全局复位串行代码后, 立即产生一个全局复位信号, 将所有单片机进行复位。该功能就是为了防止某个单片机出现故障, 一直意外占用总线, 导致整个系统瘫痪。

为了实现RS 485的半双工通信, 必须有一个方向切换控制信号, 如图2所示。在单片机端, 这个控制信号很容易获得, 引出一个I/O脚, 即可在单片机程序中控制该信号的切换;但是PC机端的RS 485的切换就相对比较麻烦, 这也是复位监视与读写转换电路完成的另外一个重要功能:读写转换。如果PC机要占用RS 485总线, 则发送一个特定的串行码, 该专用单片机接收并响应该串行码, 切换RS 485控制器, 开始占用485总线并发送数据, 如果PC机结束发送数据, 则要同时发送一个特定的串行码, 通知该专用单片机, 进行相应的RS 485切换。单片机及其附属电路组成了相关的功能电路。主单片机采用了Silicon公司的8051F020型增强型单片机。该单片机最大的优势是内部集成的模拟电路功能较为强大、单片机运行速度快、程序编写-烧写-仿真较为方便[1]。

3 系统的软件构成

软件分为3个部分:PC机上位机程序、单片机通用程序和专用单片机程序。专用单片机的程序运行在复位监视与读写转换电路中, 该程序较为简单, 就是在上电后, 一直按照约定的波特率和数据格式接收PC机送出的串行数据, 若得到的数据符合约定的复位格式, 则送出复位信号;若接收到的数据符合总线切换的格式, 则送出相应的切换信号。PC机上位机程序比较复杂, 可以根据用户的实际需要, 编写相关的应用程序。在本文中, 采用Delphi编写了应用程序, 实现了对单片机群的参数设置、状态调整、信息反馈和系统控制。

单片机通用程序分别运行在100多个单片机上, 是实现系统功能的基础。图3为单片机程序流程图。

单片机初始化后, 接收PC机送来的初始指令, 然后开始运行主程序, 执行单片机的主功能。同时开放串行接收中断, 一旦接收到PC机发来的指令, 就进行对比判断, 如果是PC机对自己的点名, 则响应PC机的回送指令, 开始占用总线, 向PC机传送数据, 结束后向PC机发送结束状态字, 结束占用总线, 回到主程序, 同时等待接收串行数据。

4 结语

经过大量试验, 课题组应用点名式总线控制方式, 成功解决了PC机与大量单片机的双向互通问题, 实现了100多个单片机与主控PC机之间的互通信, 达到了设计要求。电路经过长时间运行, 实际情况表明, 该系统运行稳定、控制灵活、可靠性高, 采用的点名式总线控制方式具有很好的实用价值。

参考文献

[1]陈德金.基于8051F020 的数据采集分析系统[J].中国测试, 2003, 35 (2) :57-60.

[2]谢平, 陈学煌.单片机多机串行通信的设计[J].甘肃科技, 2006, 22 (9) :48-49.

[3]桑胜举.基于RS 422总线的单片机多机通信接口的设计与实现[J].泰山学院学报, 2008, 30 (6) :5-10.

[4]胡汉才.单片机原理及其接口技术[M].2版.北京:清华大学出版社, 2004.

[5]张鹏华.报警系统中PC机与单片机的主从控制方案[J].邵阳学院学报, 2004 (1) :31-33.

[6]马东.基于RS485总线的温湿度在线检测系统[J].中国农机化学报, 2013, 34 (2) :121-126.

[7]郝涛.基于RS485主从串口通信协议的设计[J].装备制造技术, 2013, 23 (3) :38-40.

[8]王泽华, 吴庆洪.RS 485总线在集中抄表中的应用[J].科技创新与应用, 2013 (2) :40-41.

[9]姜延涛, 刘鑫淼, 毛庆国.基于C8051F020的温度传感器系统设计与实现[J].科教文汇, 2012 (15) :73-74.

篇4:51单片机与pc机通讯

关键词: SerialPort;串行通讯;波特率

1 引言

PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC机的RS-232串行接口与外部设备进行通讯,是许多测控系统中常用的一种通信解决方案。

在Microsoft.Net技术广泛应用的今天人们采用了许多方法在Visual Studio.Net中来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件,这是最简单、最方便的方法,但需要注册;第二种方法是自己用API写串口通信;第三种方法是采用微软推出的最新版本Visual Studio 2005开发工具,NET Framework 2.0类库中包含的SerialPort类,方便地实现了所需要串口通讯的多种功能。本文着重讨论了Visual Studio 2005开发工具中SerialPort类的设计方法。

2 SerialPort类常用属性、方法和事件

2.1 命名空间

System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问。

2.2 串口的通讯参数

①通讯端口号:

[PortName]属性获取或设置通信端口,包括但不限于所有可用的COM端口,该属性返回类型为String。

②通讯格式:

SerialPort类分别用[BaudRate]、[Parity]、[DataBits]、[StopBits]属性设置通讯格式中的波特率、校验位、数据位和停止位。

2.3 串口的打开和关闭

SerialPort类中打开关闭串口相应的是调用类的Open()和Close()方法。

2.4 数据的发送和读取

SerialPort类调用重载的Write和WriteLine方法发送数据,其中WriteLine可发送字符串并在字符串末尾加入换行符。读取串口缓冲区的方法有许多,其中除了ReadExisting和ReadTo,其余的方法都是同步调用,线程被阻塞直到缓冲区有相应的数据或大于ReadTimeOut属性设定的时间值后,引发ReadExisting异常。

2.5 DataReceived事件

DataReceived事件在接收到了[ReceivedBytesThreshold]设置的字符个数或接收到了文件结束字符并将其放入了输入缓冲区时被触发。

3 PC机与8051实现串行通讯需要解决的问题

3.1 TTL电平与RS232电平的转换

89C51单片机采用的是TTL电平且采用正逻辑[1],而PC机采用RS232与外部设备进行通讯,RS232采用负逻辑,因此MCS51单片机串行口与PC机的RS232接口相连进行通讯时必须进行电平的转换。通常采用MAX232电平转换芯片。

3.2 单片机与PC机通讯时波特率的设定

PC机与51单片机双方进行通讯时必须采用相同的波特率,PC机的波特率默认为9600b/s, 51系列单片机有两个定时/计数器,四种工作方式,一般用定时器工作于方式2(可重新装载的8位定时器/计数器)作为定时波特率发生器。因此单片机与PC机进行异步通讯时的波特率可由公式3.1得出:

其中SMOD是单片机电源控制寄存器(PCON)中的位7,开机(RESET)时,SMOD的设定值为0,亦可用指令“ANL PCON,#7FH”清除为0。fosc为单片机的晶振频率。根据需要的波特率即可得计数初值TH1。

4 单片机与PC机通讯时通讯协议的约定及部分初始化程序

在单片机与PC机的通讯中,单片机一般作为下位机负责从控制对象采集数据(如压力、流量等),上位机则进行现场可视化检测。传输数据采用二进制数据,上位机与下位机之间采用主从式通讯。以下给出单片机和VC# 环境下部分的通讯程序。

4.1 串口通讯协议约定

波特率为9600b/s,无奇偶校验位,传输的数据位为8位,停止位为1位,用串行口工作于方式1。单片机的晶振频率fosc=11.059MHz,定时器T1工作于方式2作为波特率发生器,根据计数初值的计算公式(3.1)可得计数初值TH1为0FDH 。

4.2 单片机的串行通讯程序

单片机串行通讯程序,给出了初始化程序:

ORG0000H

AJMP START;转到初始化程序

ORG0023H

AJMP PGUART ;转到串行中断服务子程序

START: MOVSP,#60H ;堆栈指针初始化

MOVP0,#0FFH ;端口初始化

MOVP1,#0FFH

MOVP2,#0FFH

MOVP3,#0FFH

MOVTMOD,#20H;定时器T1工作于模式2,自动重装载

MOVTH1,#0FDH;TH1、TL1初值为"0FDH",9600bps

MOVTL1,#0FDH

MOVSCON,#50H;串行口工作于方式1,允许接收

SETB TR1 ;启动定时器T1

SETB ES ;允许串行口中断

SETB EA ;开总中断

MAIN:...... ;主程序处理其他任务,等待串口中断

AJMP MAIN

PAUSE:...... ;串口中断服务子程序,接收处理数据

RETI

END

4.3 上位机的串行通讯程序

例:发送及接收数据的程序:

private void button1_Click(object sender, EventArgs e)

{

string a;

SerialPort Ser1 = new SerialPort("com1", 9600, Parity.None, 8, StopBits.One);

Try

{

Ser1.Open();

}

catch (InvalidOperationException ex)

{

MessageBox.Show(ex.ToString());

}

if (textBox1.Text == "")

{

MessageBox.Show("Err");

Ser1.Close();

}

else

{

a=textBox1.Text;

try

{

//p.WriteLine(a);

p.Write(a);

}

catch(InvalidOperationException ex)

{

MessageBox.Show(ex.ToString());

}

textBox2.Text = Ser1.ReadByte().ToString();

Ser1.Close();

}

}

5 结束语

单片机与上位机的通讯在工业现场中应用的比较广泛,本文对C#提供的串行通讯SerialPort类来实现PC机与51单片机的通讯进行了探讨。实践证明,这种方案是可行的,能保证双方通讯正常。

参考文献

[1]蔡朝洋.单片机控制实习与专题制作.北京航空航天大学出版社.

篇5:51单片机与pc机通讯

关键词:VB6.0,单片机,串行通讯,MSComm控件,医疗器械控制

一、前言

当前, 信息技术在医疗行业的应用越来越多。随着计算机技术特别是单片微型机技术的发展, 在各种单片机应用系统的设计中, 人们已越来越多地采用单片机来对一些工业控制系统中如温度、流量和压力等参数进行检测和控制。而串行通信是指按照逐位顺序传递数据的通信方式, 在控制领域的现场监测、分布控制等场合有着重要的应用价值。鉴于PC机具有强大的监控和管理功能, 单片机则具有快速以及容易控制的特点, 通过PC机的RS-232串行接口与外部设备进行通信, 是许多测控系统中常用的一种通信解决方案。因此, 如何实现PC机与单片机之间的通讯具有非常重要的现实意义。在VB环境下PC机与单片机之间实现串行通讯的软硬件方案十分关键。PC机的通讯程序使用Visual Basic编写, VB是Microsoft公司推出的Windows应用程序开发工具, 因其具有面向对象的设计方法, 友好的用户界面、编程高效、数据处理及驱动底层硬件功能强等优点而受到广泛的使用, 而且Visua Basic 6.0版本带有专门实现串行通讯的MSCOMM控件, 成为许多用户开发PC机与单片机串行通信程序的首选工具。本文PC机通讯程序利用VB提供的MsComm串行通讯控件来完成, 单片机的程序用汇编语言来写。

二、系统介绍

(一) MAX232芯片介绍

在医学器械的自动化方面, 芯片十分关键。目前, 大多数PC机都有一个串行通讯端口RS-232 (又称EIA RS-232-C) 用于两台计算机间进行串行通讯。RS-232通讯接口是一种标准化的串行接口, RS-232的逻辑电平用正负电压表示, 为了提高抗干扰能力和增加传送距离, RS-232的每个脚线的信号和电平规定采用负逻辑电平, DC (-15-5V) 规定为逻辑“1”, DC (+5-+15V) 规定逻辑“0”, DC (-5-+5V规定为过渡区) (见图1) 。RS-232端口是计算机与其他设备沟通的最常用的接口, 不但操作简单, 而且价格便宜。在8051单片机的内部有一个全双工的异步串行I/O口, 它的输入和输出使用5V逻辑而不是RS-232电压, 如何进行两种信号的转换, 是连接时需要解决的问题, 事实上, 解决的方法很简单, 只需使用一个诸如MAX232这样的专用芯片即可。

(二) 串行接口介绍

可以将PC串行接口与经过转换的符合RS-232C电气标准的单片机串行接口连接即可实现二者之间的异步串行通信。单片机串行接口有一个全双工串行接口, 采用TTL逻辑电平, 经过MAX232芯片可方便地转换成RS_232电气标准。

(三) MSComm通讯控件简介

事实上, VB6.0为可视化编程开发软件, 开发程序简单易学, VB6提供了多种控件, 其中MSCOMM.OCX是具有强大功能串行通信的控件, MSComm是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件, 它为应用程序提供了通过串行接口收发数据的简便方法, 以十分简便地作出良好的人机界面。MSCOMM控件支持以文本和二进制格式传输数据, 由于下位机是单片机, 处理二进制数据较为方便。具体的来说, 它提供了两种处理通信问题的方法:一是事件驱动 (Event-driven) 方法, 二是查询法。

1、事件驱动方式

通过事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下, 在事件发生时需要得到通知, 在编程过程中, 可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时, 可靠性高。每个MSComm控件对应着一个串行端口。如果应用程序需要访问多个串行端口, 必须使用多个MSComm控件。

2、查询方式

另外, 查询方式实质上还是事件驱动, 但在有些情况下, 这种方式显得更为便捷。在程序的每个关键功能之后, 可以通过检查CommEvent属性的值来查询事件和错误。如果应用程序较小, 并且是自保持的, 这种方法可能是更可取的。MSComm控件的主要属性和方法如下:

CommPort:设置并返回通讯端口号。

Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

PortOpen:设置并返回通讯端口的状态;也可以打开和关闭端口。

InputMode:设置或返回接收数据的类型。

InputLen:设置或返回一次从接收缓冲区中读取字节数。

InputBufferSize:设置或返回接收缓冲区的大小, 缺省值为1024字节。

Input:从接收缓冲区返回和删除字符。

Output:向传输缓冲区写一个字符串。

OutBufferSize:设置或返回发送缓冲区的大小, 缺省值为512字节。

OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字符数。

Output:向发送缓冲区发送数据, 该属性设计时无效, 运行时只读。

三、VB环境下通讯程序的设计

其实, 通讯以一个测控系统的上位机和下位机之间的通信为背景, 给出单片机部分和VB环境下的通信程序实例, 系统中单片机负责数据的采集、处理和控制, 上位机进行现场可视化检测, 通信协议采用半双工异步串行通信方式, 通过RS232的RTS信号进行收发转换, 传输数据采用二进制数据, 上位机与下位机之间采用主从式通讯。

(一) 8051单片机的串行通讯程序

如果让8051单片机从外部采集到的一组数据 (40个) , 把数据存放RAM20H-3DH区域, 并且将这个数据块传送给PC机, 传送前由单片机先向PC机发送数据#55H (联络信号) , 在PC机接收到信号后, 向单片机回送数据#0AAH (回应信号) , 经检验正确后, 单片机再开始向PC机传送数据。

对串行口的操作可分为4步进行, 先将串行口初始化, 然后发送联络信号;继而接收联络信号, 再发送数据。以下程序由汇编语言编写:

(二) 计算机的串行通讯程序

加强程序设计是关键步骤。把从单片机读来的数据分别赋给数组, 就能实时了解数据采集的情况, 然后描绘出波形曲线。首先建立一个VB项目, 并在窗体上安排一个MSCOMM控件, 作为串行通讯的信道。调出属性窗口, 设置变量COMPORT属性为2, 另外将Rthreshold属性设为1, 从而达到只要外界传送任何字符串, 随即引发事件。安排一个定时器, 作为连续动作的执行控件, 只要一位数据发送完就能引发中断, 发送下一个数据。设置一个picturebox对象, 把由单片机传送来的数据以线条方式绘制在图片框控件上。再调出属性窗口, 把其中的Name属性改为“Graph1”。本程序接收从单片机发来的40个数据, 当数据进入PC机的输入缓冲区后, 程序会不断读取输入缓冲区的数据, 并将这些读入的数据收在一起, 赋给数组。计算机RS-232串行通信测试软件采用VB6.0开发, VisualBasic 6.0 (简称VB6.0) VB支持坐标格式, 我们可以用SCALE函数作出坐标, 定义X轴由0到40, 表示有40个数据, Y轴由-20到+20, 表示采集数据的范围是-20到+20, 表达式为SCALE (0, +20) - (40, -20) , 为了实时采集数据, 可以用定时器不断地更新曲线。这样就可以动态地显示被采集的数据。

以人工智能的理论为基础, 根据计算机故障诊断专家系统的实践经验, 以及收集了大量计算机故障诊断资料, 从计算机不同的故障特征建立了诊断指标, 开发计算机故障诊断专家系统。结果表明, 该指标科学合理、有效, 可以进行故障诊断, 在现实生活中具有广泛的应用价值。这样, 将人工智能与离散事件系统仿真技术相结合, 以单片机硬件电路为专家系统的知识来源, 建立了单片机硬件配置专家系统, 并且阐述了一种基于离散事件系统仿真原理的单片机系统仿真软件的仿真策略, 应用进程交互法对单片机应用系统的软、硬件实现了仿真。

四、VB环境下通讯程序的设计

通讯程序的设计是一个重要环节。VB提供了串行端口控制Mscomm来为应用程序提供串行通讯。该控件屏蔽了通信过程中的底层操作, 程序员可以设置、监视Mscomm控件的属性和事件, 结合Timer控件即可完成对串行口的初始化和数据的输入输出工作。Mscomm控件的主要属性如下:

Commport设置并返回通讯端口号。端口号可以设置为1-16的任何数, 如Mscomm.Commport=2表示设置当前通讯端口为COM2。

Setting设置并返回波特率、奇偶校验、数据位、停止位。格式为Mscomm.Setting=String。String是一个包含4部分的字符串:第一部分为波特率;第二部分为奇偶校验, N表示不校验, M表示符号校验, E表示偶校验, O表示奇校验, S表示空格校验;第三部分为数据位数, 其可选值为4, 5, 6, 7, 8;第四部分为停止位位数, 其可选值为1, 1.5, 2。Setting属性的缺省值为“9600, N, 8, 1”。

Portopen设置并返回通讯端口的状态, 也可以打开和关闭端口。

Input从接收缓冲区返回和删除字符。该属性在运行时为只读。

InputLen设置并返回每次Input属性从接收缓冲区中读取的字符数。InputLen属性的缺省值为0。设置InputLen为0时, Input将读取接收缓冲区的全部字符。

Output向传送缓冲区写数据。要传送的数据可是文本数据或二进制数据。

CommEvent返回最近的通讯事件或错误。只要有通讯错误或事件发生错误时就会产生Oncomm事件。CommEven属性中存有该错误或事件的数值代码。Timer控件的主要属性如下:Enabled返回或设置一个值, 该值用来确定一个窗体或控件否能够对用户产生的事件作出反应。通过把Enabled设置为“Galse”来使Timer控件成为无效, 将取消由控件的Interval属性所建立的倒计时数。Interva返回或设置对Timer控件的计时事件调用间的毫秒数。Timer控件的Enabled属性决定该控件是否对时间的推移作出响应。将Enabled设置为“False”会关闭Timer控件, 设置为“True”则打开Timer控件。当Timer控件置为有效时, 倒计时总是从其Interval属性设置值开始。创建Timer事件程序。可通知VB在每次Interval到时该做什么。Timer控件和Enabled属性设置为“True”时, VB将在Interval时间到后自动访问Timer_Timer过程。为实现通讯程序, 须在VB开发环境下设置一个用做控制通讯的窗体。窗体上主要有一个通讯控件Mscomml和两个Timer控件。VB的特点是事件驱动, 定时器控件会定时触发相应事件的驱动程序。

(一) 发送单片机命令

事实上, 为了使主机能够对整个检测过程进行实时控制, 须要在发送命令以后设定等待的时间, 也可以通过条件判断下一步是发达还是接收命令。对发送的命令, 可能是文本方式或二进制代码。在发送二进制代码时, 应特别注意发送的格式。发送命令过程是一个带参过程, 这样可使发送命令简便易行。具体程序如下:

(二) 接收数据

接收数据是一个被动的过程, 可以通过函数来实现, 由定时器开启。在接收过程中, 多数用特征字符, 如“OK”、“#”等。这些需要在通讯协议中约定。

(三) Timer控件控制

在实际运用过程中, 通过Timer控件来控制通讯中的发送命令和接收数据过程, 在通讯程序中设置两个Timer控件分别控制发送单片机命令和接收单片机数据。为了实现一台PC机和多单片机之间的通讯, 可在一个Timer控件的过程中, 在发送命令之前设定命令参数和要接收数据的单片机号, 然后发送单片机命令;在另一个Timer控件的过程中, 根据发送前设定的单片机号, 接收不同单片机的数据。Timer控件控制程序如下:

(四) 自动接收、监视总线状态和通讯错误的处理

在实际应用中, 自动接收、监视总线状态和通讯错误的处理可以通过OnComm事件实现。VB程序运行过程中只要设置MSComm1.Rthreshold=1, 在接收事件发生时程序就会自动访问MSComm1.OnComm () 过程。由于外界干扰或电压波动等原因, PC机和单片机之间的通讯可能会出现错误, 如接收缓冲区溢出、网络端口超速等。这些可能发生的事件都能在代码中引起运行错误。为了处理这些错误, 须要将错误处理代码添加到程序中。通过控件中的OnComm事件可以捕捉和处理错误。在通讯过程中所发生的通讯错误是CommEvent属性返回的。当CommEvent属性值发生改变时, 表明有通讯错误, 就会产生OnComm事件。同时, 可以利用自动引发OnComm事件的特点在接收过程中加入状态显示码。这样可以监视通讯线路状态, 得到单片机和主机及单片机和单片机之间的通讯进程。总之, 基于高级语言实现的PC机与单片机的通讯提高了单片机的开发水平, 同时也降低了单片机的开发难度, 我们以此为开发工具并用于多种医疗器械的中心控制部分, 对推动已有医疗器械的更新换代和新型医疗器械的研发都具有重要的实用价值。同时, 也为单片机在其他应用领域的开发展示了更为广阔的前景。VB6.0具有面向对象的设计方法, 友好的用户界面, 利用VB6.0面向对象和可视化编程的特点, 用MSComm控件可以比较方便地开发串行通信程序, 从而实现PC与单片机系统的通信, 对小型测控系统的设计具有很大的实用性。在采用以PC机为控制中心的数据采集自动化控制系统中, 通常需要单片机采集数据, 然后用异步串行通讯方式传给PC机, PC对单片机进行定时控制, 需要多个单片机协同工作。如果系统不很复杂, 可通过定时器控件控制收发过程, 在必要的地方自动接收装置, 使定时控制和通讯过程完美地结合起来。这样, 可以免去“握手”协议的繁琐过程, 简化编程, 提高速度。VB具有面向对象的设计方法, 友好的用户界面, 简单方便的串行通讯和实用性强等优点, 无需借用其他语言就可以开发出优秀的控制系统通讯软件。本文介绍了在Windows 98环境下如何利用VB来实现PC机与多个PS1016单片机之间的串行通讯。

参考文献

[1]、黄兴琦, 陈初开, 刘二军.单片机与WINDOWS下PC机的串口通信研究[J].唐山学院学报, 2007 (4) .

[2]、张传伟, 王昀睿.VB下PLC与PC串口通信的实现[J].中国科技信息, 2005 (12) .

[3]、肖汉敏, 冯毅.串行通信在实时数据采集中的应用[J].微计算机信息, 2007 (13) .

[4]、杨军, 乔晓军, 王成.基于专家系统的禽舍环境监控系统设计[J].农机化研究, 2007 (6) .

[5]、樊春峰, 李劲伟.用VB开发上位机与OMRON PLC之间的一种通讯程序[J].机电工程, 2002 (2) .

[6]、叶柏峰, 张长利, 于艳, 白丽君.基于VB的PLC与计算机串行通信设计[J].东北农业大学学报, 2007 (3) .

[7]、蔡倩, 经亚枝.Windows环境下PLC与上位机的串行通信[J].东北农业大学学报, 2005 (3) .

[8]、杨久红, 王小增.MSComm控件实现PC与PLC串行通讯[J].东北农业大学学报, 2005 (5) .

上一篇:《导盲狼》读后感下一篇:一年级爱作文:之前爱坐在树荫底下的外婆不在