Linux PC和51系列单片机串行通信的设计

发布者:大伊山人最新更新时间:2012-03-08 来源: 现代电子技术 关键字:Linux  单片机  串行通信  工业控制 手机看文章 扫描二维码
随时随地手机看文章

    单片机性能稳定、价格低廉、功能强大,在智能仪器、工业装备以及日用电子消费品中得到了越来越广泛的应用。在单片机的输入输出控制中,除直接接上小键盘和 LCD显示屏等方法外,一般都通过串口和上位机PC进行通信,而后一种方法由于能实现远程控制,并且能够利用PC机强大的数据处理功能以及友好的控制界面,显得尤为重要。在一般的利用PC机对单片机进行控制的场合,都是采用Windows作为上位机的平台,其优点是界面友好,编程和操作都比较容易,缺点是稳定性太差,这对于需要连续数天或数月运行的装置来说,尤其不合适。在要求比较苛刻的场合,一般都采用UNIX工作站作为主控平台,如合肥同步辐射加速器的主控平台采用的是SUN的Solaris工作站系统,然而UNIX工作站昂贵的价格又大大限制了其使用的范围。近年来,随着Linux的迅猛发展,使其逐渐从少数人的玩具变成了主流的操作系统。Linux是遵循GPL协议的免费源代码开放软件,任何人都可以自由的从Internet上取得其源程序,也可在GPL的协议下修改其源代码以适应特定的应用,其运行在普通的PC上,性能稳定,特别适于做工业控制,因此实现Linux和单片机的串行通信非常有意义,他可以是昂贵的UNIX工作站的一种可选的替代方法。

    1 硬件原理

    目前国内使用较多的为MCS-51系列的单片机,因此选用的单片机实验对象为一片AT89C51,图1是硬件原理图,由于要实现符合RS232C的串行通信,还应该用一片ICL232CPE(MAX232)作为串行通信的电平转换电路。在实验过程中,为了查看通信是否成功,除了让单片机对上位机回送数据外,还在单片机外围扩展了几片锁存器,几个LED发光二极管和几个小键盘。串行通信是采用最简单的TxD,RxD,GND三线制连接,注意TxD和RxD 两边应该交叉连线。

 

    上位机是一台普通的PC机,共有2个串行口COM1,COM2,其运行RedHat8.0,实际上,如果不要求运行Gnome或KDE等图形界面,Linux对系统硬件的要求相当低。

    实验证明,此电路简单可靠,非常适用于测试串行通信。

    2 串行通信程序设计

    串行通信程序包括下位机单片机和上位机PC机的程序。单片机接收上位机传来的数据,放到片内RAM里面,再将RAM内数据同时发送到外部扩展锁存器和上位机,由此可以判断通信是否成功。此程序由汇编语言写成,初始化时波特率设置为4 800 b/s,通信方式为8-N-1。

    上位机程序的编写是关键部分,因为要对串口硬件设备进行操作,有2种方法,一是利用Linux内核自带的串口驱动程序,另外一种方法就是直接读写串口硬件端口,下面分别介绍。

    2.1 利用串口驱动程序的编程方法

    利用Linux自身的串口驱动程序进行编程,实际上就是调用驱动程序的一系列函数,完成串口通信参数的设置,数据的发送和接收。在这种方法中,Linux给每个串口都分配一个文件索引号,有相应的文件名称,实际上是将硬件设备看成一种特殊的文件,如COM1,COM2对应的文件分别为/dev/ttyS0,/dev/ttyS1,操作这2个串口实际上就是操作这2个文件,而对硬件设备文件的操作与对普通文件的操作并没有什么不同,都可以使用相同的文件I/O调用函数(open,write,read,close),不同之处在于用系统调用 open()打开串口得到相应设备的文件描述符以后,先要对其进行初始化,设置一些特定的参数,如波特率、数据位、输入输出方式等,这些参数存放在 structtermios中,函数tcsetattr()可以设置串口的structtermios,tcgetattr()可以得到串口的 struct termios。设置完通信参数后就可用read和write对串口文件进行读写了。运行程序时要注意用户是否有对要操作的串口文件进行读写的权力,可以用chmod命令进行文件权限修改。[page]

    初始化函数如下:

  

  初始化以后就开始发送和接收数据,先将一个字符串发送给单片机,单片机接收到数据后,将数据返回给上位机。但需要注意的是,由于上位机速度比单片机快得多,一次不能发送过多的数据,否则极有可能使发送缓冲区溢出而丢失数据,发送过后,还需等待一段时间,使单片机将数据完全发送到上位机后,再进行读取。

    2.2 直接读写串口硬件端口的方法

  在使用这个方法的时候,必须对串口通信的硬件原理有一些了解。PC机的串口是由通用异步收发器8250UART(或16550)为核心构成的,寄存器基地址分别是0x3f8(COM1)和0x2f8(COM2),还有其他的一些用于控制的寄存器。有很多寄存器是与Modem相关的,而在使用三线制进行通信时用不到,只用关心与通信相关的寄存器,比起使用为通用功能编写的串口设备驱动程序来,直接读写相关寄存器效率更高。

  初始化后,就可以进行数据的收发了,接受数据之前必须保证接收数据就绪,这可以通过0x2fd的D0来判断,发送数据之前必须保证发送寄存器为空,这可以通过0x2fd的D5来判断,代码如下:

  3 结语

  实验表明,此系统采用的2种方法都完全实现了LinuxPC机与单片机之间点对点的通信,方法简单可靠,基本上在需要用到PC机与单片机串行通信的场合均可采用此种方法。随着近年来Linux在国内应用范围的日益壮大,在工业控制、数据采集等领域也必将越来越多的采用Linux,本文可以算作是一个有益的尝试。当然在实际应用中还需要考虑一些问题,比如进行出错处理的问题,可以在一个要发送的字符串后再发送一个校验和,当收到返回的校验和与发送的校验和不一致时再进行重发,再比如所采用的RS232C传输距离很短,并且抗干扰能力很差,这时需要将总线转换成差分传输的RS485/RS422。另外,稍加改进,就可实现PC机与多片51单片机的串行通信,这时由于共用一条总线,必须给每个单片机分配一个地址,然后由PC机对总线进行仲裁,只有获得总线使用权的单片机才能与上位机进行通信,这里不再赘述。

  总之,本文只是为Linux PC和单片机串行通信提供了一个典型的范例,要应用到实际的项目中去,还需要根据实际的情况具体考虑,灵活应用,最终才能形成一个可靠的基于Linux平台的系统。

  参考文献

  [1] PhiCornes.Linux从入门到精通[M].童寿彬译.北京:电子工业出版社,1998.

  [2]Peter Baumann H . Linux Serial - programming - HOWTO中文版[M].曾元佑译.

  [3]万福君,潘松峰.单片微机原理系统设计与应用[M].合肥:中国科学技术大学出版社,2001.

  [4][美]安格斯生.串行端口大全[M].精英科技译.北京:中国电力出版社,2001.

关键字:Linux  单片机  串行通信  工业控制 引用地址:Linux PC和51系列单片机串行通信的设计

上一篇:单片机程序设计中运用事件驱动机制
下一篇:基于AT89C51的燃气泄漏报警与应急处理器

推荐阅读最新更新时间:2024-03-16 12:54

用ARM架构处理器优化工业控制
运营现代化的工厂和加工车间,在技术上都非常复杂。为实现对机械设备和生产过程的精确控制,生产企业需要采用最新系列的传感器、致动器以及伺服系统。作为添加技术以获得精确控制功能优势的范例,各个联网与自动化层现已通过连接至IT网络的控制网络添加到工厂生产车间,它们可提供商业信息与策略,这些信息和策略转而推动生产决策的制定。 这种网络化的集中工业控制模式使得技术人员与工业控制工程师能够访问丰富的数据,以便对工厂运营过程进行观察、微调和优化。工厂厂长与企业高管只需浏览一下仪表盘便能全面了解整个工厂的工作效率。 在过去,处理过程都是采用手动控制,工厂的每个环节也都是独立运作的。通过访问描述工厂实际运营状态的实时数据,管理人员能够更好地了解工
[单片机]
用ARM架构处理器优化<font color='red'>工业控制</font>
基于单片机的高性能三相变频电源
1 引 言   变频电源是一种电源变换设备,因具有输出波形纯正、输出电压稳定、输出频率和输出电压可调等优点。其良好的性能,在传感、仪器仪表、工业控制等领域有广泛应用。本文主要介绍利用SPMC75F2413A和IPM(PS21865A)实现高性能三相变频电源的开发。 2 芯片特性简介   SPMC752413A是μ’nSP™系列产品的一个新成员,是凌阳科技新推出的专用于变频驱动的16位微控制器。其拥有性能出色定时器和PWM信号发生器组。   SPMC75F2413A在4.5V~5.5V工作电压范围内的工作速度范围为0~24MHz,拥有2K字SRAM和32K字闪存ROM;最多64个可编程的 多功能I/O端口;5个通用16位定时器/计数
[单片机]
基于<font color='red'>单片机</font>的高性能三相变频电源
M60 单片机的在线仿真与步进、日志调试
我们对M40 定时器0的代码进行步进调试,掌握调试技巧... 一、前期准备: 安装好keil C51 51单片机编程推荐软件,熟悉它,后续stm32同样可用 Keil(C51)介绍、下载、安装与注册 准备51开发板(STC系列芯片的或其他)或者安装proteus 开发板一般推荐购买一套,仿真的编程环境和真实环境有出入(51开发板一般不足百元) 开始也可以不买,使用proteus仿真51环境入门 51入门实际上不需要多高大上的开发板,最核心的定时器、数码管、基础传感器、通讯都有了。以下也是从网络搜索的,向导单片机训练营用这个,从知乎 /知乎app下单买向导可以赚1元左右佣金,希望能够站着就把1元钱赚了:)
[单片机]
M60 <font color='red'>单片机</font>的在线仿真与步进、日志调试
如何向单片机写字符串
单片机实现接收从电脑发送过来的字符串的方法 很多朋友会碰到这个问题:单片机接收从电脑串口发送出来的一串字符串,却只能接收到第一个字符,其他的都丢失了或者是接收到的是乱码,却不知道是什么原因。其实,那是因为,虽然单片机的是全双工串口,但是串口的缓冲区(SBUF)却一般只有一个字节,即1Byte,远没有像电脑串口的缓冲区以KB计算那么大,并且,单片机的处理速度是很有限的,试想一下,假如要求一串字符串以9600bps的速率,一个起始位,一个结束位,无校正位,相当于960Byte/s传输到单片机,单片机要是能够全部接收的话,那么单片机接收和处理一个字节的时间仅为约1ms的时间。这说明了,如果单片机的处理速度不够快,
[单片机]
ARM Linux系统开机自动运行特定应用的设置方法
系统服务的命令保存在开发板根文件系统的/usr/etc/rc.local文件中。有的开发板开机后自动运行图形界面程序,需要按住ctrl+c让开发板进入到linux的SHELL提示符界面。其实可通过注释掉rc.local文件中调用图形界面的命令,增加运行用户应用程序的命令,达到开机自动运行用户应用程序的目的。 下面以我做的实验为例,描述具体的实现步骤。该方法源于网络,我加以验证,稍做修改。 1.进入pc机的Linux 操作系统,在/nfs/usr/下通过mkdir lz 命令新建一个名为lz的文件夹,进入lz文件夹,通过mkdir hello新建一个hello文件夹用来存放我们将要编写的hello.c文件和编译生成的可执行文
[单片机]
应对中国工业机器人需求,日本自动化大厂都在忙着扩充产
日本经济新闻报导,根据日本机器人协会(JARA)统计,相较起去年同期,2017 年 1~3 月间会员出口至中国的工业机器人总额上升了 48.3%,达到将近 457 亿日圆。 日本机器人协会预估,包含会员与非会员在内,2017 年日本的机器人总产值将有望达到创纪录的 7,500 亿日圆。 日本机器人产业能有这样的成长,主要是受到中国厂商的需求所推动。 中国制造商已经找到了几个缺工的主因:第一,随着城市地区逐渐发展扩大,越来越多农民工能在城市找到工作并定居;第二,在一胎化政策下长大的劳工,有避开制造业就业的倾向。 为了填补这块缺少的劳工空白,加上中国政府对此提供的相关补助,越来越多中国厂商选择导入自动化生产,不但能帮助维持产品质量、
[嵌入式]
单片机怎么用回调函数在不同文件之间传递数据
我们先来理解一下回调函数的作用。 函数我一般喜欢分为输出型和输入型(个人理解)。 输出型: 就是我们 主动去调用的控制函数 ,比如说控制LED灯去亮和灭,控制蜂鸣器响和不响,控制LCD显示,控制继电器吸合和断开。 简单来说,就是我们知道什么时候该去调用这些函数,比如说满足某些条件的时候,我们就会主动去调用这些函数。 这种函数,就是输出型函数。 输入型: 输入型函数一般是用在不同.c文件/不同层(硬件层、应用层)之间 传递信号和数据的 ,比如说按键检测、串口数据。 我们不知道什么时候按键会被按下、什么时候串口会有数据过来对吧? 当然,我们可以写一个带返回值的函数,然后定时去检测,比如说定时10ms去扫描一下按键。 unsig
[单片机]
基于C8051F2xx系列MCU芯片实现锅炉水处理控制装置的设计
自然水中通常含有钙镁等离子,俗称硬水。在锅炉用水中需要去除水中的钙镁离子而形成软水以防止锅炉结垢。在生产中锅炉水的软化处理是一项重要的安全指标,所以,对于锅炉水处理的技术要求愈来愈高。单片机以其较高的灵活性和稳定性广泛应用在自动控制领域。本文所设计的锅炉水处理控制装置,由高低水位控制进水阀开关,选用单片机为核心,C语言编程实现循环时间电路控制。该装置已成功应用于成都富华水处理公司。 1 软水生产工艺过程及对自控系统的要求 1.1 生产工艺过程 软化水设备的工作原理是基于阳离子交换原理。水由交换柱上流下,与交换树脂中的盐离子充分接触达到把原水中的杂质、易结垢的重金属阳离子去除掉。其生产工艺大致分为下列几步:①条件满足后运行;②松
[单片机]
基于C8051F2xx系列<font color='red'>MCU</font>芯片实现锅炉水处理控制装置的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved