0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

电脑的RS-232接口如何才能与单片机实现串口通信

Wildesbeast 来源:单片机教程网 作者:单片机教程网 2020-10-06 18:08 次阅读

单片机的串行口是非常有用的,通过他我们可以把单片机系统的数据传回电脑处理或者接受电脑传过来的数据而进行相应的动作,下面我就给大家介绍上一下电脑的RS-232接口与单片机串行通信程序设计方法。

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通信运行效果图

注:按压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液晶模块上面。

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

【串行通信实验操作】

完成了单片机通信程序及PC上我VB程序开发后,我们编译工程,得到单片机芯片烧写的HEX格式目标文件rs232test.hex和串口测试程序可以执行文件RS232test.exe,然后我们就可以拿出实验板,马上进行串口通信实验了,检测一下我们的实际通信效果。

1、使用ISP编程器将目标文件rs232test.hex烧写到AT89S51单片机中

2、如前面的所示:我们将烧写好了通信程序的AT89S51芯片锁紧到S51单片机实验板上,然后把1602字符型液晶模块插到实验板的1602接口上,用RS232串口通信电缆和USB电缆将实验板和电脑连接好,按压实验板的电源开关,开启电源,此时实验板上的电源指示灯亮起来,实验板准备就绪,随时可以接收电脑发送的数据了。

3、双击我们编写的串口测试程序RS232test.exe,启动RS-232串行通信测试软件,在软件上设置好和实验板连接的通信端口,然后点击“PC发送数据发送窗”,即可激活输入窗口,然后我们按压电脑键盘上的按键,按压PS2键盘的按键将会被显示在软件中,同时发送到单片机上通过1602液晶模块进行显示,当接收到正确数据时候,实验板上的蜂鸣器也会发出短促的声音,使你按压键盘的感觉从声音上体现出来。从单片机发送回来的数据被软件接收后,会还原显示在发送数据窗中,如果我们在电脑上按压的键盘上的按键,在软件的发送窗、接收窗及实验板上1602液晶模块上显示的按键都相同,则说明我们电脑的RS-232串口良好,单片机的串口也是良好的,通信正常。然后,我们可以点击软件中的“继电器”按钮,实验板上的单片机接收到电脑的控制指令后,就会控制继电器产生相应的开关动作,实现电脑软件对实验板上继电器的控制。

通过实验加深对51单片机串口的认识:

下面我们通过这套串口测试程序来做个额外实验。理论上,当我们按压键盘上的按键,所有按键都会发送到单片机,然后再返回计算机上的,在串口测试软件上的PC发送数据窗和接收数据窗中显示的字符数目、字符应该是完全相同的,如上面图1中显示。但是,当我们连续快速按压PC键盘(注意:连续速度要足够快哦,才能看到实验现象)时,会发现接收数据窗中有时候会漏掉字符,累积下来,接收窗中的字符就会比发送窗中的字符少了。

发生这种现象的原因是什么 ?!

其实这是由于计算机发送过来的数据太快,而单片机的串口中断一次只能接收处理一个数据,前一个数据还没有处理完,后面又有数据发送过来,单片机来不及处理漏掉了。这是由51单片机的串口特性决定的,AT89S51单片机的串口只有一个字节的发送和接收缓冲区SBUF,也就是说每次只能发送或接收一个字节数据,如果在接收的数据没有及时处理完,而又有新的数据进来,会造成数据丢失,不像计算机中VB6的MSCOMM串行通信控件,默认的接收缓冲区为1024字节,而默认的发送缓冲区也有512字节,而且还可以改变缓冲区大小,计算机有了收发数据缓冲区,通信当中就不容易出现缓冲区溢出而通信错误的现象。

在测控系统中,如果出现这种错误的话则有可能系统失控,数据出错,误报警等。当然,我们在通信中也可以加入校验机制来检查错误,但这种现象也使系统稳定性降低,出现莫名其妙的故障,而且这种属于软件故障,我们往往不容易想到,会走弯路。为了减少这种问题的出现,在这里站长提醒大家,在开发的单片机串口中断服务子程序中,要尽量加快数据处理速度,在接收完成数据后,要及时打开串口中断,以便接收新的数据,而其他占用时间的运算程序尽量不要在串口中断里面处理,这是每一个单片机开发人员值得注意的问题,希望大家能够从我们这个实验中得到启发,开发出更完美的程序来,少走弯路。

好了,这个实验到此结束了,希望大家通过对这个软件的学习,掌握单片机实时温度监控的开发、串口通信程序的开发及计算机串口实时控制开发原理及PC监控软件的开发,为开发其他功能更加完善的单片机综合应用系统打好基础。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43970

    浏览量

    620771
  • RS-232
    +关注

    关注

    0

    文章

    342

    浏览量

    49484
  • 串口通信
    +关注

    关注

    32

    文章

    1577

    浏览量

    54859
收藏 人收藏

    评论

    相关推荐

    RS 232串口通信在PC机与单片机通信中的应用

    在绝大多数PC机的标准配置中,都有一个到多个RS 232串口,因为RS 232串口担负着PC机和
    发表于 01-19 10:09 6075次阅读
    <b class='flag-5'>RS</b> <b class='flag-5'>232</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>在PC机与<b class='flag-5'>单片机</b><b class='flag-5'>通信</b>中的应用

    单片机串口通信毕业论文

    远程采集设备的数据。所以,深入的学习理解和研究串口通信协议的相关知识是十分必要的。这个选题是基于8051的主从式总线通信系统设计与实现,使用51单片
    发表于 11-01 15:54

    单片机RS232接口无法与电脑通信

    如图,所用芯片为MAX232ESE,MCU型号为STC12C5。已经事先通过CH340芯片向单片机烧写好测试程序,在电脑串口调试助手中能正常接收数据。拔出MicroUSB线后换USB-
    发表于 08-29 23:10

    串口通信发展史 RS-232有哪些优点

    ProLINK 则是基于 Profile 上的。目前,RS-232 是 PC 通信工业中应用最广泛的一种串行接口,后面会详细介绍一下 RS-2
    发表于 10-16 10:01

    如何利用RS-232接口实现与计算机实时通信

    本文的点阵LED显示系统以单片机89C51为基础,加以外围电路,利用RS-232接口实现与计算机实时通信,可实现汉字、数字及各种字符的多种方
    发表于 06-03 06:26

    单片机电脑通过串口进行通信的方法

    COM口(RS232串口电脑上的异步串行通信接口,有时也称之为串口(其实这个叫法并不严谨)。
    发表于 02-17 06:46

    基于单片机的CAN与RS-232转换器设计

    本文完成了基于单片机控制的CAN 与RS-232 转换器的研究与设计,设计了AT89C51单片机RS-232 接口和CAN 模块的控制,解
    发表于 08-31 11:45 62次下载

    RS-232串口通信电子教程

    RS-232串口通信电子书内容有串口通信基础知识,用汇编语言开发串口
    发表于 12-13 12:56 209次下载
    <b class='flag-5'>RS-232</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>电子教程

    AT89S52与RS-232接口电路

    AT89S52与RS-232接口电路 图5 AT89S52与RS-232接口电路 单片机采用AT89S52
    发表于 03-07 09:37 2887次阅读
    AT89S52与<b class='flag-5'>RS-232</b>的<b class='flag-5'>接口</b>电路

    基于CAN总线的RS-232串口设备远程通信

    基于CAN总线的RS-232串口设备远程通信 阐述了CAN总线在232串口设备远程通信或自组
    发表于 09-27 16:07 1361次阅读
    基于CAN总线的<b class='flag-5'>RS-232</b><b class='flag-5'>串口</b>设备远程<b class='flag-5'>通信</b>

    RS-232 接口,RS-232 接口是什么意思

    RS-232 接口,RS-232 接口是什么意思 电缆长度限制 RS-232的最初标准建议将电缆长度限制在50 ft以内,对于≤20 00
    发表于 03-09 10:57 6.1w次阅读

    基于C8051F040单片机的CAN总线和RS-232串口通信设计

    目前工业设备之间的通信很多采用RS-232接口,但由于RS-232通信距离短、接口易损,而且只能
    发表于 06-04 14:49 3800次阅读
    基于C8051F040<b class='flag-5'>单片机</b>的CAN总线和<b class='flag-5'>RS-232</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>设计

    RS-232接口实现串口数据传输的点对点通信设计

    单片机在控制本地的外围期间时,信息的交互是通过8位并行数据总线进行的,但是在较大规模的现代控制系统中,单片机还需要控制远端的设备,可以利用单片机的串行通信模块,在学习了
    发表于 03-03 15:19 3384次阅读
    <b class='flag-5'>RS-232</b><b class='flag-5'>接口实现</b><b class='flag-5'>串口</b>数据传输的点对点<b class='flag-5'>通信</b>设计

    RS-232串行通信电路图

    ),而计算机的串口RS-232电平,这两种电平不能互相匹配,所以如果将这两种电平互联,需要一个电平转换电路,本实例中使用常用的MAX232芯片,它实现
    的头像 发表于 11-05 10:13 1.7w次阅读
    <b class='flag-5'>RS-232</b>串行<b class='flag-5'>通信</b>电路图

    什么是RS-232串口?消费级电脑通常没有232串口的主要原因

    什么是RS-232串口?消费级电脑通常没有232串口的主要原因  RS-232
    的头像 发表于 01-09 13:52 459次阅读