第一范文网 - 专业文章范例文档资料分享平台

气敏传感器信号采集系统设计

来源:用户分享 时间:2025/5/16 18:05:55 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

清华大学2012届毕业设计说明书

4 系统软件设计

4.1 单片机C语言

4.1.1 单片机C语言主要特点

C语言是一种通用的计算机程序设计语言,在国际上相当流行,它既可以用来编写计算机的系统程序,也可以用来编写一般的应用程序。以前计算机的系统软件主要用汇编语言编写,单片机应用系统更是如此,由于汇编语言的可读性和可移植性都较差,采用汇编语言编写单片机应用程序,不但周期长,而且调试和排错也比较困难。为了提高编制单片机应用程序的效率,改善程序的可读性和可移植性,采用高级语言无疑是一种最好的语言,C语言既具有一般高级语言的特点,又能直接对计算机的硬件进行操作,表达和运算能力也较强,许多以前只能采用汇编语言来解决的问题都可以用C语言来解决。基于C语言的特点,用C语言进行单片机应用程序设计是单片机开发应用的必然趋势。用C 编写程序比汇编更符合人们的思考习惯,开发者可以摆脱与硬件无必要的接触,更专心的考虑功能和算法而不是考虑一些细节问题,这样就减少了开发和调试的时间。C语言具有良好的程序结构,适用于模块化程序设计,因此采用C语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,将功能模块化,由不同的模块完成不同的功能,这样可使整个应用系统程序结构清晰,易于调试和维护,还可增强可读性和移植性[13]。

在实际单片机程序设计中,程序结构一般均采用如下结构: #include /*头文件说明部份*/ unsigned char x1,x2; /*全局变量声明部份*/ ?Function1(? ){ /*功能函数定义部份*/ ?? } main() {

inti,j; /* 整型变量声明部份*/

Function1(?); /* 功能函数说明部份*/ ??}

4.1.2 单片机C语言与标准C语言的区别

由于现在越来越多的产品都采用单片机开发,所完成的计算和控制工作也日趋复

第 25 页 共 46 页

清华大学2012届毕业设计说明书 杂,但是单片机系统是一种资源十分有限的系统,这主要表现在程序存储器资源的不足,因此在程序设计时如何使用好这些有限的资源就显得十分重要。用C语言编程虽然具有许多的优点,但是生成的代码相对要长,要是编程技术不好,生成的代码甚至有可能比汇编语言生成的代码长几倍,因此对编程者来说,应该注意到单片机C语言和一般意义上的标准C语言的区别,对程序进行适当的优化。 4.1.3 算法设计问题

单片机C语言和标准C语言存在着很大差别,在计算机上进行C语言程序设计时由于不必考虑程序代码的长短,只需考虑程序功能实现,但是在单片机上进行C语言程序设计就必须考虑系统的硬件资源。有时并不是程序的算法越简单、长度越短越好,因为有一些算法要调用一些内部的子程序和函数,生成的机器代码长度非常长。不同的算法对程序代码长度影响十分大,因此在进行程序设计时,就尽量采用程序生成代码短的算法,在不影响程序功能实现的情况下可以采用一些优化算法。

在单片机C语言编译成机器代码时,不同的运算生成的机器代码的长度相差很大,尽可能地减少程序中对某种数据类型的运算种类,越复杂的数据类型效果越明显。在进行数据计算时,在一定的精度范围内,可以用一些近似的计算来完成一些运算,既不损失精度又能减少大量的代码。比如:用逻辑AND/&取模比MOD/%操作更有效。 4.1.4 数据存储器的分配

单片机内部数据存储器RAM只有几百字节,如果扩展外部存储器RAM来提高数据存储量话必将会增加了硬件成本,使系统更加的复杂,访问外部存储器比访问内部存储器所需的代码也要长得多。有效地使用片内存储器、提高存储器空间的利用率对开发者来说十分关键。

内部处理器、内部堆栈、压缩栈、所有程序变量和所有包含进来的库函数都将使用数量有限的内部数据存储器RAM。因为C语言采用了存储器的覆盖技术,可以在程序进行连接时,它将那些已经被其它程序段释放了的存储器空间重新定义给另一个程序段的变量使用,当这个程序运行结束时再将这些存储器释放以供其它程序段使用。全局变量的作用范围是整个程序,因此不能被释放;静态变量由于在函数的调用中专用不变,也不能被释放;只有局部变量中的动态变量可以被释放。

因此在进行程序设计时应该尽量的使用局部变量,提高内部数据存储器的使用率。在C语言中程序中间结果及参数传传递是通过内部的寄存器来完成的,要是内部的存储

第 26 页 共 46 页

清华大学2012届毕业设计说明书 器不够,将会给你的程序带来许多莫名其妙的错误。例如在进行程序设计时语句不应该太长,一个长语句可以分成多个语句,这样的话可以大的减少中间变量,当然太长时就会造成临时寄存器的不够用,导致计算出错。

综上所述C语言具有很强的功能性和结构性,可以缩短单片机控制系统的开发周期,而且易于调试和维护,已经成为目前单片机语言中最流行的编程语言。本设计就是运用C语言编写的单片机应用程序以89C51单片机控制采集气体信号采集显示及存储报警。 4.2 软件设计程序框图

由硬件电路的设计可知,系统的应用软件设计主要包括初始化程序、A/D转换子程序、显示子程序、数据存储子程序及声光报警子程序的设计。

开始 系统初始化

返回 调用存储子程序 调用液晶显示子程序 是 声光报警 调用模数转换子程序 判断气体浓度是否超标 否 数据处理 图4.1 软件设计主程序流程图 4.3 软件程序设计

[14]

4.3.1 初始化子程序

所谓初始化,是对将要用到的单片机内部部件或扩展芯片进行初始工作状态设定。初始化子程序的主要工作是设置定时器的工作模式、初值预置、开中断和打开定时器等。在本设计中,使用了1个中断,即INT_T0。INT_T0中断采用方式1的工作方式,完成ADC0809时钟信号的输入功能。在设计中ADC0809的CLOCK是接在AT89C51单片机的P3.4

第 27 页 共 46 页

清华大学2012届毕业设计说明书 端口。这就要求从P3.4输出CLOCK信号供ADC0809使用,因此CLOCK信号就要用软件来产生。此外,初始化程序中还使液晶初始化显示字符串“ density”(浓度)。 4.3.2 模数转换子程序

A/D转换子程序用来控制对输入的模拟电压信号的采集测量,并将对应的数值存入相应的内存单元,设计中采用查询方式。其转换流程图如图:

图4.2 AD转换子程序框图

在A/D转换开始之前,逐次逼近寄存器的SAR内容为0,在A/D转换过程中,SAR存放“试探”数字量,在转换完毕后,它的内容即为A/D转换的结果数字量。逻辑控制与定时电路再START正脉冲启动后工作,每来一个CLK脉冲,该电路就可能告知向SAR中传送一次试探值,对应输出U0与U1比较,确定一次比进制,经过8次逼近,即可获得最后转换的结果数字量。此处,EOC端口的信号显示ADC0809的状态,开始A/D转换时,EOC为低电平,转换结束后,输出高电平。 4.3.3 存储模块子程序

AT24C512有两种写入方式:一种是字写入方式,另一种是页写入方式。本设计中采用字写入方式。

字写入方式时,通常在向AT24C512发送设备地址字并接到应答信号后,还需要发送2个8位地址来选择要写数据的地址。AT24C512接收到这个地址后会应答一个零信号,然后接收8位数据进来,并再返回一个零应答信号。

第 28 页 共 46 页

开始 AD初始化 启动AD转换 否 AD转换结束 是 输出结果

搜索更多关于: 气敏传感器信号采集系统设计 的文档
气敏传感器信号采集系统设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c471kb4c6uv3z01x0bcmh_7.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top