您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

智能电磁流量计中各功能模块的划分和C语言实现

2025/9/9 13:35:25发布31次查看
智能电磁流量计中各功能模块的划分和c语言实现智能电磁流量计中各功能模块的划分和c语言实现
智能电磁流量计转换器的工作过程,不仅要求cpu对来自传感器的流量信号进行采集、处理、运算、显示,完成流量、流速的检测。同时还要控制产生低频矩形波励磁电流、输出流量的积算总量值和输出模拟电流、频率、数字通讯信号以及分时检测传感器的空管信号等等,所以本系统智能电磁流量计的软件部分设计是比较复杂的,根据上面提到的各个功能,主要功能可以划分为阻6’7’“491: 1、单片机看门狗保护; 2、数据采集部分控制; 3、键盘管理;4、lcd显示控制; 5、寄存器管理; 6、励磁控制; 7、输入信号数字预处理; 8、流量计算; 9、报警; 10、空管及正反向流量检测; 11、网络通信。在这里,要说明的是,这些任务的操作并不总是顺序执行的,在很多时候需要并行地操作。如通信、键盘管理等在任何时候都有可能发生,流量计算可能消耗比较多的时间,数据采集需要定时进行等等。当然从指令层来看其程序仍是一条指令接一条指令顺序执行,但从宏观上来说,这些任务的处理是并行的。
4.3.1系统主程序
系统的主程序主要由主循环和初试化程序构成,其流程见图4_3所示,装置上电复位或手动、硬件复位后,微处理器80c196kc就要响应复位信号,然后程序从地址0x2080开始执行。程序入口的个模块是程序初始化模块,包括对相关硬件的初始化和相应参数的初始化。硬件初始化主要是完成开关量输出初始化, 显示芯片初始化,微控制器的中断、串行口、定时器等硬件资源的初始化,主要是对特殊寄存器的复制赋值;相应参数的初始化包括对程序中各个变量的初始赋值,比如对键值的初始赋值等;而主程序框图中的各个子程序的执行,指的是对一些功能模块的初始设置,这里主要指lcd显示模块的初始工作设置,在系统开始上电或复位工作以后,应在lcd上显示一些特殊意义的信息,如仪表型号、生产厂家名称、商标等文字图案信息。还有其他的子程序初始化包括数据采集初始化子程序在系统开始工作之前,应对采集所存储的地址指针清零等工作。在程序的主循环中,我们采用了检测标志位的方法,运用中断服务程序产生各执行的标志位,通过对其标志为的判定,来执行相应的子程序。图4-3主程序流程框图其中,特殊寄存器的操作如下: void sfrslni《void) { wsr=oxof; timerl=45536; wsr=ox00; ioco=ox01; iocl=ox04; baud rate=ox67; baud rate=oxso; int pend=ox00; intmask=ox91; 腚时器1定时20ms,其中65.536ms为周期的计时//o:hsi.0输入使能。//5:选择p2.0为喇,2:定时器1中断使能, 3:定时器2中断使能,hsi保持寄存器被加载//9600baud的设置: ,,中断悬挂清零//7:外部中断,4:hsi.0中断,o:定时器1中断,int_pendl=0x00; int_maskl=0x00;
4.3.2各中断服务子程序
,,中断悬挂清零“挝tx.rx中断此智能流量计软件设计部分主要涉及到的中断有3个,分别是定时器1中断服务程序,外部中断服务程序,his.0中断服务程序:
1、定时器1中断[49-s3j:
定时器1的中断服务程序主要是用来控制励磁方式和生成ad转换信号,在我们这里设计的系统中,采用三值低频矩形波的励磁方式,通过控制negative和positive来调节励磁的变化及控制ad转换采集信号,当程序初始化以后,一旦开启中断信号,此程序就一直在运行中,这里我们设定时器溢出时问是20ms,以8 个状态作为一个周期,其流程如下图4-4: 其相应的程序如下: void timerlmanage(void) { if(count==8) 图4-4定时器中断流程图count=o; switch(count) ‘:tse0: negative-1;count++;break; casel: adflag-捌;count++;bre出case2: negative---o;count++;break= case3: count-t+;break; case4: positive--1;count++;break; case5: adflag=oxff;count++;break; casc6: positive---0,count+l-;break; case7: //设定ad采样标志位adflag //设定ad采样标志位adflag count++;break; 出fault; ’ 由此我们可以得到单片机控制的励磁低频三值波为: negative:厂—]厂—] positive:厂—] 励磁方式:
2、外部中断服务程序:
外部中断服务程序的执行,主要用来控制对ads7806转换器的数据读取,因为有对a/d转换读取的实时性,我们用外部中断来完成这个功能,部分程序如下陋郴s】: #pragma interrupt(adbusy 2n { rc-=i; byte--o; ,·进入读模式,选择高字节+/ uh=*(unsigned char*)adcs; /.读取转换结果的高8位’, byte=l; /.选择低字节·, ul=’(unsigned char*)adcs&oxfo; ,’读取转换结果的低4位’, u=uh’256+ul;if(u>--0x0800) ii=u胁固00; ,.如果为负值,则符号扩展., atray[i]=u; i++: adflag=0xff; ,·数据读取后的保存., ,.ad转换标志位., )ads7806u的具体转换工作可以参考第三章第2节,在这里,我们设定了连续采集n个点的采集方式,当adflag=0xff时,设定的ads7806开始工作,进行模拟信号的采样转换工作,r/c为低电平,然后等待转换的完成,busy产生高电平, 所以使得外部中断服务程序的执行。丽对于主程序中对ad的管理程序见如下: while(adflag=--ox田//ad转换程序{ adflag--0x00; ,,设置转换标志位uh=’(unsigned char‘)adcs;,,i筮中c8位,启动ad采样转换r/c=0; while(!adflag) ,,等待中断,完成ad的读取{ ); if(i--n) /厥n个采集点{ i--1; adflag--0x00; } ’ 3、his.0中断服务程序: q p ——卜—+一图4-5按键过程中接触电阻变化情况his。0中断服务程序主要完成对键盘管理工作,对于键盘处理,包括硬件和软件两部分,硬件电路可以参考第三章第3节,而对于软件的处理,主要包括识键; 译键及可能的键义分析。因为按键是机械结构,在键闭合与弹开的时候,往往会产生抖动,若系统处理不好,一次按键会被误认为是连续按了多次键。因此, 必须对按键的抖动作相应的处理。图舡5是一个典型的按键过程中的触点电阻变化情况。一般按键抖动时间大约10~20ms,因此,处理程序在按键稳定后再检查键的信息。当然,克服按键抖动常用的方法有两种:一种是用硬件,即在每个键上加rc滤波电路或用一个rs触发器组成防抖动的电路,另一种方法是用软件延时程序,待按键状态稳定后(10--20ms)再去读取信息,从而防止误判断。在本系统中,我们采取的是软件消除键盘抖动的方式,当有按键下按时,就会有一个his.0的中断,在中断服务程序里,先有一定的延时,这里我们设为10ms, 然后再进行键值的读取。his.0的中断服务程序如下【““j“圳: 却ragma interrupt(keymauage=4) { int_mask=intmask&oxef; f}屏蔽hsio; delay_lores; keyvalue=’key_cs; keyshowld=0xff; int_pending=int pending&0xef;腑苛中断悬挂寄存器hsio位; int_mask=ox91; ,,取消屏蔽的hsio; }
4.3.3系统软件其他功能模块的开发
一、看门狗陋”,删
watchdog(俗称“看门狗”)是单片机抗干扰的软件措施,它具有的特点是本身能独立工作,基本不依赖于cpu,cpu只在一个固定的时问问隔内与其打一次交道,表明整个系统“目前尚属正常”;另一个一个特点是当cpu落入死循环后,能及时发现并使整个系统复位。我们这里采用的是w蛆℃hdog硬件电路配合的措施,并不是纯软件的watchdog系统。一般的。watchdog硬件电路为一独立于cpu之外的单稳部件,可用单稳电路构成,也可用自带脉冲源的计数器构成。cpu正常工作时每隔一段时间就输出一个脉冲,将单稳系统触发到暂稳态。当cpu陷入死循环后,再也不去触发单稳系统了,单稳系统就可顺利返回稳态。利用它返回稳态时输出的信号作为复位信号,就可以使cpu退出死循环。这其中对于“喂狗”时机的考虑,也就是指复位&ldquo
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product