摘要:以Atmel公司的AT89S52型单片微操控器为目标,介绍根据RTOS(多使命实时操作体系)和ISP(在体系可编程)功用的数字外表体系的软硬件规划,一起给出硬件体系的组成和相关软件编程的完结代码。经某武器体系的调试实验标明,该外表体系具有显现直观、精确、牢靠的长处。 要害词:RTOS;ISP;单片微操控器;液晶显现模块 导言 Atmel公司的操控器以其集成度高、在线调试便利等特征广泛使用于工程实践范畴,文中以某武器体系的前期预研为布景,评论了数字外表体系的软硬件完结进程,其首要功用包含:实时收集配电箱体系的6路正负模仿电压值及作战环境温度,并经过MSl2232B型液晶模块动态式显现。 1 软件特性 跟着C言语在嵌入式体系中的广泛运用,软件体系的实时性、杂乱性规划要求也越来越高,用一般的单使命无限循环结构与中止服务子程序相配合的编程思维已难以完结相关的软件规划或完结较为困难,RTOS(多使命实时操作体系)是现阶段较为盛行的处理办法。
RTOS的根本规划思维是将多种体系输入和处理要求,按功用做成不同的使命函数体,并分配恰当的优先级,参阅Windows体系的多线程处理机制,将 CPU履行时刻划分红若干区段,每个使命函数体对应一个时刻片段.在规则的时刻内履行完后答应切换到另一个使命,因各时刻段十分短,体现的是多使命实时处理特性。因为使命并非一起履行且具有跳转特性,所以整个项目办理文件内能够有多个无限循环结构,且省掉了main进口函数,这是RTOS最大的特征。文中以Keil集成开发环境为渠道,使用RTX5l Tiny版原本完结整个软件规划进程。 ISP(在体系可编程)是一种合适Atmel系列器材的Flash技能,经过PC的LPT规范并行接口,能实时地将Intel格局的源程序代码下载到微操控器的相应存储区域。ISP的最大特征是简化了调试进程,提高了软件体系的可维护性,使其具有了在线晋级特性。并且整个开发进程省去了重复插拔电路的操作。 2 体系硬件构成 本体系硬件首要包含如下几个模块:AT89S52型主操控器、ADC0809型模/数转化、MSl2232B型液晶显现器、温度传感器及语音报警等。其间 AT89S52型微处理器首要完结外围器材的硬件操控及相关数据解算,ADC0809收集6路模仿信号并输入主操控器,MSl2232B完结数字及相关标识字符的显现,配电体系的电压动摇超出预订目标时由语音模块给出相应的报警信息。
2.1主操控器模块 主操控器是Atmel公司出产的AT89S52型单片微操控器,与惯例C51系列比较,其杰出特征是具有8KB闪速式存储器(下降了对外扩存储器的要求)、256B RAM内存(可包容更多局部变量)、8个中止源及ISP在线可编程特性。 2.2液晶显现模块 MSl2232B归于图形点阵系列的显现器材,具有双行显现功用,其点阵结构为122%26;#215;32,经过AT89s52给出必要的数据和指令来操作MSl2232B主、辅操控器,然后完结图形、字符等相关信息的显现。该液晶显现模块还具有较强的通用性.用户用少数元件就能够构成一个完好的LCD 体系。电路衔接如图1所示。 2.3 A/D数据收集模块 因为本体系触及多路模仿信号,故挑选了AD(20809型通用模/数转化器,它选用逐次迫临办法完结A/D转化进程,其片内带有8路模仿开关,能主动锁存信号,输入电压规模是0V~+5V,因为该器材的输出具有1TrL三态锁存缓冲器结构,所以能够直接连人单片微操控器的I/O口。相关的接口衔接如图2所示。 需求阐明的是,在本体系6路电源信号中只需一路负电源信号契合ADC0809 0V~5v的输入特性,因而有必要装备相应的反相电路,则经过LM358型运算扩大器来完结。使用LM358还能够扩展监测规模(以下降丈量精度为条件),这关于精度要求不太高的场合是可行的。图2中PC817型光耦用于检测负电压信号,当IN4为低电平信号时对应负电压信号,此刻在MSl2232B的相应行方位给出“-”号标志,这不只处理了正负电压同行显现的兼容性问题,并且减少了软件规划量(由6路简化为3路),一起使体系实时性相应提高。 2.4温度传感器模块 DSl8820是Dallas公司推出的l—Wire式数字温度传感器,它能实时收集现场环境的温度数据,并将相应的值转化为数字量输出。该温度传感器与 AT89S52的衔接如图3所示。 2.5语音报警模块 该模块首要完结反常情况下告警信息的输出,只需配电箱电压信号的动摇值超出必定的规模,音频告警设备即给出不同的频率信号使蜂鸣器发声,以提示相关操作人员留意。
3 体系软件规划 按RTOS体系的程序结构要求,软件工程首要由如下4部分组成:初始化、数据收集与A/D转化、显现子程序、温度监测与告警模块。 假如将初始化设置为使命0,那么除了要完结相应的硬件装备与变量赋初值外,还有必要发动一切其他使命,别的,因为初始化进程只须进行一次,所以Task 0还应当删去其本身。详细的程序代码如下所示: void Init(void)_task_Intial { variable=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 ADC0809Data 1 #define DSl 8820Temperate 2 #define LCMDisplay 3 在Keil集成开发环境下调试本程序时,除了要包含相应的头文件(rtx51tny.h)外,还有必要设置好相应的环境参数值。 3.1数模转化子程序 数据收集与A/I)转化子程序首要对配电箱传来的模仿信号进行采样、量化及回来值处理。软件编程时的电气时序及相关技能要求如图4所示。
在时序图中,上升沿清空量化成果寄存器内的值,下降沿发动,A/D转化;采样发动脉冲的高电平状况至少应保持100μs;EOC变为低电平表明转化进程正在进行,且发动信号的硬件迟滞效应时刻至少应为10μs;MSB对应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();//确保发动脉冲的高电平宽度 至少大于100μs ADStartPulse=0;//发生A/D转化的发动脉冲 (下降沿部分) wait–; wait–; //指令延时以确保到达:EOC 变为低电平所需的硬件迟滞要求。 ‘whilefADConvertEOC==0): return(Result);/将A/[)转化后的量化值返 回到主函数中。 } 3.2液晶显现模块 MSl2232B型图形点阵液晶显现(LCM)模块左右分为Master和Slave操控器,上下共分4页,左面列地址为0-61,右边列地址为 0-61,对该器材的操作要害是按时序图正确装备好主、辅操控器的作业状况。使用AT89S52拜访LCM时有二种常用的办法,即存储器映射寄存器寻址和模仿接口时序,本体系选用后一种办法。首要函数模块源代码剖析: void MasterWriteD(unsigned char Ramdata) //向Master操控器写数据 { 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 %26;amp; addressl); SlaveWfiteI(0x3f %26;amp; address0); } //在主操控器操作的左面LCM屏上显现一列信息(由8个像素点构成) void MasterPutChar(unsigned char masterchar) { ReadState(); MasterWriteD(masterchar); } 一般说来。AT89S52的RAM存储空间是有限的,而图形或字符的点阵代码(能够下载相关的使用插件,由.bmp文件或字符主动生成)假如太大,放置到 RAM区会呈现内存不足的告警提示,为此可按如下办法处理: unsigned char code Dotn[]=lOxOO,Ox00,0x30, 0x00,0x30,Ox00,Ox00,0x00}; 行将点阵代码经过code要害字限制后放于ROM区域内。
3.3 DSl8820的1-Wire子程序 DSl8820的杰出长处是将现场收集的环境温度直接以数字方式输出,这样能够省去后续的信号扩大及模/数转化部分,构建外围电路的元件少且相对简略,体系本钱低价;1-Wire接口与AT89S52通讯,其结构便于多点丈量且易于扩展;测温规模宽(-550℃~1250℃)且精度高。 对l-Wire的操作要害是软件时序的处理,关于不同的晶体振荡器其延时参数是不同的,本体系以12MHz为例给出如下首要程序代码: bit DallassReset(void) { unsigned char presence=0; DallassDataout=1; //宣布复位脉冲前先释 放总线 delay(10); DallassDataout=0; delay(240);//确保延时在4801μs~9601μs之间 DaUassDataout=1; delay(35); Dresence=DallassDataout; delay(60); return(presence); } //写时序从主操控器把总线拉低时开端 void writeCommand(unsigned char command) { unsigned char count; for(count=O;count8;count++) { DallassDataout=0; if(command%26;amp;0x01==1) { DallassDataout=1; //写“1”时序在将总线拉低后,AT89S52主操控器有必要在15μs内开释总线,所以此句子之前不能有较长时刻的延时句子 } delay(35);//不管写“1”仍是写“0”时序都有必要有至少601as的低电平 DallassDataout=1;//总线康复的进程 command=command>>1; } } //读时序从主操控器将总线拉低至少1μs后开释总线的时刻开端 unsigned char readdata(void) { unsigned char value; unsigned char midtemp=0; for(value=0;value8;Value++) { I DallassDataout=0; midtemp=midtemp>>1; -nop_O; _nop_O; DallassDataout=1; //读时序时,操控器有必要在15μs内开释总线,然后采样总线状况,所以此句子之前不能延时太长的时刻的延时句子 if(DallassDataout==1) { midtemp=midtemp | 0x80; //因为midtemp初始被赋值为0,所以假如采样总线状况为0则不用处理,0会主动被回来 } delay(35); //延时70μs完结此次Bit 位读时序进程,为下一次读作预备 } return(midtemp); } void delay(unsigned char out) { unsigned char in; for(in=out;in>O;in–); } 4 ISP的结构原理 将ISP功用集成到成型的PCB上就能够完结程序的实时更新与晋级操作,其结构原理如图5所示,这关于杂乱工程体系规划显然是很便利的,也是切实可行的。 5 定论 跟着智能仪器外表技能的开展,显现模块的液晶化已成为一种较为盛行的趋势。本文给出的软硬件规划方案已在某武器体系的调试进程中得到正确、牢靠、安稳的运转。它不只克NT模似外表体积大、故障率高的缺点,并且因为运用了RTOS技能,使数据检测的灵敏度得到大幅提高。别的,ISP功用的在线集成也为体系功用的扩大预留了空间。