单片机的串行口是非常有用的,通过他我们可以把单片机系统的数据传回电脑处理或者接受电脑传过来的数据而进行相应的动作,下面我就给大家介绍上一下电脑的RS-232接口与单片机串行通信程序设计方法,www.51hei.com上还有很多这样的文章大家去搜索下。
RS-232简介:
在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯.RS-232-C接口(又称EIA RS-232-C)是目前最常用的一种串行通讯接口. ("RS-232-C"中的"-C"只不过表示RS-232的版本,所以与"RS-232"简称是一样的)它是在1970年由美国电子工业协会(EIA)联合贝尔系统,调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准.它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个25个脚的DB-25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定.后来IBM的PC机将RS232简化成了DB-9连接器,从而成为事实标准.而工业控制的RS-232口一般只使用RXD,TXD,GND三条线.
下面,让我们使用S51增强型单片机实验板来开发一个简单的串口通信实验程序,这是一个串口通信综合实验,需要全套餐客户的相关配件配合才能完成。通过该实验程序,我们可以检测实验板串口的状态,接收计算机发送来的数据,然后再发送回计算机,如果程序中发送和接收窗中显示的字符相同,则说明实验板的串口是良好的,能够正常收发数据,另外单片机接收计算机的控制指令,根据控制指令来控制实验板上的继电器动作。
首先让我们来看看我们做的通讯软件的实际效果。。。
| RS-232接口与单片机串行通信程序设计的界面 |
| |  | |
| | 图 1 | |
| | 注:当前按键:“K”,按键的ASC码:“75”,按键的16进制码:“4BH” | |
| S51增强型单片机实验板与电脑串口实现RS232通信运行效果图 |
| |  | |
| | 图 2 | |
| | 注:按压PC键盘的按键“K”单片机将串口接收到按键实时显示在液晶模块上(锁定了大小键)。 1、液晶模块第一行显示“PS2-KEY: K ”, 表示接收到PS2键盘的按键:“K” 2、液晶模块第二行显示“HEX:4Bh ASC:75 ”,表示K的HEX码为“4BH”,ASC码为:“75” | |
| | | |
| | | |
| | 图 3 | |
| | 注:按压PC键盘的按键“2”单片机将串口接收到按键实时显示在液晶模块上 1、液晶模块第二行显示“HEX:32h ASC:50 ”,表示K的HEX码为“32H”,ASC码为:“50” 2、液晶模块第一行显示“PS2-KEY: 2 ”, 表示接收到PS2键盘的按键:“2” | |
从上面两幅图中可以看到,我们实现主要目标如下:
1、在计算机上,VB6.0编写的通信测试程序检测的键盘操作,将我们的按压PS2键盘(PC键盘)按键显示在数据发送窗中,显示按键当前按键、按键的ASC码、按键的16进制码。同时将键值通过电脑的RS-232串口发送到S51单片机实验板上,实验板上的AT89S51单片机接收到数据后,以二进制方式显示在实验板的8位高亮度LED上,然后把接收到的数据重新发送回电脑的RS-232串口,电脑接收到后显示在程序的接收数据窗中。
2、单片机检测识别计算机发送过来的键盘键值,将按键值以二进制形式显示在P1口的8位高亮度LED上,同时,将当前按键、按键的HEX码、ASC码实时显示在1602液晶模块上面。
3、单片机接收计算机对单片机的控制指令,当计算机发送“继电器ON指令”时,则单片机驱动实验板上的继电器吸合;相反,如果计算机发送“继电器OFF指令”时,单片机驱动继电器释放,我们可以学习掌握计算机智能控制的原理,只要掌握了这种方法,我们要在电脑上轻轻点击鼠标就可以控制家里的电气开关了就不难了(操作方法,点击软件的“继电器”按钮,实验板的继电器吸合,再次点击按钮,继电器释放)。
4、单片机接收到数据后,发出一时短声提示。同时将数据重新发送回电脑串口,供电脑程序接收显示,电脑软件接收到单片机发送过来的数据后,显示在软件的接收数据窗中。
【RS-232接口与单片机串行通信程序设计】
该系统程序由单片机通信程序和电脑通信程序构成。在微机测控系统中,一般称计算机为上位机、而前端采集控制的单片机系统称为下位机。上位机主要负责所有测控数据的综合管理与下位机的调度控制,而下位机由单片机构成前端的测控系统,进行原始数据的采集及设备的控制,下位机受上位机的管理控制。
一、单片机程序开发
51单片机有一个全双工的串行通信口,非常适合与电脑进行通信,51单片机的串口开发在各种教科书上都有详细的介绍,我们这里不在重复,大家可以参考一下书籍。单片机程序功能主要如下:初始化串口、打开串口中断、接收电脑发送的数据、在1602液晶模块上显示数据、将数据发送回电脑RS-232串口、接收继电器控制命令、控制继电器动作等。
单片机通信参考程序如下:
ORG 0000H
AJMP START ;转到初始化程序
ORG 0023H
AJMP PGUART ;转到串行中断服务子程序
START: MOV SP,#60H ;堆栈指针初始化
MOV P0,#0FFH ;P0端口初始化
MOV P1,#0FFH ;P1端口初始化
MOV P2,#0FFH ;P2端口初始化
MOV P3,#0FFH ;P3端口初始化
MOV TMOD,#20H ;定时器T1工作于模式2,自动重装载
MOV TH1,#0FDH ;TH1初值为"0FDH",9600bps
MOV TL1,#0FDH ;TL1初值为"0FDH",9600bps
MOV SCON,#50H ;串行口工作于方式1,允许接收
SETB TR1 ;启动定时器T1
SETB ES ;允许串行口中断
SETB EA ;开总中断
CLR UABIT
;----------------------RS-232接口与单片机串行通信程序设计-------------------------------
MAIN: ...... ;主程序处理其他任务,等待串口中断
AJMP MAIN
PGUART: ...... ;串口中断服务子程序,接收处理数据
RETI
END
二、RS-232串行通信测试软件开发
计算机RS-232串行通信测试软件采用VB6.0开发,VisualBasic 6.0(简称VB6.0)以其简单易学,
VB6.0为可视化编程开发软件,开发程序简单易学,VB程序开发主要分为两步:第一步、使用VB控件设计出软件界面,第二步、给各种控件编写相应的执行程序代码,代码编写完成后可以运行查看结果了。
VB6提供了多种控件,其中MSCOMM.OCX是用于串行通信的控件,我们可将该控件添加到工具箱(Toolbox)内,这样就可以利用该控件进行串行通信程序的设计了。
下面介绍Mscomm控件的主要属性和方法:
1) CommPort:设置或返回串行端口号,VB6的取值范围为1~16,表示打开或返回通信端口号COM1~COM16
2) Setting:设置或返回串行端口的波特率、奇偶校验位、数据位数、停止位。如:Mscomm1.Setting=“9600,N,8,1”
3) PortOpen:打开或关闭串行端口,格式为:Mscomm1.PortOpen=『True/False』
4) InBufferSize:设置或返回接收缓冲区的大小,缺省为1024字节
5) InBufferCount:返回接收缓冲区内的等待读取的字节个数,可通过设置该属性为0来清除接收缓冲区
6) RThreshold:该属性为一阀值,当接收缓冲区内字节个数达到或超过该值后就产生OnComm事件
7) InputLen:设置或返回接收缓冲区内用Input读入的个数。若取0,则Input将读取整个缓冲区的所有内容
8) Input:该属性表示从接收缓冲区InputLen个字符
9) OutBufferSize:设置或返回发送缓冲区大小,缺省为512字节
10) OutBufferCounter:返回发送缓冲区内等待发送的字符数,可用来清空缓冲区
11) Output:向发送缓冲区传送一字符串,即向串口发送数据
第一步:开发程序界面
打开VB6.0 -> 新建“标准 EXE”建立一个新的工程。在工程窗口Form1中添加我们要使用的各种按钮和控件,其中一个图标如电话一样的控件就是MSCOMM串行通信控件了,该控件在界面设计时候可见,在程序运行时候不可见。最后,放置好了各种控件后,程序的界面界面就出来了,是不是很简单呀!如下图4所示:
| RS-232串口通信测试软件界面开发 |
| |  | |
| | 图 4 | |
第二步:VB软件编写
当软件的界面设计完成后,我们就可以给程序添加代码了,在程序中实现的主要功能如下:RS-232端口初始化、检测PC键盘按压的按键、发送按键编码、在数据发送窗显示当前按键编码、在接收数据窗中接收显示单片机发送来的数据,检测继电器控制按钮的操作,发送继电器控制命令。。。如下图5所示:
| RS-232串口通信测试软件程序代码编写 |
| |  | |
| | 图 5 | |