1、基于 RlTOS 和 ISP 功能的数字仪表系统设计与实现摘要:以 Atmel 公司的 AT89S52 型单片微控制器为对象,介绍基于 RTOS(多任务实时操作系统)和 ISP(在系统可编程)功能的数字仪表系统的软硬件设计,同时给出硬件系统的组成和相关软件编程的实现代码。经某武器系统的调试试验表明,该仪表系统具有显示直观、准确、可靠的优点。关键词:RTOS;ISP;单片微控制器;液晶显示模块引言Atmel 公司的控制器以其集成度高、在线调试方便等特点广泛应用于工程实践领域,文中以某武器系统的前期预研为背景,讨论了数字仪表系统的软硬件实现过程,其主要功能包含:实时采集配电箱系统的 6 路正负模拟
2、电压值及作战环境温度,并通过 MSl2232B型液晶模块动态式显示。1 软件特性随着 C 语言在嵌入式系统中的广泛运用,软件系统的实时性、复杂性设计要求也越来越高,用通常的单任务无限循环结构与中断服务子程序相配合的编程思想已难以完成相关的软件设计或实现较为困难,RTOS(多任务实时操作系统) 是现阶段较为流行的处理方式。RTOS 的基本设计思想是将多种系统输入和处理要求,按功能做成不同的任务函数体,并分配适当的优先级,参考 Windows 系统的多线程处理机制,将 CPU 执行时间划分成若干区段,每个任务函数体对应一个时间片段在规定的时间内执行完后允许切换到另一个任务,因各时间段非常短,表现的
3、是多任务实时处理特性。因为任务并非同时执行且具备跳转特性,所以整个项目管理文件内可以有多个无限循环结构,且省略了 main 入口函数,这是 RTOS 最大的特色。文中以 Keil 集成开发环境为平台,利用 RTX5l Tiny 版本来完成整个软件设计过程。ISP(在系统可编程)是一种适合 Atmel 系列器件的 Flash 技术,通过 PC 的 LPT 标准并行接口,能实时地将 Intel 格式的源程序代码下载到微控制器的相应存储区域。ISP 的最大特点是简化了调试过程,提高了软件系统的可维护性,使其具备了在线升级特性。而且整个开发过程省去了反复插拔电路的操作。2 系统硬件构成本系统硬件主要包
4、括如下几个模块:AT89S52 型主控制器、ADC0809 型模数转换、MSl2232B 型液晶显示器、温度传感器及语音报警等。其中 AT89S52 型微处理器主要完成外围器件的硬件控制及相关数据解算,ADC0809 采集 6 路模拟信号并输入主控制器,MSl2232B 完成数字及相关标识字符的显示,配电系统的电压波动超出预定指标时由语音模块给出相应的报警信息。2.1 主控制器模块主控制器是 Atmel 公司生产的 AT89S52 型单片微控制器,与常规 C51 系列相比,其突出特点是具有 8KB 闪速式存储器 (降低了对外扩存储器的要求 )、256B RAM 内存( 可容纳更多局部变量)、8
5、 个中断源及 ISP 在线可编程特性。2.2 液晶显示模块MSl2232B 属于图形点阵系列的显示器件,具有双行显示功能,其点阵结构为 12232,通过 AT89s52 给出必要的数据和指令来操作 MSl2232B 主、辅控制器,从而完成图形、字符等相关信息的显示。该液晶显示模块还具有较强的通用性用户用少量元件就可以构成一个完整的 LCD 系统。电路连接如图 1 所示。2.3 AD 数据采集模块由于本系统涉及多路模拟信号,故选择了 AD(20809 型通用模数转换器,它采用逐次逼近方式完成 AD 转换过程,其片内带有 8 路模拟开关,能自动锁存信号,输入电压范围是 0V+5V,因为该器件的输出
6、具有 1TrL 三态锁存缓冲器结构,所以可以直接连人单片微控制器的 IO 口。相关的接口连接如图 2 所示。需要说明的是,在本系统 6 路电源信号中只有一路负电源信号符合 ADC0809 0V5v 的输入特性,因此必须配备相应的反相电路,则通过 LM358 型运算放大器来完成。利用LM358 还可以扩展监测范围( 以降低测量精度为前提),这对于精度要求不太高的场合是可行的。图 2 中 PC817 型光耦用于检测负电压信号,当 IN4 为低电平信号时对应负电压信号,此时在 MSl2232B 的相应行位置给出“-” 号标志,这不仅解决了正负电压同行显示的兼容性问题,而且减少了软件设计量(由 6 路
7、简化为 3 路),同时使系统实时性相应提升。2.4 温度传感器模块DSl8820 是 Dallas 公司推出的 lWire 式数字温度传感器,它能实时采集现场环境的温度数据,并将相应的值转换为数字量输出。该温度传感器与 AT89S52 的连接如图 3 所示。2.5 语音报警模块该模块主要实现异常情况下告警信息的输出,只要配电箱电压信号的波动值超出一定的范围,音频告警装置即给出不同的频率信号使蜂鸣器发声,以提示相关操作人员注意。3 系统软件设计按 RTOS 系统的程序结构要求,软件工程主要由如下 4 部分组成:初始化、数据采集与 AD 转换、显示子程序、温度监测与告警模块。如果将初始化设置为任务
8、 0,那么除了要完成相应的硬件配置与变量赋初值外,还必须启动所有其他任务,另外,因为初始化过程只须进行一次,所以 Task 0 还应当删除其自身。具体的程序代码如下所示:void Init(void)_task_Intialvariable=0;LcdInitialO;ClrScreenO;0s_create_task(AI)C0809I)ata);os_create_task(DSl8820Temperate);0s_create_task(LCMI)isplay);0s_delete_task(Intial);其中相关的宏定义变量值为:#define Intial O#define ADC
9、0809Data 1#define DSl 8820Temperate 2#define LCMDisplay 3在 Keil 集成开发环境下调试本程序时,除了要包括相应的头文件(rtx51tnyh)外,还必须设置好相应的环境参数值。3.1 数模转换子程序数据采集与 AI)转换子程序主要对配电箱传来的模拟信号进行采样、量化及返回值处理。软件编程时的电气时序及相关技术要求如图 4 所示。在时序图中,上升沿清空量化结果寄存器内的值,下降沿启动,AD 转换;采样启动脉冲的高电平状态至少应维持 100s;EOC 变为低电平表示转换过程正在进行,且启动信号的硬件迟滞效应时间至少应为 10s;MSB 对应
10、 AT89S52 并口的:P0.7,LSB 对应 P0.0。关键部分的程序源代码及注释如下:unsigned int AI)C0809(void)unsigned int wait=3;ChannelChooseA=1;ChannelChooseB=0;ChannelChooseC=0;ADStartPulse=0;ADStartPulse=1;/产生 A/D 转换的启动脉冲(上升沿部分)delay();保证启动脉冲的高电平宽度至少大于 100sADStartPulse=0;产生 AD 转换的启动脉冲(下降沿部分)wait-;wait-; 指令延时以保证达到:EOC变为低电平所需的硬件迟滞要求
11、。whilefADConvertEOC=0):return(Result);将 A)转换后的量化值返回到主函数中。3.2 液晶显示模块MSl2232B 型图形点阵液晶显示(LCM) 模块左右分为 Master 和 Slave 控制器,上下共分 4 页,左边列地址为 0-61,右边列地址为 0-61,对该器件的操作关键是按时序图正确配置好主、辅控制器的工作状态。利用 AT89S52 访问 LCM 时有二种常用的方法,即存储器映射寄存器寻址和模拟接口时序,本系统采用后一种方法。主要函数模块源代码分析:void MasterWriteD(unsigned char Ramdata)/向 Master
12、 控制器写数据ReadOrWrite=0;InstructionOrData=1;MasterEl=1;P0=Ramdata;MasterEl:0;void MasterWriteI(unsigned char Ramdata)/向 Master 控制器写指令ReadOrWrite=0;InstructionOrData=0;MasterEl=1;P0=Ramdata;MasterE1=O;void ReadState(void) /检测主、辅控制器工作状态ReadOrWrite=1;InstructionOrData=0;MasterEl=1:SlaveE2=1;PO=0xff;while(BusStateBusy=1);void SetPage(unsigned char page0,unsigned char pagel)MasterWriteI(0xb8 | pagel);SlaveWriteI(0xb8 | page0);void SetColumn(unsigned char address0,unsigned char addressl)MasterWriteI(0x3f 发出复位脉冲前先释放总线