linux cpu占用率如何看
449
2022-11-06
电脑的RS-232接口如何才能与单片机实现串口通信
RS-232简介:
RS-232接口与单片机串行通信程序设计的界面
图 1
注:当前按键:“K”,按键的ASC码:“75”,按键的16进制码:“4BH”
S51增强型单片机实验板与电脑串口实现RS232通信运行效果图
注:按压PC键盘的按键“K”单片机将串口接收到按键实时显示在液晶模块上(锁定了大小键)。
1、液晶模块第一行显示“PS2-KEY: K ”, 表示接收到PS2键盘的按键:“K”
2、液晶模块第二行显示“HEX:4Bh ASC:75 ”,表示K的HEX码为“4BH”,ASC码为:“75”
注:按压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液晶模块上面。
4、单片机接收到数据后,发出一时短声提示。同时将数据重新发送回电脑串口,供电脑程序接收显示,电脑软件接收到单片机发送过来的数据后,显示在软件的接收数据窗中。
【RS-232接口与单片机串行通信程序设计】
一、单片机程序开发
51单片机有一个全双工的串行通信口,非常适合与电脑进行通信,51单片机的串口开发在各种教科书上都有详细的介绍,我们这里不在重复,大家可以参考一下书籍。单片机程序功能主要如下:初始化串口、打开串口中断、接收电脑发送的数据、在1602液晶模块上显示数据、将数据发送回电脑RS-232串口、接收继电器控制命令、控制继电器动作等。
单片机通信参考程序如下:
ORG 0000H
AJMP START ;转到初始化程序
ORG 0023H
START: MOV SP,#60H ;堆栈指针初始化
MOV P0,#0FFH ;P0端口初始化
MOV P1,#0FFH ;P1端口初始化
MOV P2,#0FFH ;P2端口初始化
MOV P3,#0FFH ;P3端口初始化
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: 。。.。。. ;串口中断服务子程序,接收处理数据
END
二、RS-232串行通信测试软件开发
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:向发送缓冲区传送一字符串,即向串口发送数据
第一步:开发程序界面
RS-232串口通信测试软件界面开发
图 4
第二步:VB软件编写
当软件的界面设计完成后,我们就可以给程序添加代码了,在程序中实现的主要功能如下:RS-232端口初始化、检测PC键盘按压的按键、发送按键编码、在数据发送窗显示当前按键编码、在接收数据窗中接收显示单片机发送来的数据,检测继电器控制按钮的操作,发送继电器控制命令。。。如下图5所示:
RS-232串口通信测试软件程序代码编写
图 5
【串行通信实验操作】
完成了单片机通信程序及PC上我VB程序开发后,我们编译工程,得到单片机芯片烧写的HEX格式目标文件rs232test.hex和串口测试程序可以执行文件RS232test.exe,然后我们就可以拿出实验板,马上进行串口通信实验了,检测一下我们的实际通信效果。
1、使用ISP编程器将目标文件rs232test.hex烧写到AT89S51单片机中
通过实验加深对51单片机串口的认识:
下面我们通过这套串口测试程序来做个额外实验。理论上,当我们按压键盘上的按键,所有按键都会发送到单片机,然后再返回计算机上的,在串口测试软件上的PC发送数据窗和接收数据窗中显示的字符数目、字符应该是完全相同的,如上面图1中显示。但是,当我们连续快速按压PC键盘(注意:连续速度要足够快哦,才能看到实验现象)时,会发现接收数据窗中有时候会漏掉字符,累积下来,接收窗中的字符就会比发送窗中的字符少了。
发生这种现象的原因是什么 ?!
其实这是由于计算机发送过来的数据太快,而单片机的串口中断一次只能接收处理一个数据,前一个数据还没有处理完,后面又有数据发送过来,单片机来不及处理漏掉了。这是由51单片机的串口特性决定的,AT89S51单片机的串口只有一个字节的发送和接收缓冲区SBUF,也就是说每次只能发送或接收一个字节数据,如果在接收的数据没有及时处理完,而又有新的数据进来,会造成数据丢失,不像计算机中VB6的MSCOMM串行通信控件,默认的接收缓冲区为1024字节,而默认的发送缓冲区也有512字节,而且还可以改变缓冲区大小,计算机有了收发数据缓冲区,通信当中就不容易出现缓冲区溢出而通信错误的现象。
在测控系统中,如果出现这种错误的话则有可能系统失控,数据出错,误报警等。当然,我们在通信中也可以加入校验机制来检查错误,但这种现象也使系统稳定性降低,出现莫名其妙的故障,而且这种属于软件故障,我们往往不容易想到,会走弯路。为了减少这种问题的出现,在这里站长提醒大家,在开发的单片机串口中断服务子程序中,要尽量加快数据处理速度,在接收完成数据后,要及时打开串口中断,以便接收新的数据,而其他占用时间的运算程序尽量不要在串口中断里面处理,这是每一个单片机开发人员值得注意的问题,希望大家能够从我们这个实验中得到启发,开发出更完美的程序来,少走弯路。
好了,这个实验到此结束了,希望大家通过对这个软件的学习,掌握单片机实时温度监控的开发、串口通信程序的开发及计算机串口实时控制开发原理及PC监控软件的开发,为开发其他功能更加完善的单片机综合应用系统打好基础。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~