摘 要 ......................................................................................................................................... I Abstract ...................................................................................................................................... II 前 言 ...................................................................................................................................... III 第1章 绪论 .............................................................................................................................. 1 1.1 课题背景 ......................................................................................................................... 1 1.2 目的和意义 ..................................................................................................................... 1 1.3 解决问题 ......................................................................................................................... 1 1.3.1 Bootloader的移植 .................................................................................................... 1 1.3.2 Linux内核移植 ........................................................................................................ 1 1.3.3 根文件的创建 .......................................................................................................... 2 1.4 技术要求 ......................................................................................................................... 2 第2章 方证 ...................................................................................................................... 3 2.1 可行性分析 ..................................................................................................................... 3 2.2 温度传感器的选择 ......................................................................................................... 3 2.3 湿度传感器的选择 ......................................................................................................... 4 2.4 信号采集通道的选择 ..................................................................................................... 4 2.5 编程方案语言选择 ......................................................................................................... 6 第3章 过程论述 ...................................................................................................................... 7 3.1 信号采集 ......................................................................................................................... 8 3.1.1 温度传感器 .............................................................................................................. 8 3.1.2 湿度传感器 ............................................................................................................. 11 3.1.3 多路开关 ................................................................................................................ 14 3.2 信号分析与处理 ........................................................................................................... 15 3.2.1 A/D转换 ................................................................................................................. 15 3.2.2 单片机80C51 ........................................................................................................ 18 3.2.3 数据存储器的掉电保护 ........................................................................................ 19 3.2.4 系统时钟的设计 .................................................................................................... 19 3.3 显示与报警的设计 ....................................................................................................... 20 3.3.1 显示电路 ................................................................................................................ 20 3.3.2 报警电路 ................................................................................................................ 20 3.3.3 键盘设计 ................................................................................................................ 21 3.3.4 看门狗电路设计 .................................................................................................... 21 3.4 软件设计 ....................................................................................................................... 22 3.4.1 主程序设计 ............................................................................................................ 22 3.4.2 各子模块程序设计 ................................................................................................ 24 3.4.3 温湿度控制软件设计 ............................................................................................ 27 第4章 结果分析 .................................................................................................................... 31 4.1 单元测试 ....................................................................................................................... 31
4.1.1 LCD显示模块测试 ................................................................................................ 31 4.1.2 采样模块测试 ........................................................................................................ 32 4.2 集成测试 ....................................................................................................................... 32 结 论 ...................................................................................................................................... 33 致 谢 ...................................................................................................................................... 33 参考文献 .................................................................................................. 错误!未定义书签。 附录A ...................................................................................................................................... 33 附录B ...................................................................................................................................... 40
哈尔滨理工大学远东学院学士学位论文 基于ARM9的嵌入式linux移植
摘 要
操作系统的移植是嵌入式系统开发的重要环节。笔者给出了在基于ARM9 内核的硬件平台上构建一个基本的带有根文件系统的嵌入式Linux系统的过程与方法。首先介绍了基于S3C2410系统硬件结构和Linux内核结构,然后分析了如何将Linux移植到目标板上的方法与步骤,最后建立根文件系统。通过串口、网口或者JTAG口烧至目标板,该系统成本低、工作稳定、通用性强,可用在多种工业场合。
设计与实现了Bootloader和Linux在硬件平台上的移植。主要完成的工作包括在开发机上完成创建交叉编译环境和NFS,TFTP服务以及串口通信程序UUCP的配置。同时完成了对Linux2.4.18内核的板级修改移植和文件系统的创建。通过以上步骤,成功实现了Linux在硬件平台S3C2410上的运行。
关键词:ARM9 嵌入式linux移植 操作系统移植
- I -
哈尔滨理工大学远东学院学士学位论文 Based on ARM9 embedded Linux transplantation
Abstract
The porting of operating system is the significant segment of Embedded System development.The writer gives out process and means to transform the embedded linux os with root file system into the hardware platform based on ARM9 core.First of all introduced baseds on S3C2410's system hardware composition and Linux's crux of a matter composition,afterwards how analysed transplanting Linux up the target plank means together with move, and finally establishs a document system.By means of the stringtrain rim Net rim or JTAG's rim bakes till the target plank,and that system cost is leted drop Work is steadyd The commonality is powerful,usable much kinds of industry situations being living.
We design and achieve the porting of Bootloader and Linux on embedded system.The primary job include building the cross compile environment,config NFS,TFTP server and UUCP which is a series program.After that,finished poring Linux kernel 2.4.18 in the board and create the file system.After all,we successes running Linux in the S3C2410 chip.
Keywords : ARM9 the embedded system linux porting OS porting
- II -
哈尔滨理工大学远东学院学士学位论文 前 言
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物 等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
1. 在智能仪器仪表上的应用
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。
2. 在工业控制中的应用
用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
3. 在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
4. 在计算机网络和通信领域中的应用
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
5. 单片机在医用设备领域中的应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
6. 在各种大型电器中的模块化应用
某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。
- III -
哈尔滨理工大学远东学院学士学位论文 在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。
此外,单片机在工商,金融,科研、教育,国防航空航天等领域有十分广泛用途。
- IV -
哈尔滨理工大学远东学院学士学位论文
第1章 绪论
1.1 课题背景
在嵌入式开发中,把操作系统移植到开发板是进行嵌入式应用开发的前提和基础。因此有必要针对特定的硬件平台和实际的应用移植操作系统进行研究。笔者选用Linux操作系统,可剪裁性是Linux与嵌入式系统紧密联系的纽带,同时嵌入式系统对成本的严格也使得具备开放特征的Linux超越其他诸如Vxwork、pSOS、Neculeus和Windows CE等强劲竞争对手而成为市场占有率第一的嵌入式操作系统。ARM平台是目前Linux内核移植的一个重点。对于初学者三星的S3C2410是个很好的选择。
1.2 目的和意义
本设计的主要目的在于:培养学生阅读、利用英文文献资料,阅读并翻译外文资料完成课题的工作能力、分析问题和解决问题的能力,从文献检索和调查研究中获得知识的能力,以及对书面和口头表达能力进行全面的考核。
其次,本设计还将培养开发应用硬件的能力,锻炼结构化、模块化的编程能力,培养设计报告和论文的能力。
最终,使综合素质有更深层次的提高,为自己能顺利与社会环境接轨做准备。 运用嵌入式系统设计的相关知识完成本课题的设计与实现。本设计注重考查对知识的实践动手能力,以S3C2410为平台,实现Linux2.4.18在其上的成功运行。完成本次设计将有利于提高单独分析问题、解决问题的能力。
1.3 解决问题
本设计是基于S3C2410的嵌入式Linux移植,主要包括开发环境的建立、Bootloader的移植、Linux内核的移植、根文件的创建。
1.3.1 Bootloader的移植
Bootloader是在操作系统内核运行之前的一段程序,通过这段小程序初始化硬件设备,建立内存空间的映射表,从而建立适当的系统软硬件环境,为调用操作系统内核做好准备。在项目中采用的Bootloader是开放源代码的U-boot,U-boot支持ARM9 系列处理器,支持NAND Flash和NOR Flash。
1.3.2 Linux内核移植
Linux内核主要由5个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信,支持X86,ARM等多种体系结构。要让Linux可以在不同的硬件平台运行只需修改与体系结构平台相关的代码即可。内核源码一般在/usr/src/Linux-*目录
-1-
哈尔滨理工大学远东学院学士学位论文
下。内核源码arch 子目录包括了所有和平台体系结构相关的核心代码,它的每一个子目录都代表所支持的一种体系结构。本项目移植内核版本是Linux-2.4.18。
1.3.3 根文件的创建
文件系统是LINUX操作系统的重要组成部分,LINUX文件具有强大的功能。文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有LINUX用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。
1.4 技术要求
实现嵌入式Linux在S3C2410平台上的移植,必须熟悉三星的S3C2410的硬件、嵌入式Linux操作系统、嵌入式Linux在S3C2410移植的相关知识。
-2-
哈尔滨理工大学远东学院学士学位论文
第2章 方证
当将单片机用作测控系统时,系统总要有被测信号的输入通道,由计算机拾取必要的输入信息。对于测量系统而言,如何准确获得被测信号是其核心任务;而对测控系统来讲,对被控对象状态的测试和对控制条件的监察也是不可缺少的环节。
传感器是实现测量与控制的首要环节,是测控系统的关键部件,如果没有传感器对原始被测信号进行准确可靠的捕捉和转换,一切准确的测量和控制都将无法实现。工业生产过程的自动化测量和控制,几乎主要依靠各种传感器来检测和控制生产过程中的各种参量,使设备和系统正常运行在最佳状态,从而保证生产的高效率和高质量。
2.1 可行性分析
本设计实现了大小信号都存在条件下的低成本、高精度要求,具有一定的实用价值,实践表明,整个输出系统使用方便,工作稳定,具有广阔的应用前景,可以广泛应用在工业自动控制、环境监测、建筑工程、科学试验等很多方面。
系统进行设计中都是性能优越的芯片,而且无论是软件编程还是硬件搭接方面在技术上都是行得通的。此项目的研发过程无论是从经济角度还是技术可行性上都不存在过多问题,是一个研发价值极高的项目。
本系统使用温湿度传感器、D/A转换器、运算放大器、看门狗电路等实现。
2.2 温度传感器的选择
1. 方案一
采用热电阻温度传感器。热电阻是利用导体的电阻随温度变化的特性制成的测温元件。现应用较多的有铂、铜、镍等热电阻。其主要的特点为精度高、测量范围大、便于远距离测量。
铂的物理、化学性能极稳定,耐氧化能力强,易提纯,复制性好,工业性好,电阻率较高。因此,铂电阻用于工业检测中高精密测温和温度标准。缺点是价格贵,温度系数小,受到磁场影响大,在还原介质中易被玷污变脆。按IEC标准测温范围-200~650℃,百度电阻比W(100)=1.3850时,R0为100Ω和10Ω,其允许的测量误差A级为±(0.15℃+0.002 |t|),B级为±(0.3℃+0.005 |t|)。
铜电阻的温度系数比铂电阻大,价格低,也易于提纯和加工;但其电阻率小,在腐蚀性介质中使用稳定性差。在工业中用于-50~180℃测温。
2. 方案二
采用AD590,它的测温范围在-55℃~+150℃之间。AS590精度很高,共有I、J、K、L、M五档,其中M档精度最高,M档在测温范围内非线形误差为±0.3℃。AD590的电源电压范围为4V~30V。电源电压可在4V~6V范围变化,电流变化1mA,相当于温度变化1K。AD590可以承受44V正向电压和20V反向电压,因而器件反接也不会损坏。使用可靠。它只需直流电源就能工作,而且,无需进行线性校
-3-
哈尔滨理工大学远东学院学士学位论文
正,所以使用也非常方便,接口也很简单。作为电流输出型传感器的一个特点是,和电压输出型相比,它有很强的抗外界干扰能力。AD590的测量信号可远传百余米。
3. 方案选择
综合比较方案一与方案二,方案二中的AD590具有测温误差小、价格低、响应速度快、传输距离远、体积小、微功耗等优点,且适合远距离测温、控温,不需要进行非线性校准,外围电路简单。更为适合于本设计系统对于温度传感器的选择。
2.3 湿度传感器的选择
测量空气湿度的方式很多,其原理是根据某种物质从其周围的空气吸收水分后引起的物理或化学性质的变化,间接地获得该物质的吸水量及周围空气的湿度。电容式、电阻式和湿涨式湿敏原件分别是根据其高分子材料吸湿后的介电常数、电阻率和体积随之发生变化而进行湿度测量的。
1. 方案一
采用HOS-201湿敏传感器。HOS-201湿敏传感器为高湿度开关传感器,它的工作电压为交流1V以下,频率为50HZ~1KHZ,测量湿度范围为0~100%RH,工作温度范围为0~50℃,阻抗在75%RH(25℃)时为1MΩ。这种传感器原是用于开关的传感器,不能在宽频带范围内检测湿度,因此,主要用于判断规定值以上或以下的湿度电平。然而,这种传感器只限于一定范围内使用时具有良好的线性,可有效地利用其线性特性。
2. 方案二
采用HS1100/HS1101湿度传感器。HS1100/HS1101电容传感器,在电路构成中等效于一个电容器件,其电容量随着所测空气湿度的增大而增大。不需校准的完全互换性,高可靠性和长期稳定性,快速响应时间,专利设计的固态聚合物结构,由顶端接触(HS1100)和侧面接触(HS1101)两种封装产品,适用于线性电压输出和频率输出两种电路,适宜于制造流水线上的自动插件和自动装配过程等。
相对湿度在1%---100%RH范围内;电容量由16pF变到200pF,其误差不大于±2%RH;响应时间小于5S;温度系数为0.04 pF/℃。可见精度是较高的。
3. 方案选择
综合比较方案一与方案二,方案一虽然满足精度及测量湿度范围的要求,但其只限于一定范围内使用时具有良好的线性,可有效地利用其线性特性。而且还不具备在本设计系统中对温度-30~50℃的要求,而方案二,HS1100/HS1101互换性好,高可靠性,长期稳定性好,响应快。因此,我们选择方案二来作为本设计的湿度传感器。
2.4 信号采集通道的选择
在本设计系统中,温度输入信号为8路的模拟信号,这就需要多通道结构。 1. 方案一
方案一是采用多路并行模拟量输入通道。
这种结构的模拟量通道特点为:
(1) 可以根据各输入量测量的要求选择不同性能档次的器件。总体成本可以作得较
-4-
哈尔滨理工大学远东学院学士学位论文
低。
(2) 硬件复杂,故障率高。
(3) 软件简单,各通道可以编程。 2. 方案二
方案二是采用多路分时的模拟量输入通道。 这种结构的模拟量通道特点为: (1) 对ADC、S/H要求高。 (2) 处理速度慢。
(3) 硬件简单,成本低。 (4) 软件比较复杂。 3. 方案选择
综合比较方案一与方案二,方案二更为适合于本设计系统对于模拟量输入的要求,比较其框图,方案二更具备硬件简单的突出优点,所以选择方案二作为信号的输入通道。
信号调理 采样/保持器 A/D转换器 接口 信号调理 采样/保持器 A/D转换器 接口 CPU 信号调理 采样/保持器 A/D转换器 接口 图2-1 多路并行模拟量输入通道
信号调节 信号调节
多路切换器 采样保持器 A/D转换器 接口 CPU 信号调节 图2-2 多路分时的模拟量输入通道
-5-
哈尔滨理工大学远东学院学士学位论文
2.5 编程方案语言选择
C51是面向51系列单片机的C语言编译器,采用C51程序设计语言,编程都只需了解变量和常数的存储类型与51系列单片机存储空间的对应关系,而不必深入了解单片机的硬件和接口,C51编译器会自动完成变量的存储单元的分配。目前,C51语言已成为51系列单片机的主流程序设计语言,所以本设计采用C51编程。
-6-
哈尔滨理工大学远东学院学士学位论文
第3章 过程论述
本设计是基于单片机对数字信号的高敏感和可控性、温湿度传感器可以产生模拟信号,和A/D模拟数字转换芯片的性能,本设计了以51单片机基本系统为核心的一套检测系统,其中包括A/D转换、单片机、复位电路、温度检测、湿度检测、键盘及显示、报警电路、系统软件等部分的设计。
温度采集、处理模块 CPU 看门狗 显示模块 湿度采集、处理模块 报警电路 键盘模块 图3-1 系统总体框图
本设计主要有由信号采集、信号分析和信号处理三个部分组成的。系统总体框图见图3-1。
信号采集由AD590、HS1100及多路开关CD4051组成;
信号分析由A/D转换器MC14433、单片机80C51基本系统组成; 信号处理由串行口LCD显示器和报警系统等组成。
温度检测电路如图3-2所示,湿度检测电路如图3-3所示。
AD590_1 AD590_2 4051 MC14433 CPU AD590_8 图3-2 温度采集、处理模块
-7-
哈尔滨理工大学远东学院学士学位论文
Hs1100 Hs1100 555 555 4051 CPU Hs1100 555 图3-3 湿度采集、处理模块
3.1 信号采集
3.1.1 温度传感器
集成温度传感器AD590是美国模拟器件公司生产的集成两端感温电流源。 1. 主要特性
AD590是电流型温度传感器,通过对电流的测量可得到所需要的温度值,根据特性分档,AD590的后缀以I,J,K,L,M表示,M档为精度最高档,I档为精度最低档。AD590L,AD590M一般用于精密温度测量电路,其电路外形如图3-4所示,它采用金属壳3脚封装,其中1脚为电源正端V+;2脚为电流输出端I0;3脚为管壳,一般不用。集成温度传感器的电路符号如图3-4所示。
图3-4 AD590外形(左)及电路符号(右)
(1) 流过器件的电流(μA)等于器件所处环境的热力学温度(开尔文)度数,即:
I T/T=1μA /K (3-1)
见(3-1)式中:IT—— 流过器件(AD590)的电流,单位μA。T——热力学温度,单位K。
(2) AD590的测温范围-55℃~+150℃。
(3) AD590的电源电压范围为4V-30V。电源电压可在4V-6V范围变化,电流IT变化1μA,相当于温度变化1K。AD590可以承受44V正向电压和20V反向电压,因而器件反接也不会损坏。
(4) 输出电阻为710MΩ。
(5) 精度高。AD590共有I、J、K、L、M五档,其中M档精度最高,在-55℃~
-8-
哈尔滨理工大学远东学院学士学位论文
+150℃范围内,非线形误差±0.3℃。
2. AD590的工作原理
在被测温度一定时,AD590相当于一个恒流源,把它和5~30V的直流电源相连,并在输出端串接一个1kΩ的恒值电阻,那么,此电阻上流过的电流将和被测温度成正比,此时电阻两端将会有1mV/K的电压信号。其核心电路如图3-5所示。
T1 I1 T3 T2 I2 T4 电源 - RL R +
图3-5 AD590内部核心电路
如图3-5是利用ΔUBE特性的集成PN结传感器的感温部分核心电路。其中T1、T2起恒流作用,可用于使左右两支路的集电极电流I1和I2相等;T3、T4是感温用的晶体管,两个管的材质和工艺完全相同,但T3实质上是由n个晶体管并联而成,因而其结面积是T4的n倍。T3和T4的发射结电压UBE3和UBE4经反极性串联后加在电阻R上,所以R上端电压为ΔUBE。因此,电流I1为:
I1=ΔUBE/R=(KT/q)(lnn)/R (3-2)
对于AD590,n=8,这样,电路的总电流将与热力学温度T成正比,将此电流引至负载电阻RL上便可得到与T成正比的输出电压。由于利用了恒流特性,所以输出信号不受电源电压和导线电阻的影响。如图3-5中的电阻R是在硅板上形成的薄膜电阻,该电阻已用激光修正了其电阻值,因而在基准温度下可得到1μA/K的I值。
-9-
哈尔滨理工大学远东学院学士学位论文
V+ R1 R2 T1 T2 T6 T7 T12 T5 T3 C1 T8 T4 R3 T9 T11 R5 图3-6 AD590内部电路
如图3-6所示是AD590的内部电路,图中的T1~T4相当于如图3-5中的T1、T2,而T9,T11相当于如图3-5中的T3、T4。R5、R6是薄膜工艺制成的低温度系数电阻,供出厂前调整之用。T7、T8,T10为对称的Wilson电路,用来提高阻抗。T5、T12和T10为启动电路,其中T5为恒定偏置二极管。
T6可用来防止电源反接时损坏电路,同时也可使左右两支路对称。R1,R2为发射极反馈电阻,可用于进一步提高阻抗。T1~T4是为热效应而设计的连接防式。而C1和R4则可用来防止寄生振荡。该电路的设计使得T9,T10,T11三者的发射极电流相等,并同为整个电路总电流I的1/3。T9和T11的发射结面积比为8:1,T10和T11的发射结面积相等。
T9和T11的发射结电压互相反极性串联后加在电阻R5和R6上,因此可以写出:
ΔUBE=(R6-2 R5)I/3 (3-3)
R6上只有T9的发射极电流,而R5上除了来自T10的发射极电流外,还有来自T11的发射极电流,所以R5上的压降是R5的2/3。
根据上式不难看出,要想改变ΔUBE,可以在调整R5后再调整R6,而增大R5的效果和减小R6是一样的,其结果都会使ΔUBE减小,不过,改变R5对ΔUBE的影响更为显著,因为它前面的系数较大。实际上就是利用激光修正R5以进行粗调,修正R6以实现细调,最终使其在250℃之下使总电流I达到1μA/K。
3. 基本应用电路
-10-
哈尔滨理工大学远东学院学士学位论文
如图3-7是AD590用于测量热力学温度的基本应用电路。因为流过AD590的电流与热力学温度成正比,当电阻R1和电位器R2的电阻之和为1kΩ时,输出电压V0随温度的变化为1mV/K。但由于AD590的增益有偏差,电阻也有偏差,因此应对电路进行调整,调整的方法为:把AD590放于冰水混合物中,调整电位器R2,使V0=273.2+25=298.2(mV)。但这样调整只保证在0℃或25℃附近有较高的精度。
图3-7 AD590应用电路
4. 摄氏温度测量电路
如图3-7所示,电位器R2用于调整零点,R4用于调整运放LF355的增益。调整方法如下:在0℃时调整R2,使输出V0=0,然后在100℃时调整R4使V0=100mV。如此反复调整多次,直至0℃时,V0=0mV,100℃时V0=100mV为止。最后在室温下进行校验。例如,若室温为25℃,那么V0应为25mV。冰水混合物是0℃环境,沸水为100℃环境。
5. 多路检测信号的实现
本设计系统为八路的温度信号采集,而MC14433仅为一路输入,故采用CD4051组成多路分时的模拟量信号采集电路,其硬件接口电路只需分别将8个AD590应用电路中Vo连接到CD4051芯片上S0—S8引脚上。
3.1.2 湿度传感器
测量空气湿度的方式很多,其原理是根据某种物质从其周围的空气吸收水分后引起的物理或化学性质的变化,间接地获得该物质的吸水量及周围空气的湿度。电容式、电阻式和湿涨式湿敏原件分别是根据其高分子材料吸湿后的介电常数、电阻率和体积随之发生变化而进行湿度测量的。
HS1100/HS1101的特点:
不需校准的完全互换性,高可靠性和长期稳定性,快速响应时间,专利设计的固态聚合物结构,由顶端接触(HS1100)和侧面接触(HS1101)两种封装产品,适用于线性电压输出和频率输出两种电路,适宜于制造流水线上的自动插件和自动装配过程等。
如图3-8a为湿敏电容工作的温、湿度范围。如图3-8b为湿度-电容响应曲线。
-11-
哈尔滨理工大学远东学院学士学位论文
10075长期稳定区50250-40-2002040温度 /℃6080100正常工作区200非正常区190180170160020406080
相对湿度/%RH
图3-8a 湿敏电容工作的温、湿度范围 图3-8b 湿度-电容响应曲线
相对湿度在1%---100%RH范围内;电容量由16pF变到200pF,其误差不大于±2%RH;响应时间小于5S;温度系数为0.04pF/℃。可见精度是较高的。
2. 湿度测量电路
HS1100/HS1101电容传感器,在电路构成中等效于一个电容器件,其电容量随着所测空气湿度的增大而增大。如何将电容的变化量准确地转变为单片机易于接受的信号,常有两种方法:一是将该湿敏电容置于运放与阻容组成的桥式振荡电路中,所产生的正弦波电压信号经整流、直流放大、再A/D转换为数字信号;另一种是将该湿敏电容置于555振荡电路中,将电容值的变化转为与之成反比的电压频率信号,可直接被计算机所采集。
频率输出的555测量振荡电路如图3-9所示。集成定时器555芯片外接电阻R4、R2与湿敏电容C,构成了对C的充电回路。7端通过芯片内部的晶体管对地短路又构成了对C的放电回路,并将引脚2、6端相连引入到片内比较器,便成为一个典型的多谐振荡器,即方波发生器。另外,R3是防止输出短路的保护电阻,R1用于平衡湿度系数。
R4 8 4 Reset 2 Trigger 5 R1 Vcc Output 3 Discharge 7 Control vol GND Threshold 6 1 555 R2 R3
Hs1100
图3-9 频率输出的555振荡电路
该振荡电路两个暂稳态的交替过程如下:首先电源Vs通过R4、R2向C充电,经t充电时间后,Uc达到芯片内比较器的高触发电平,约0.67Vs,此时输出引脚3端由高电平突降为低电平,然后通过R2放电,经t放电时间后,Uc下降到比较器的低触
-12-
哈尔滨理工大学远东学院学士学位论文
发电平,约0.33Vs。
此时输出,此时输出引脚3端又由低电平突降为高电平,如此翻来覆去,形成方波输出。其中,充放电时间为:
t充电=C(R4+R2)Ln2 (3-4) t放电=CR2 Ln2 (3-5)
因而,输出的方波频率为:
f=1/(t放电+t充电)=1/[C(R4+R2)Ln2] (3-6)
可见,空气湿度通过555测量电路就转变为与之呈反比的频率信号,表3-1给出了其中的一组典型测试值。
表3-1 空气湿度与电压频率的典型值
湿度(%RH) 0 10 20 30 40 50 频率(HZ) 7315 7224 7100 6976 6853 6728 湿度(%RH) 60 70 80 90 100 频率(HZ) 6600 68 6330 6168 6033
3. 多路检测信号的实现
本设计系统为八路的湿度信号采集,故采用CD4051组成多路分时的模拟量信号采集电路,其硬件接口如图3-10所示:
8 Vcc 3 4 Reset Output
2 Trigger Discharge 7 5 Control vol GND Threshold 6 1
Hs1100 CD4051 S0 S8 图3-10 八路分时的模拟量信号采集电路硬件接口
-13-
哈尔滨理工大学远东学院学士学位论文
3.1.3 多路开关
多路开关,又称“多路模拟转换器”。多路开关通常有n个模拟量输入通道和一个公共的模拟输出端,并通过地址线上不同的地址信号把n个通道中任一通道输入的模拟信号输出,实现由n线到一线的接通功能。反之,当模拟信号有公共输出端输入时,作为信号分离器,实现了1线到n线的分离功能。因此,多路开关通常是一种具有双向能力的器件。
在本设计中,由于采用了温湿度双量控制,所以在信号采集中将有两个模拟量被提取,这时选用多路开关就是很必要的。
我选用的是CD4051多路开关,它是一种单片、CMOS、8通道开关。该芯片由DTL/TTL-CMOS电平转换器,带有禁止端的8选1译码器输入,分别加上控制的8个CMOS模拟开关TG组成。CD4051的内部原理框图如图3-11所示。
图3-11 CD4051的内部原理框图
图中功能如下:
通道线IN/OUT(4、2、5、1、12、15、14、13):该组引脚作为输入时,可实现8选1功能,作为输出时,可实现1分8功能。
XCOM(3):该引脚作为输出时,则为公共输出端;作为输入时,则为输入端。 A、B、C(11、10、9):地址引脚
INH(6):禁止输入引脚。若INH为高电平,则为禁止各通道和输出端OUT/IN接至;若INH为低电平,则允许各通道按表3-2关系和输出段OUT/IN接通。VDD(16)和VSS(8):VDD为正电源输入端,极限值为17V;VSS为负电源输入端,极限值为-17V。
VGG(7):电平转换器电源,通常接+5V或-5V。
CD4051作为8选1功能时,若A、B、C均为逻辑“0”(INH=0),则地址码00013经译码后使输出端OUT/IN和通道0接通。其它情况下,输出端OUT/IN输出端
-14-
哈尔滨理工大学远东学院学士学位论文
OUT/IN和各通道的接通关系如表3-2所示:
表3-2 4051状态位与通道对应表
输入状态 INH 0 0 0 0 0 C 0 0 0 0 1 B 0 0 1 1 0 A 0 1 0 1 0 接通 通道 0 1 2 3 4 输入状态 INH 0 0 0 1 C 1 1 1 x B 0 1 1 x A 1 0 1 x 接通 通道 5 6 7 均不显示 3.2 信号分析与处理
3.2.1 A/D转换
1. A/D转换器的特点
为了把温度、湿度检测电路测出的模拟信号转换成数字量送CPU处理,本系统选用了双积分A/D转换器MC14433,它精度高,分辨率达1/1999。由于MC14433只有一路输入,而本系统检测的多路温度与湿度信号输入,故选用多路选择电子开关,可输入多路模拟量。
MC14433 A/D转换器
由于双积分方法二次积分时间比较长,所以A/D转换速度慢,但精度可以做得比较高;对周期信号变化的干扰信号积分为零,抗干扰性能也比较好。
目前,国内外双积分A/D转换器集成电路芯片很多,大部分是用于数字测量仪器上。常用的有3.5位双积分A/D装换器MC14433和4.5位双积分A/D转换器ICL7135
MC14433A/D转换器件简介
MC14433是三位半双积分型的A/D转换器,具有精度高,抗干扰性能好的优点,其缺点是转换速率低,约1—10次/秒。在不要求高速转换的场合,例如,在低速数据采集系统中,被广泛采用。MC14433A/D转换器与国内产品5G14433完全相同,可以互换。
MC14433A/D转换器的被转换电压量程为199.9mV或1.999V。转换完的数据以BCD码的形式分四次送出(最高位输出内容特殊,详见表3-3)。
-15-
哈尔滨理工大学远东学院学士学位论文
时钟 Q0—Q3 DS1—DS4 多路选择开关 锁存器 极性判别 OR过量程 个位 十位 百位 千位 溢出 控制电路 CMOS线性电路 VR VAG VX 图3-12 MC14433A/D转换器的内部逻辑框图
MC14433的框图(图3-12)和引脚功能说明 各引脚的功能如下: 电源及共地端
VDD:主工作电源+5V。
VEE:模拟部分的负电源端,接-5V。 VAG:模拟地端。 VSS:数字地端。 VR:基准电压。 外界电阻及电容端:
RI:积分电阻输入端,VX=2V时,R1=470Ω;VX=200Mv时,R1=27KΩ。 C1:积分电容输入端。C1 一般为0.1µF。
C01、C02:外界补偿电容端,电容取值约0.1µF。 R1/C1:R1与C1的公共端。
CLKI、CLKO:外界振荡器时钟调节电阻Rc,Rc一般取470KΩ左右。 转换启动/结束信号端
EOC:转换结束信号输出端,正脉冲有效。
DU:启动新的转换,若DU与EOC相连,每当A/D转换结束后,自动启动新的转换。
过量程信号输出端
/OR:当|Vx|›VR,过量程/OR输出低电平。 位选通控制线
DS4----DS1:选择个、十、百、千位,正脉冲有效。
DS1对应千位,DS4对应个位。每个选通脉冲宽度为18个时钟周期,两个相应脉
-16-
哈尔滨理工大学远东学院学士学位论文
冲之间间隔为2个时钟周期。
BCD码输出线:
Q0---Q3:BCD码输出线。其中Q0为最低位,Q3为最高位。当DS2、DS3和DS4选通期间,输出三位完整的BCD码数,但在DS1选通期间,输出端Q0-------Q3 除了表示个位的0或1外,还表示了转化值的正负极性和欠量程还是过量程其含意见表3-3:
表3-3 DS1选通时Q3~Q0表示的结果
Q3 1 0 × × 0 1 Q2 × × 1 0 × × Q1 × × × × × × Q0 0 0 0 0 1 1 表示结果 千位为0 千位为1 结果为正 结果为负 输入过量程 输入欠量程
由表可知:
Q3表示1/2位,Q3=“0”对应1,反之对应0。 Q2表示极性,Q2=“1”为正极性,反之为负极性。
Q0=“1”表示超量程:当Q3=“0”时,表示过量程;当Q3=“1”时,表示欠量程;
2. MC14433与80C51单片机的接口设计
由于MC14433的A/D转换结果是动态分时输出的BCD码,Q0~Q3HE DS1~DS4都不是总线式的。因此,MCS-51单片机只能通过并行I/O接口或扩展I/O接口与其相连。对于80C51单片机的应用系统来说,MC14433可以直接和其P1口或扩展I/O口8155/8255相连。下面是MC14433与80C51单片机P1口直接相连的硬件接口,接口电路如图3-13所示:
...
.
.
图3-13 MC14433与51单片机P1口直接相连的硬件接口
-17-
哈尔滨理工大学远东学院学士学位论文
3.2.2 单片机80C51
为了设计此系统,我们采用了80C51单片机作为控制芯片,在前向通道中是一个非电信号的电量采集过程。它由传感器采集非电信号,从传感器出来经过功率放大过程,使信号放大,再经过模/数转换成为计算机能识别的数字信号,再送入计算机系统的相应端口。
80C51是有8个部件组成,即CPU,时钟电路,数据存储器,并行口(P0~P3)串行口,定时计数器和中断系统,它们均由单一总线连接并被集成在一块半导体芯片上,即组成了单片微型计算机,
80C51是MCS-51系列单片机中的一种。
程序存储器 数据存储器 定时计数器
数据
总线
地址 总线 80C51 控制 总线
并行I/O口 串行通信口 终端系统 图3-14 80C51基本组成
1. CPU处理器:
处理器是80C51的核心,它的功能是产生控制信号,把数据从存储器或输入口送到CPU或CPU数据写入存储器或送到输出端口。还可以对数据进行逻辑和算术的运算。
2. 时钟电路:
80C51内部有一个频率最大为12MHZ的时钟电路,它为单片机产生时钟序列,需要外接石英晶体做振荡器和微调电容。
3. 内存:
内部存储器可分做程序存储器和数据存储器,但在80C51中无片内程序存储器。 4. 定时/计数器:
80C51有两个16位的定时/计数器,每个定时器/计数器都可以设置成定时的方式和计数的方式,但只能用其中的一个功能,以定时或计数结果对计算机进行控制。
5. 并行I/O口:
MCS-51有四个8位的并行I/O口,P0,P1,P2,P3,以实现数据的并行输出。
6. 串行口:
-18-
哈尔滨理工大学远东学院学士学位论文
它有一个全双工的串行口,它可以实现计算机间或单片机同其它外设之间的通信,该并行口功能较强,可以做为全双工异步通讯的收发器也可以作为同步移位器用。
7. 中断控制系统:
80C51有五个中断源,既外部中断两个,定时计数中断两个,串行中断一个,全部的中断分为高和低的两个输出级。
3.2.3 数据存储器的掉电保护
单片机系统内的RAM数据是非常容易丢失的,特别是一些珍贵的科研数据,一旦丢失后果不堪设想,因此掉电保护是必须要做的,一旦电源发生掉电现象,在掉电的瞬间系统能自动保护RAM中的数据和系统的运行状态,当电源恢复正常供电后能恢复到掉电前的工作状态。
3.2.4 系统时钟的设计
时钟电路是用来产生80C51单片机工作时所必须的时钟信号,80C51本身就是一个复杂的同步时序电路,为保证工作方式的实现,80C51在唯一的时钟信号的控制下严格的按时序执行指令进行工作 ,时钟的频率影响单片机的速度和稳定性。通常时钟由于两种形式:内部时钟和外部时钟。
我们系统采用内部时钟方式来为系统提供时钟信号。80C51内部有一个用于构成振荡器的高增益反向放大器,该放大器的输入输出引脚为XTAL1和XTAL2,它们跨接在晶体振荡器和用于微调的电容,便构成了一个自激励振荡器。
电路中的C1、C2的选择在30PF左右,但电容太小会影响振荡的频率、稳定性和快速性。晶振频率为在1.2MHZ~12MHZ之间,频率越高单片机的速度就越快,但对存储器速度要求就高。为了提高稳定性我们采用温度稳定性好的电容,晶振频率为11.0592MHZ。
系统时钟电路如图3-15所示:
C1 80C51 XTAL2 C2 XTAL1 图3-15 系统时钟
-19-
哈尔滨理工大学远东学院学士学位论文
3.3 显示与报警的设计
3.3.1 显示电路
在单片机应用系统设计中,一般都是把键盘和显示器放在一起考虑。本设计是利用80C51的串行口实现键盘/显示器接口。
当80C51的串行口未作它用时,使用80C51的串行口来外扩键盘/显示器。应用80C51的串行口方式0的输出方式。显示屏选择了常用的1602,构成键盘/显示器接口,其硬件接口电路如图3-16所示:
80C51 图3-16 显示与主机的硬件接口
3.3.2 报警电路
在微型计算机控制系统中,为了安全生产,对于一些重要的参数或系统部位,都设有紧急状态报警系统,以便提醒操作人员注意,或采取紧急措施。其方法就是把计算机采集的数据或记过计算机进行数据处理、数字滤波,标度变换之后,与该参数上下限给定值进行比较,如果高于上限值(或低于下限值)则进行报警,否则就作为采样的正常值,进行显示和控制。
本设计采用峰鸣音报警电路。峰鸣音报警接口电路的设计只需购买市售的压电式蜂鸣器,然后通过MCS-51的1根口线经驱动器驱动蜂鸣音发声。压电式蜂鸣器约需10mA的驱动电流,可以使用TTL系列集成电路7406或7407低电平驱动,也可以用一个晶体三极管驱动。在图中,P3.2接晶体管基极输入端。当P3.2输出高电平“1”时,晶体管导通,压电蜂鸣器两端获得约+5V电压而鸣叫;当P3.2输出低电平“0”时,三极管截止,蜂鸣器停止发声。
图3-17是一个简单的使用三极管驱动的峰鸣音报警电路:
-20-
哈尔滨理工大学远东学院学士学位论文
图3-17 三极管驱动的峰鸣音报警电路
80C51 3.3k 5.6k 本设计是为在温湿度测量中对温湿度的上下限超出是的提示报警,接口位于单片机80C51的P3.2口,但温湿度过限时,P3.2口被置0,本系统开始工作。
3.3.3 键盘设计
根据本系统功能的要求,提供四个键的键盘已经做够满足需要:一个set键,一个mode键,一个递增键,一个递减键。每个键与单片机的连接电路如下所示:
Vcc
80C51
图3-18 按键与单片机连接电路
这种设计方式既有优点也有缺点:优点是硬件电路简单,缺点是软件设计会比较复杂。
3.3.4 看门狗电路设计
看门狗(Watchdog)电路是嵌入式系统需要的抗干扰措施之一。本文用X25045芯片设计了一种新的看门狗电路,具有体积小、占用I/O口线少和编程方便的特点,可广泛应用于仪器仪表和各种工控系统中。
看门狗电路一般有软件看门狗和硬件看门狗两种软件看门狗不需外接硬件电路,但系统需要出让一个定时器资源,这在许多系统中很难办到,而且若系统软件运行不正常,可能导致看门狗系统也瘫痪 硬件看门狗是真正意义上的“程序运行监视器”,如计数型的看门狗电路通常由555多谐振荡器、计数器以及一些电阻、电容等组成,分立元件组成的系统电路较为复杂,运行不够可靠。
-21-
哈尔滨理工大学远东学院学士学位论文
CS SO WP Vss 1 2 3 4 X25045 8 7 6 5 Vcc Reset SCK Si
图3-19 X25045引脚图
X25045硬件连接图如图3-20所示X25045芯片内包含有一个看门狗定时器,可通过软件预置系统的监控时间 在看门狗定时器预置的时间内若没有总线活动,则X25045将从RESET输出一个高电平信号,经过微分电路C2、R3输出一个正脉冲,使CPU复位图2电路中,CPU的复位信号共有3个:上电复位(C1、R2),人工复位(S、R1、R2)和Watchdog复位(C2、R3),通过或门综合后加到RESET端C2、R3的时间常数不必太大,有数百微秒即可,因为这时CPU的振荡器已经在工作。
Vcc S R1 1K ≥1 R2 10K R3 10K
C2 图3-20 看门狗硬件连接图
C1 RESET P1.3 P1.2 P1.1 CS SO WP 80C51 P1.0 Vss X25045 Vcc RESET SCK SI
3.4 软件设计
3.4.1 主程序设计
温度控制主程序的设计应考虑以下问题: (1) 键盘扫描、键码识别和温度显示; (2) 温湿度采样,数字滤波; (3) 越限报警和处理;
(4) 温度标度转换。通常,符合上述功能的温度控制程序由主程序和T0中断服务
-22-
哈尔滨理工大学远东学院学士学位论文
程序两部分组成。这里所需要注意的是标度变换,下面简单的介绍一下标度变换:目的是要把实际采样的二进制值转换成BCD形式的温度值,然后存放到显示缓冲区34H-3BH。对一般线性仪表来说,标度变换公式为:
AXA0(AmA0)NXN0NmN0(3-6)
式中:A0为一次测量仪表的下限;Am为一次测量仪表的上限;Ax为实际测量值;为仪表下限所对应的数字量;Nm为仪表上限所对应的数字量;Nx为测量所得数字量。
主程序流程图如图3-21所示:
开始 设堆栈 清标志,清缓存,清显示 初始化T0和串口 CPU开中断 扫描键盘 温湿度采样 抗干扰处理 显示 否 控制周期是否到 是
图3-21 主流程图
在主程序中首先是对堆栈、标志位、缓存、显示屏的复位,以及对串行口、中断口的初始化。一切准备工作做好之后就进入了一个循环模块,在这个模块中检测键盘操作,并对温湿度进行采集、处理,将处理后的结果传递到1602显示。
-23-
哈尔滨理工大学远东学院学士学位论文
3.4.2 各子模块程序设计
温度采样子程序流程图如图3-22所示:
温度采集用的是AD590传感器,AD590是电流型传感器,连接到4051,数据通过4051传递到mc14433,进行A/D转换。单片机有三条I/O线连接到4051分时对4051发送通道选择信号,可以轮流采集8个通道。采集后的数据经过A/D转换,成为数字号,这仍然不是实际的数值,在经过数值转换后便可以在1602上显示。
采样程序
送采样数据地址
送通道号初值
送出通道号 启动A/D
读A/D数据
修改地址及通道号 各通道都采样一次 N
Y 返回 图3-22 温度采样程序路程图
看门狗程序流程图如图3-23所示:
看门狗电路的作用是防止系统跑飞而停止工作。它可以在系统跑飞之后能够及时将系统复位,通过这种方式来保证系统正常工作。
-24-
哈尔滨理工大学远东学院学士学位论文
开始 发读使能命令
发送一字节数据
发写状态字命令 发送一字节数据 主程序 结束
图3-23 看门狗程序流程图
湿度采集程序流程图如图3-24所示:
开始 设置采样地址 初始化通道号 启动A/D转换器 读数据 修改地址及通道号 N 数据都采样一次 Y 返回 图3-24 湿度采样流程图
-25-
哈尔滨理工大学远东学院学士学位论文
湿度采集使用的湿度传感器是hs1100,hs1100是电容式传感器,在电路中相当于一个电容器,进过555振荡电路向cpu传递电压频率信号。在程序中用3位二进制数依次选择8个通道,将各个通道的数据传递到cpu,进行处理。
键盘扫描程序流程图如图3-25所示:
开始 扫描键盘 判断是否有键按下 Y 延时20ms N 是否真的有键按下 Y Y 开始键 N 结束 N 启动系统工作
图3-25 键盘扫描程序流程图
在主程序中初始化各模块之后就先检测键盘,由于键盘有四个键分别连接到cpu的4个I/O口上,硬件电路简单,软件设计就相对比较复杂。4个键中其中有两个键用于增加或减少数值,另外有一个set键,一个mode键。在进入之前所说的主循环之后,cpu就主要用于显示数值,同时检测键,当测得mode键按下之后就表示选定了改值,可以通过递增或递减键进行值的调整,调整好之后用set键表示确认。此时,一个值就已经确定,同样的方法可以设置其余值。
报警子程序流程图如图3-26所示:
-26-
哈尔滨理工大学远东学院学士学位论文
报警 置位报警标志 报警持续计数器置初值 启动报警 返回
图3-26 报警程序流程图
报警电路的程序控制很简单,就是当温湿度超出制定的范围之后,给报警电路一个脉冲信号,信号进过放大传递到蜂鸣器,从而发声。
3.4.3 温湿度控制软件设计
1. PID控制作用
PID控制仍是最基本的控制规律,比例控制能迅速反应误差,从而减小稳态误差。但是,比例控制不能消除稳态误差。比例放大系数的加大,会引起系统的不稳定。积分控制的作用是,只要系统有误差存在,积分控制器就不断地积累,输出控制量,以消除误差。因而,只要有足够的时间,积分控制将能完全消除误差,使系统误差为零,从而消除稳态误差。积分作用太强会使系统超调加大,甚至使系统出现振荡。微分控制可以减小超调量,克服振荡,使系统的稳定性提高,同时加快系统的动态响应速度,减小调整时间,从而改善系统的动态性能。
因此,本设计不采用单独的比例或比例积分控制,而是采用PID控制,适当地调整比例放大系数KP,积分时间TI和微分时间Td,使整个控制系统得到良好的性能。
2. 增量式PID算式
在电子数字计算机直接数字控制系统中,PID控制器是通过计算机PID控制算法程序实现的。计算机直接数字控制系统大多数是采样-数据控制系统。当执行机构需要的不是控制量的绝对数值,而是其增量时,要采用PID增量式控制算法。增量式PID 算法的原理如图3-27所示。
r(t)+
e(t) Δu(t) u(k) c(k) 执行机构 PID控制器 被控对象 - 图3-27 增量PID算法原理
-27-
哈尔滨理工大学远东学院学士学位论文
对于增量式算法,可以对输入加一个前置滤波器,使得进入控制算法的给定值不突变,而是有一定惯性延迟的缓变量。
在增量式算法中,比例项与积分项的符号有以下关系:如果被控量继续偏离给定值,则这两项符号相同,而当被控量向给定值方向变化时,则这两项的符号相反。 由于这一性质,当被控量接近给定值的时候,反号的比例作用阻碍了积分作用,因而避免了积分超调以及随之带来的振荡,这显然是有利于控制的。但如果被控量远未接近给定值,仅刚开始向给定值变化时,由于比例和积分反向,将会减慢控制过程。
为了加快开始的动态过程,我们可以设定一个偏差范围v,当偏差|e(t)|<β时,即被控量接近给定值时,就按正常规律调节,而当|e(t)|>=β时,则不管比例作用为正或为负,都使它向有利于接近给定值的方向调整,即取其值为|e(t)-e(t-1)|,其符号与积分项一致。利用这样的算法,可以加快控制的动态过程。
3. 带积分分离的PID控制
由于控制系统在开工、停工、或者大幅度提高或降低给定值的情况下系统输出会出现较大的偏差。这种较大的偏差不可能在短时间内消除,在经过积分项的累积后可能会使控制量很大,有时甚至可能会超过执行机构的极限。而当负偏差的绝对值过大的时候也会出现类似现象。如果执行机构已经达到极限了但偏差仍不能消除,由于积分的作用就会导致PID差分方程的运算结果继续增大或减少而执行机构已经没有相应的动作了。这种现象叫做积分饱和。为了防止积分饱和导致系统反应不及时需要加入克服积分饱和的方法。这里采用的是积分分离的方法。
连续控制系统中的PID控制原理是
1rde(t)u(t)Kp[e(t)e(τ)dτTD]u0 (3-8)
T10dt其中u为控制器的控制输出,u0为偏差为0的控制作用,数,T1为控制器的积分时间参数,TD为控制器的微分时间常数。
利用外接矩形法进行数值积分,一阶向后差分进行数值微分。当选定采样周期为
T时有:
Kp为控制器的放大倍
e(t)dteΔtTe0jj0j0tkkj (3-9)
de(t)ekek1ekek1 (3-10) dtΔtT带入第一个公式后可以得出以下差分方程:
TdTkukKp[ekej(ekek1)]u0 (3-11)
T1j0T-28-
哈尔滨理工大学远东学院学士学位论文
式中Δt=T,ek为第k次采样时的偏差,ek1为第k-1次采样时的偏差。 将上式改写成下面的形式
ukKpekKIejKD(ekek-1)u0 (3-12)
j0k本公式被称为积分分离PID算式。其控制思想是:但偏差大于某个规定的门限值时,删去积分作用,从而使
ej不至于过大。只有当e较小时,才引入积分作用,以
消除静差。相应的算法如图3-28所示。
4. 带积分分离的PID算法 根据以上描述,可以得知
eTkuTdkKp[kTej(ekek1)]u0 1j0T同理,可以得出
Tk1uTk1Kp[ek1Tejd(ek1ek2)]u0 1j0T于是
Δu=ukuk1Kp[eTkek1TeTkd(ek2ek1ek2)] IT在实际控制中上式可改写为
Δu=AekBek1Cek2 其中
A=Kp(1TTTd) ITB=K2Tdp(1T) C=KTdpT 这样处理后可以简化代码。具体过程如图3-28所示:
-29-
(3-13)
(3-14)
(3-15) (3-16) (3-17) (3-18) (3-19) 哈尔滨理工大学远东学院学士学位论文
开始 计算E 计算A=Kp(1TTd) TIT计算B=Kp(12Td) T计算C=KpTd T|Ek|<=E N Y 计算积分项 计算比例微分及积分项和 结束 图3-28 带积分分离的PID算法
-30-
哈尔滨理工大学远东学院学士学位论文
第4章 结果分析
4.1 单元测试
单元测试——是最小粒度的测试,以测试某个功能或代码块。单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。单元测试任务包括:
1. 模块接口测试;
2. 模块局部数据结构测试; 3. 模块边界条件测试;
4. 模块中所有执行通路测试; 5. 模块的各条错误处理通路测试。
本实验测试的主要对象为:A/D转换模块测试;LCD显示模块的测试。
4.1.1 LCD显示模块测试
利用开发平台自带实验教材,检测LCD显示输出的可用性。 在此利用DARW程序绘制图形。
/*------------------------绘制主窗体--------------------------*/ void drawMainWin(GR_GC_ID gc) {
window = GrNewWindow(GR_ROOT_WINDOW_ID, 0, 0, WIDTH, HEIGHT,0,DC,WIC);
GrSelectEvents(window,
GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_CLOSE_REQ |
GR_EVENT_MASK_MOUSE_ENTER | GR_EVENT_MASK_MOUSE_EXIT); GrMapWindow(window);
sdtop = GrNewWindow(window, 0, 0, SDTOPW, SDTOPH,0,WIC,WIC); GrSelectEvents(sdtop,
GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_CLOSE_REQ ); GrMapWindow(sdtop);
bwin(gc,sdtop,SDTOPW,SDTOPH);
GrSetGCFont(gc, fontid);
GrSetGCForeground(gc, BLACK);
text=GrNewWindow(window,10,55,120,35,0,DC,DC); GrText(window, gc, 170,65+FY,\"Temp:\
-31-
哈尔滨理工大学远东学院学士学位论文
temp=GrNewWindow(window,220,55,100,35,0,DC,DC);
GrSelectEvents(text,
GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_CLOSE_REQ ); GrMapWindow(text); GrSelectEvents(temp,
GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_CLOSE_REQ ); GrMapWindow(temp); }
4.1.2 采样模块测试
小信号的采样采用热点偶,热电阻,在工业中有可能出现热偶烧断或热阻短路等不可预知的以外情况,鉴于此必须对采样电路进行测试,在测试中通入恒流源进行检测。
可以结合LCD显示模块进行测试,我们用一个电源模拟小信号,看LCD是否可以显示温度。如果采样模块工作正常的话,LCD应显示电源输入的值。
表4-1 A/D转换测试表
输出数据 1 2.5 3 3.5 4 5 理想数据 1 2.5 3 3.5 4 5 实际数据 1.2 2.3 3.0 3.6 4.2 4.8 4.2 集成测试
在进行集成测试时,目的是看采样模块所采集的数据在LCD是否显示,键盘的设定字LCD的显示情况。结果是采样模块在LCD可以正常显示,键盘设定也可以在LCD上正常显示。
-32-
哈尔滨理工大学远东学院学士学位论文
结 论
毕业论文是本科学习阶段一次非常难的的理论与实际相结合的机会,通过这次比较完整的基于ARM9的嵌入式linux移植的设计,我摆脱了单纯的理论知识学习状态,和实际设计时也提高了我的综合运用所学的专业基础知识,解决实际系统以及操作的能力,同时也提高我查阅文献资料、设计手册、设计规范以及电脑相关其他专业的能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到锻炼,经验得到了丰富,并且意志品质力,抗压能力以及耐力也都得到了不同程度的提升。这是我们都希望看到的也正是我们进行毕业设计的目的所在。
本设计的整体思想是:先做出一个最小系统,然后在最小系统的基础上不断依次添加键盘、显示屏、看门狗、报警、温度采集、湿度采集模块。在设计的过程中也遇到了一些困难,正是随着困难一个个被解决,我的能力也逐渐提高。
在本系统中并没有用到多少很前沿的器件,单片机采用的是80C51;键盘由4个键组成,硬件电路简单,只是软件设计稍微复杂,这回避了本专业缺陷,发挥了优势;温度采集芯片使用了AD590,湿度采集芯片采用了S1100/HS1101,这两种芯片使用方法很成熟,属于常用的芯片,使用它们,资料很丰富;看门狗电路与报警电路硬件连接与软件设计都比较简单,看门狗电路中使用了X25045,报警电路只是通过给扬声器发脉冲,从而发声。
本次设计将大学期间所学软硬件知识很好的串接起来,并引用到实际应用中。虽然毕业设计内容繁多,过程繁琐但我的收藏却更加丰富。各种系统的适用条件,各种设备的选用标准,我都是随着设计的不断深入而不断熟悉并学会应用的。
提高是有限的但提高也是全面的,正是这一次设计让我积累了无数实际经验,使我的头脑更好被知识武装了起来,也必然会让我在未来的工作学习中表现出更高的应变能力,更强的沟通能力和理解力。
-33-
哈尔滨理工大学远东学院学士学位论文
致 谢
经过几个月的努力,毕业设计基本完成了。在毕业设计的实践中,学到很多有用的知识,也积累了不少宝贵的项目开发经验。
值此论文完成之际,作者深深地感谢指导老师给予我的悉心指导、多方面的入微关怀和帮助。老师渊博的知识、扎实的理底、高深的学术造诣、严谨的治学态度和胸怀宽宏的高尚品质,让我受益匪浅,终身难忘。使我不仅接受了全新的思想观念,树立了宏伟的学术目标,领会了基本的思考方式。
在此也要感谢周围的同学,他们给我了很大的鼓励和支持,为我做试验提供了良好的试验环境,让我在毕业设计实践过程中会走很多弯路,同时也感谢学院为我提供良好的做毕业设计的环境。在此特别表示感谢,使我的毕业设计有了个的结束。
IBM 有句著名的宣传词叫“The future is OPEN”,我认为这句话有两层意思,第一层意思是技术的进步需要所有的人共同的努力,开源的世界里面所有的人都可以贡献自己的力量去让技术进步,我们可以感觉到它正在改变我们的世界;第二层的意思是,每一个都贡献自己的力量去帮助别人,在帮助别人的同时,也帮助了我们自己。
“不积跬步无以至千里”,这次毕业论文能够最终顺利完成,归功于各位老师四年间的认真负责,使我能够很好的掌握专业知识,并在毕业论文中得以体现。也正是你们长期不懈的支持和帮助才使得我的毕业论文最终顺利完成。
最后,感谢我的父母以及所有这四年学习过程中给予我支持、关心、帮助的亲人和朋友们,感谢你们。
-34-
哈尔滨理工大学远东学院学士学位论文
参考文献
[1] 张琳娜,刘武发.传感检测技术及应用[M].中国计量出版社,1999.
[2] 沈德金,陈粤初.MCS-51系列单片机接口电路与应用程序实例[M].北京航空航
天大学出版社,1990.
[3] 胡汉才.单片机原理及接口技术[M].清华大学出版社,1996.
[4] 李志全.智能仪表设计原理及应用[J].国防工业出版社,1998年6月.
[5] 何立民.MCS-51系列单片机应用系统设计[M].北京航空航天大学出版社,1990
年1月.
[6] 李建民.单片机在温度控制系统中的应用[M].江汉大学学报,1996年6月. [7] 张毅刚,彭喜元,姜守达,乔立岩.新编MCS-51系列单片机应用设计[N].哈尔
滨工业大学出版社,2003年6月.
[8] 潘其光.常用测温仪表技术问答[G].国防工业出版社,19. [9] 杨世成.信号放大电路[M].电子工业出版社,1995. [10] 高光天.仪表放大器应用[J].科学出版社,1995.
[11] 潘立民.王燕芳.微型计算机控制技术[N].人民邮电出版社,1990.
[12] 邵敏权..单片机原理实验及应用[G].吉林科学技术出版社,1995年1月. [13] 陈汝全.实用微机与单片机控制技术[G].电子科技大学出版社,1995年7月. [14] 王森.仪表使用数据手册[G].化学工业出版社,1998年7月.
[15] MlhornCJ,DavisTD,BeamGE.Voltagesags:theirim pact on the utilityan dindustrial customers[J].IEEE Trans on IA,1998.
[16] 何希才,虹敏.传感器应用接口电路[G].机械工业出版社,1997.
[17] 杨中华,汪蕙,刘润生.模拟集成电路的自动综合方法[G].科学出版,1999. [18] 考夫曼,塞德.电子计算手册[G].国防工业出版社,1985.
[19] 刘笃仁,韩保君.传感器原理及应用技术[N].机械工业出版社,2003年8月. [20] 于微波,林晓梅,刘俊萍.微型机算计控制系统[M].吉林人民出版社,2002年
5月.
[21] 童诗白.模拟电子技术基础.高等教育出版社[M],2001.
[22] 杨振江.智能仪器与数据采集系统中的新器件及应用[M].西安电子科技大学出
版社,2001年12月.
[23] 周航慈.单片机应用程序设计[M].北京航空航天大学出版社,1991年8月. [24] 王毅.单片机器件应用手册[G].人民邮电出版社,1994.
[25] GomezJC,MorcosMM.Voltage sag mitigation using overcurrent protection devices[J].Electric Power Components and Systems, 2001.
-35-
哈尔滨理工大学远东学院学士学位论文
附录A
SCM five important parts
1. Bus:
We know that a circuit is always made by the devices connected by wires, in analog circuits, the connection does not become a problem because the device is a serial relationship between the general, the device is not much connection between the , but the computer is not the same circuit, it is a microprocessor core, the device must be connected with the microprocessor, the device must be coordination between, so they need to connect on a lot, as if still analog circuit like the microprocessor and devices in the connection between the individual, the number of lines will be a little more surprising, therefore the introduction of the microprocessor bus Zhong Each device Gongtong access connections, all devices 8 Shuju line all received eight public online, that is the equivalent of all devices together in parallel, but only this does not work, if there are two devices send data at the same time, a 0, a 1, then, whether the receiver received what is it? This situation is not allowed, so to be controlled by controlling the line, time-sharing the device to work at any time only one device to send data (which can have multiple devices to receive both). Device's data connection is known as the data bus, the device is called line of control all the control bus. Internal or external memory in the microcontroller and other devices have memory cells, the memory cell to be assigned addresses, you can use, distribution, of course, to address given in the form of electrical signals, and as more memory cells, so, for the address allocation The line is also more of these lines is called the address bus.
Second, data, address, command
The reason why these three together because of the nature of these three are the same - the number, or are a string of '0 'and '1' form the sequence. In other words, addresses, instructions are also data. Instruction: from single chip designer provides a number of commonly used instructions with mnemonic we have a strict correspondence between the developer can not be changed by the MCU. Address: the search for MCU internal, external storage units, input and output port based on the address of the internal unit value provided by the chip designer is good, can not be changed, the external unit can be single chip developers to decide, but there are a number of address units is a must (see procedures for the implementation of the process).
Third, P0 port, P2 and P3 of the second function I use:
Beginners often on the P0 port, P2 and P3 port I use the second function puzzled that the second function and have a switch between the original function of the process, or have a directive, in fact, the port The second feature is automatic, do not need instructions to convert. Such as P3.6, P3.7 respectively WR, RD signal, when the microchip processing machines external RAM or external I / O port, they are used as a second function, not as a general-purpose I / O port used, so long as a A microprocessor implementation of the MOVX instruction, there will be a corresponding signal sent from the P3.6 or P3.7, no prior use of commands. In fact 'not
-36-
哈尔滨理工大学远东学院学士学位论文
as a general-purpose I / O port use' is also not a 'no' but (user) 'not' as a general-purpose I / O port to use. You can arrange the order of a SETB P3.7's instructions, and when the MCU execution to the instruction, the also make P3.7 into a high, but users will not do so because this is usually will cause the system to collapse.
Fourth, the program's implementation:
Reduction in power after the 8051 microcontroller within the program counter (PC) in the value of 0000 ', the process is always from the 0000' units started, that is: the system must exist in ROM 0000 'this unit , and in 0000 'unit must be stored in a single instruction.
5. the stack:
Stack is a region, is used to store data, there is no special about the region itself is a part of internal RAM, special access to its data storage and the way that the so-called 'advanced post out backward first out ', and the stack has a special data transmission instructions that' PUSH 'and' POP ', has a special expertise in its services unit, that is, the stack pointer SP, whenever a PUSH instruction execution, SP on (in the Based on the original value) automatically add 1, whenever the implementation of a POP instruction, SP will (on the basis of the original value) automatically by 1. As the SP values can be changed with the instructions, so long as the beginning of the process to change the value of the SP, you can set the stack memory unit required, such as the program begins, with an MOV SP, # 5FH instructions When set on the stack starting from the memory unit 60H unit. There is always the beginning of the general procedure with such a directive to set the stack pointer, because boot, SP initial value of 07H, 08H This unit from the beginning to stack next, and 08H to 1FH 8031 is the second in the region, three or four working register area, often used, this will lead to confusion of data. Different authors when writing programs, initialize the stack is not exactly the same directive, which is the author's habit. When set up the stack zone, does not mean that the region become a special memory, it can still use the same memory region as normal, but generally the programmer does not regard it as an ordinary memory used
-37-
哈尔滨理工大学远东学院学士学位论文
单片机应用五大重要部分
一、总线:
我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线,则线的数量将多得惊人,所以在微处理机中引入了总线的概念,各个器件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来,但仅这样还不行,如果有两个器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢?这种情况是不允许的,所以要通过控制线进行控制,使器件分时工作,任何时候只能有一个器件发送数据(可以有多个器件同时接收)。器件的数据线也就被称为数据总线,器件所有的控制线被称为控制总线。在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址,才能使用,分配地址当然也是以电信号的形式给出的,由于存储单元比较多,所以,用于地址分配的线也较多,这些线被称为地址总线。 二、数据、地址、指令:
之所以将这三者放在一起,是因为这三者的本质都是一样的——数字,或者说都是一串„0‟和„1‟组成的序列。换言之,地址、指令也都是数据。指令:由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不可以由单片机的开发者更改。地址:是寻找单片机内部、外部的存储单元、输入输出口的依据,内部单元的地址值已由芯片设计者规定好,不可更改,外部的单元可以由单片机开发者自行决定,但有一些地址单元是一定要有的(详见程序的执行过程)。 三、P0口、P2口和P3的第二功能用法:
初学时往往对P0口、P2口和P3口的第二功能用法迷惑不解,认为第二功能和原功能之间要有一个切换的过程,或者说要有一条指令,事实上,各端口的第二功能完全是自动的,不需要用指令来转换。如P3.6、P3.7分别是WR、RD信号,当微片理机外接RAM或有外部I/O口时,它们被用作第二功能,不能作为通用I/O口使用,只要一微处理机一执行到MOVX指令,就会有相应的信号从P3.6或P3.7送出,不需要事先用指令说明。事实上„不能作为通用I/O口使用‟也并不是„不能‟而是(使用者)„不会‟将其作为通用I/O口使用。你完全可以在指令中按排一条SETB P3.7的指令,并且当单片机执行到这条
-38-
哈尔滨理工大学远东学院学士学位论文
指令时,也会使P3.7变为高电平,但使用者不会这么去做,因为这通常会导致系统的崩溃。
四、程序的执行过程:
单片机在通电复位后8051内的程序计数器(PC)中的值为„0000‟,所以程序总是从„0000‟单元开始执行,也就是说:在系统的ROM中一定要存在„0000‟这个单元,并且在„0000‟单元中存放的一定是一条指令。 五、堆栈:
堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是内部RAM的一部份,特殊的是它存放和取用数据的方式,即所谓的„先进后出,后进先出‟,并且堆栈有特殊的数据传输指令,即„PUSH‟和„POP‟,有一个特殊的专为其服务的单元,即堆栈指针SP,每当执一次PUSH指令时,SP就(在原来值的基础上)自动加1,每当执行一次POP指令,SP就(在原来值的基础上)自动减1。由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP的值,就可以把堆栈设置在规定的内存单元中,如在程序开始时,用一条MOV SP,#5FH指令,就时把堆栈设置在从内存单元60H开始的单元中。一般程序的开头总有这么一条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元开始往后,而08H到1FH这个区域正是8031的第二、三、四工作寄存器区,经常要被使用,这会造成数据的混乱。不同作者编写程序时,初始化堆栈指令也不完全相同,这是作者的习惯问题。当设置好堆栈区后,并不意味着该区域成为一种专用内存,它还是可以象普通内存区域一样使用,只是一般情况下编程者不会把它当成普通内存用了。
-39-
哈尔滨理工大学远东学院学士学位论文
附录B
系统整体电路图如附图1-1所示:
AD590_0 Vcc CD4051 I0 OUT I7 AD590_7 EOC Q0~3 14433 DS0~3 - + 3 80C51 INT1 P2.0~2.3 P2.4~2.7 CD4051 I0 P1.0~1.7 P0.0~0.2 RESET I7 R4 3 3 8 4 R1 RST X25045 1602 R3 3 7 6 2 5 1 555 R4 附图 1-1 整体电路图
-40-
哈尔滨理工大学远东学院学士学位论文
主程序代码:
#include \"reg51.h\"
#define LCM_Data P0 //数据端口
#define Busy 0x80 //用于检测LCM状态字中的Busy标识
sbit LCM_RW= P1^1; //定义信号引脚 sbit LCM_RS= P1^0 ; sbit LCM_E= P1^2 ;
void WriteDataLCM(unsigned char WDLCM);
void WriteCommandLCM(unsigned char WCLCM,BuysC);
unsigned char ReadDataLCM(void); unsigned char ReadStatusLCM(void); void LCMInit(void);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); void Delay5Ms(void); void Delay400Ms(void);
unsigned char code uctech[] = {\"U-easytech.com\unsigned char code net[] = {\"fretech.com\
void main(void) {
Delay400Ms(); //启动等待,等LCM讲入工作状态 LCMInit(); //LCM初始化
Delay5Ms(); //延时片刻(可不要)
DisplayListChar(1, 0, uctech); //在第一行显示\"welcome!\" DisplayListChar(0, 1, net); //在第二行显示\"hxl_raien.\" ReadDataLCM(); //测试用句,可以不要 while(1); //不断循环,也称“死循环” }
//写数据
void WriteDataLCM(unsigned char WDLCM) {
ReadStatusLCM(); //检测忙 LCM_Data = WDLCM; LCM_RS = 1; LCM_RW = 0;
LCM_E = 0; //若晶振速度太高可以在这后加小的延时 LCM_E = 0; //延时
-41-
哈尔滨理工大学远东学院学士学位论文
LCM_E = 1;
}
//写指令
void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测 {
if (BuysC) ReadStatusLCM(); //根据需要检测忙 LCM_Data = WCLCM; LCM_RS = 0; LCM_RW = 0; LCM_E = 0; LCM_E = 0;
LCM_E = 1; }
//读数据
unsigned char ReadDataLCM(void) {
LCM_RS = 1; LCM_RW = 1; LCM_E = 0; LCM_E = 0;
LCM_E = 1;
return(LCM_Data); }
//读状态
unsigned char ReadStatusLCM(void) {
LCM_Data = 0xFF; LCM_RS = 0; LCM_RW = 1;
LCM_E = 0; LCM_E = 0; LCM_E = 1;
while (LCM_Data & Busy); //检测忙信号 return(LCM_Data); }
void LCMInit(void) //LCM初始化 {
LCM_Data = 0;
WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号 Delay5Ms();
-42-
哈尔滨理工大学远东学院学士学位论文
WriteCommandLCM(0x38,0);
Delay5Ms();
WriteCommandLCM(0x38,0); Delay5Ms();
WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号 WriteCommandLCM(0x08,1); //关闭显示 WriteCommandLCM(0x01,1); //显示清屏
WriteCommandLCM(0x06,1); // 显示光标移动设置 WriteCommandLCM(0x0C,1); // 显示开及光标设置 }
//按指定位置显示一个字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) //x表示列、y 表示行 {
Y &= 0x1;
X &= 0xF; //X不能大于15,Y不能大于1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40; X |= 0x80; // 算出指令码
WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码 WriteDataLCM(DData);
}
//按指定位置显示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) {
unsigned char ListLength; ListLength = 0; Y &= 0x1;
X &= 0xF; //X不能大于15,Y不能大于1 while (DData[ListLength]>0x20) //若到达字串尾则退出,字符长度小于32 {
if (X <= 0xF) //X坐标应小于0xF(15) {
DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符 ListLength++; X++; } } }
void Delay5Ms(void) //延时5ms {
-43-
哈尔滨理工大学远东学院学士学位论文
unsigned int i;
for(i=0;i<5000;i++); }
void Delay400Ms(void) //延时400ms {
unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA--) {
TempCycB=7269; while(TempCycB--); } }
-44-
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务