微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于RlTOS和ISP功能的数字仪表系统设计与实现

基于RlTOS和ISP功能的数字仪表系统设计与实现

时间:10-29 来源:互联网 点击:

警模块。 如果将初始化设置为任务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所示。

4.png

在时序图中,上升沿清空量化结果寄存器内的值,下降沿启动,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区域内。

5.png

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); } //写时序从主控

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top