“huzama”通过精心收集,向本站投稿了7篇基于PIC单片机的便携式测试记录仪设计,以下是小编为大家整理后的基于PIC单片机的便携式测试记录仪设计,仅供参考,欢迎大家阅读。
- 目录
篇1:基于PIC单片机的便携式测试记录仪设计
1.3工作原理
本记录仪基本工作原理是:一旦系统完成某项工作后,立即进入低功耗休眠状态,当需要时再由外部中断予以唤醒。
1.3.1加电初始化
加电后,首先初始化有关寄存器和接口,然后自检各功能部件。测试结果无论正常或错误均以代码形式显示在LCD上,进入休眠状态。
1.3.2采集
本记录仪有自动和手动两种采集方式。
休眠状态下,当按手动键时则进入手动采集过程。首先读识别片和字典片,以确立现场中实际安装的传感器数量、量程及数据片可写空间。若数据片未写满,则从组内0通道传感器开始,循环对现场中实际安装的所有传感器进行采集、处理、显示,直至当再按一次手动键时,方将传感器号、量程、最近一次采集值(注意?不是实时处理后结果,而是原始A/D转换码值)以及采集时刻的日历信息─年、月、日、时、分、秒等组成的记录写入记录指针指向的数据片中,接着对表头参数进行修改,进入休眠状态。
休眠状态下,当按自动键时则进入自动采集过程。首先开放定时中断,然后进入采集─保存─休眠─唤醒─再采集─再保存─再休眠─再唤醒的循环状态,直到数据片被写满或人工干预结束自动采集过程为止。上述唤醒由外部中断完成,其单片机从休眠状态到唤醒工作之间的时间间隔有等距和变距两种形式可供选择。所谓等距即每次采集的时间间隔相同。与其相反,变距则每次采集的时间间隔随采集次数的增多而变长或缩短,视实际应用需要而确定。本记录仪出厂设置为等距1小时,即每间隔1小时采集1次。
1.3.3通讯和打印
休眠状态下,当按通讯键时,进入和PC通讯过程。首先由PC端Win98下的专门处理软件完成串口1(若记录仪与PCCom1口相连)或串口2(若记录仪与PCCom2口相连)的自动配置,然后可根据工具条上的图文进行等距、变距、选择、数据下载、事后处理等操作。
休眠状态下,当按打印键后,则在TPμP_T微型打印机上打印出所有保存的记录。
1.3.4清零
休眠状态下,当按清零键时,则清除数据片中保存的所有记录,即使记录指针指向数据片首址。
2软件设计
本记录仪软件由实时处理程序和组
成记录仪诸功能部件的驱动程序组成。
2.1实时处理程序
实时处理程序调用相关驱动程序完成模拟量采集、数字滤波、插值运算、实时显示、记录合成及记录保存。本记录仪采用的记录格式从高至低依序为:传感器号,量程,采集值,年,月,日,时,分,秒。
2.2驱动程序设计
驱动程序设计的基本思想是:首先完成相关接口、寄存器的初始化,然后根据具体物理部件产生微操作时序,并对操作过程中遇到的异常事件进行容错处理。
2.2.1读/写E2PROM驱动程序
I2C总线由时钟线(SCL)和数据线(SDA)组成。根据I2C总线协议,将图1所采用的24LC65芯片的读/写操作按操作顺序分解为:使总线处于空闲状态(SCL、SDA均为高电平);发送读/写启动信号(SCL保持高电平,SDA从高变低产生下降沿);在数据线SDA上读或写数据位(SCL高电平时,SDA状态为有效的读或写数据位,SDA状态,即0或1的变化必须在SCL低电平期间完成);发送读/写结束信号(SCL保持高电平,SDA从低变高产生上升沿)。如果为写操作,每写完1字节数据后,24LC65在数据线SDA上回送握手应答信号,表示该字节数据已被可靠写入。以上微操作通过汇编语言编程实现。
本记录仪以记录方式读/写数据片。因此,对写来说,首先读字典片,以便用其中的表头参数判断当前数据片是否已写满。若已写满,则在LCD上显示无写空间标记代码,然后返回休眠状态;否则,将记录写入记录指针所指向的数据片中,同时对表头参数进行修改。在写过程中,重要的是处理疵点单元。尽管24LC65在写过程中出现的疵点概率极少,但若不正确处理,则会导致目标数据丢失甚至出现系统死机现象。作者曾采用数据轮询技术进行容错处理,收到了良好的效果。其基本思想是:每当在数据线上写完1字节数据后,便反复查询24LC65回送的应答信号,但最多不超过50次(此数足够24LC65写入时间);若超过查询次数仍无应答信号,便认为该单元为疵点单元,将其地址记入疵点单元地址队列,并使疵点单元计数器加1,然后在下一比邻单元继续写入原数据。如果连续两单元为疵点单元,则认为整个芯片有问题,此时,在LCD上显示该单元所在的芯片号(芯片号参见图1),然后,返回休眠状态。
对读来说,首先判断数据片是否为空。若为空,则在LCD上显示无记录标记代码,然后返回休眠状态。否则,继续判断数据片是否有疵点,如果无疵点,则从数据片首址开始按序读出所有记录;否则,在按序读记录过程中,根据疵点单元地址队列内容,跳过所有疵点单元,以保证读出的记录连续、真实、可靠。
2.2.2采集驱动程序设计
A/D转换器MAX189所带串口与单片机PIC16C74的SPI口完全兼容。因此,在A/D转换完成后,只要启动单片机SPI口产生13个同步时钟脉冲便可连续两次从SPI数据缓冲器上获得12位转换结果。由于本记录仪采集的参数个数依现场安装的传感器数不同而不同,因此,驱动程序必须能予以自动识别。图2为采集驱动程序流程,其基本设计思想是:首先读识别片,以确定实际安装的传感器数量,然后从0通道传感器开始进行采集,直到实际安装的最后一个传感器采集完毕为止。图2中:CHAN:通道寄存器;COUNT:传感器数量寄存器。
3测试设计
测试设计是通过测试程序完成对记录仪本身各功能硬件的性能测试。测试程序独立于实际应用程序,在单独的单片机中,使用时只要拔掉记录仪模板上的单片机而用其代之即可。测试程序设计的基本思想是:首先根据不同测试对象(即部件)产生不同的测试数据和测试期望数据,然后以测试数据为入口参数,调度相关驱动程序产生目标数据,最后用测试期望数据与目标数据进行比较,以此判断所测硬件性能之良劣。
3.1E2PROM测试设计
E2PROM测试需要与PC机通讯。其基本原理是:首先产生8种测试数据:0x00、0xff、0x55、0xaa、0x0f、0xf0、0x5a、0xa5(0x表示16进制数),然后分别以此8种测试数据为入口参数,交替调度写、读E2PROM驱动程序3次(即先写后读3次)。每读一次,与测试期望数据(此处测试数据与测试期望数据相同)进行比较,若不相等,则对相应片错误计数器加1。测试结果实时地显示在记录仪LCD和PC机上。LCD只显示总错误个数,PC机则依次显示、保存总错误个数及错误单元地址。
3.2A/D测试设计
A/D测试也需要与PC机通讯。由于本记录仪最多可采集8路传感器参数,因此,测试程序对键盘重新定义如下:当手动、自动、通讯、打印、清零键有键按下时,对应测试0~4通道传感器;当手动、自动、通讯键其中之一与清零键同时按下时,则对应测试5~7通道传感器。测试只对放大器满量程的10%、50%、90%等3点进行采集。其原理是:首先,测试程序扫描键盘,当扫描到有键按下时,则调度采集驱动程序对该键盘定义的通道传感器进行连续采集,采集结果不作任何处理,实时地显示在记录仪LCD和PC机上。LCD只显示当前的A/D转换码值,PC机则显示并保存当前A/D转换码值、各点最大、最小转换码值及两者绝对差值。技术人员可以此判断前向通道(传感器、放大器、A/D)工作性能的好坏。笔者曾连续测试0通道传感器6个半小时,发现最大码差为9,表明前向通道工作相当稳定。
3.3实时时钟测试设计
实时时钟DS1302测试需要借助PC机完成。其测试原理是:首先PC机上的测试程序读PC系统日历信息─年、月、日、时、分、秒、星期,并进行发送。记录仪在接收后,立即调度写DS1302驱动程序将接收的PC系统日历信息写入DS1302相关功能寄存器中,并使DS1302以此为时基进行计时。此后,进入记录仪发送、PC接收的无限循环状态,即:每隔10ms,记录仪调度一次读DS1302驱动程序,并将获得的最近日历信息予以迅速发送;而处于接收状态的PC接收后,立即与PC系统当前日历信息进行比较,如此循环,直到人工干预结束测试为止。在上述测试过程中,记录仪LCD只实时地显示日历信息的分、秒两位,PC机则实时地显示记录仪和PC机两端完整的日期、时间及两者比较差。另外,通过观察记录仪LCD上显示的分、秒位变化,也可初步判定DS1302的性能。笔者曾连续运行该测试程序24小时,偏差极小,足以满足本系统的需要。
4实际应用
本记录仪已投入实际应用一年多,其可靠性、稳定性、操作性和精度均受用户欢迎。不足之处是:目前功耗还比较大,作者在+12V供电时测得电流为45.5mA?尚需进一步改进。
篇2:基于PIC单片机的便携式测试记录仪设计
基于PIC单片机的便携式测试记录仪(以下简称记录仪)既有一般数据采集装置的实时采集与保存功能,同时又能够对采集数据进行实时处理、显示和打印。适用于对采集速度要求不高、交流供电比较困难以及无须长期留人值班的场合。
以追求高可靠、低功耗、小体积设计思想的本记录仪具有如下功能:对现场物理量进行实时采集、保存、处理与显示;自动识别现场安装的传感器数量、传感器号和量程;自动和手动两种采集方式,自动采集适用于长期无人值班的固定场合,手动采集便于对分布在不同区域的物理量进行测试;与PC机通讯,可根据需要将采集数据下载至PC数据库;实时打印;自检功能,避免了系统运行过程中可能遇到本身无法容错处理的异常事件而导致的死机现象。
1 硬件设计
1.1 总体设计原则
根据高可靠、低功耗、小体积的设计思想及应用对象几乎对采集速度无要求(此处指系统本身的`采集速度已远远超过实际应用要求)的特性,总体设计原则是: 元器件采用低功耗、宽范围工作电源的CMOS集成电路;总线采用口线少的串行总线;允许情况下,尽量用软件实现硬件功能,用中断代替查询工作方式;一旦系统空闲则立即使其进入低功耗休眠状态,当需要时再用外部中断予以唤醒。
1.2 硬件组成
根据总体设计原则,硬件组成如图1所示。其中:单片机为美国MicroChip公司的中档产品PIC16C74,+5V供电、4MHz主频时功耗低于2mA;E2PROM存储阵列由超低工作电压(+2.5V~+5.5V)、具有可编程选择多种特性的8KB智能化电可擦除存贮器24LC65芯片组成。其中,0#为传感器识别片(以下简称识别片),保存现场实际安装的传感器数量、传感器号及量程。该芯片被设计在放大器板上,永久安装于现场。传感器号由4位数字组成,前2位表示组号,后2位表示传感器组内号。1# 为字典片,分为三个存储区:第一存储区被设置成高寿命写入区,保存表头参数,如疵点单元计数器、记录计数器、记录指针、自动采集时间等;第二存贮区为字典区,保存传感器修正系数、实时打印所涉及的汉字国标码等,查找时以传感器号为关键字进行指针定位;第三存储区被定义为疵点单元地址队列,保存在写过程中遇到的疵点单元地址。2#~7# 为数据片,保存实时采集的数据。RS232口为最简单的零调制3线经济型,具有双重功能,接上TPμP_T微型打印机,则进行实时打印;接上PC机,则与PC进行全双工通讯。A/D转换器MAX189为串行、12位逐次逼近型,功耗75mW,最大转换时间8.5μs。实时时钟DS1302具有可编程涓流充电功能,能够提供秒、分、时、日、月、星期、年至2100年,并且对闰年和小于31天的月份进行自动调节。键盘由手动、自动、通讯、打印、清零等五个触摸按键组成,通过按键产生外部中断唤醒单片机完成相应功能。液晶显示器(LCD)采用4位半静态方式驱动,用来显示处理后的结果以及系统运行过程中检错的代码。32.768kHz晶振用于自动采集时产生定时中断。
篇3:基于PIC单片机的便携式测试记录仪设计
1.3 工作原理
本记录仪基本工作原理是:一旦系统完成某项工作后,立即进入低功耗休眠状态,当需要时再由外部中断予以唤醒。
1.3.1 加电初始化
[1] [2] [3] [4]
篇4:便携式智能型无笔记录仪
便携式智能型无笔记录仪
无笔记录仪是以先进的CPU为核心,并辅以大规模集成电路、大容量FLASH存储、信号智能调理、SmartBus总线以及高分辨率图形液晶上梁不正下梁显示器的新型智能化无笔记录仪表,具有体积小、通道数多、功耗低、精度高、通用性强、运行稳定、可靠性高等特点,目前已广泛应用于各种工业现场.
作 者:钟绍实 作者单位:辽宁信息职业技术学院,辽宁,辽阳,111000 刊 名:中国科技博览 英文刊名:CHINA SCIENCE AND TECHNOLOGY REVIEW 年,卷(期):2009 “”(13) 分类号:U284.24 关键词:无笔记录仪 信号 显示屏 通道篇5:PIC中档单片机的中断总结
与51或者其他系列的单片机相比,PIC 单片机的中断机制有其特殊之处,针对我们一些初学者存在的一些问题和疑惑,我在此做一个个人总结,不当的地方,请站友们指正。
先摘引三个对PIC中断理解的回帖,然后我再对中断活动的过程、应该注意的事项、及一个疑惑进行较详细的总结和解释。
---------------
john frank :关于pic中断有些不明白的地方
借用大虾的程序;
;******************** 中断服务代码
btfss INTCON,T0IE ; 判断是否为T0中断
goto other_int
btfss INTCON,T0IF ; it ’s the time of T0 int
goto other_int
bcf INTCON,T0IF ; 是T0中断,清除中断标志
movlw 0x10 ; 微秒的高位字节加上定时时间 256x16分频=4096=0x1000的高位(0x10)
addwf us+1
goto end_int
other_int ; 可添加其他中断服务代码
nop ; other isr code can be added
;**********************************
end_int ; 恢复现场
=================
假如又有新的中断正好在这段程序中间产生
btfss INTCON,T0IF
goto other_int
bcf INTCON,T0IF
程序岂不是要出错跑飞了
john frank:
谢谢你的关注。
我讲一下自己的理解,权做回答,不当之处,还请站友们指点。
pic中档单片机系列没有“硬件中断优先级别”(请允许我这样说),含义是指:当内核正在处理当前的中断服务A时,在这个期间里,其他任何中断的产生,只能使其标志位xxIF置1,不能剥夺当前中断服务对CPU的占用权(反应在PC指针不能被新的中断改变指向),必须等到当前中断服务处理A完毕,然后,根据goto other_int语句的转向,依次判断。若新发生的中断处理代码在中断服务A之后(前、后指代码在ROM中地址顺序,越大越后),则进行新发生的中断处理;若恰好新发生的中断服务代码在刚被处理完毕的中断服务A代码之前,则将不予理会,(即程序指针PC不会在中断处理代码空间中又返回到0004H的入口),等到执行到retfie 后返回主程序,然后再次进入中断入口0004H...
之所以说其无“硬件中断优先级别”是与“软件中断优先级别”对应的,通过中断服务代码对中断标志和IE的检测的先后,可设立优先级。
当然,准确地说,这是一种顺序,而非级别,呵呵。
如果了解一下51的中断系统,相信你能更好地理解PIC的中断的级别:
将会出现你说的情况,当优先级更高的中断来临时,内核将暂时停止当前中断服务,保存当前中断服务的现场,执行优先级更高的中断服务,处理完成后,恢复现场,执行未处理完成的中断服务....,最后,返回主程序。
小弟讲得有点烦琐,并不形象,可能还有纰漏和谬误之处,请大家指正,相信john frank在仔细看书之后,应该可以形成自己的正确看法。
zdtdl :小弟说两句~~
简单地说,当系统响应一个中断时,GIE位将被自动清零以禁止其他的中断,在执行中断返回指令RETFIE后系统再自动置GIE位1开放中断。只要
不在中断程序中对GIE置1,就不会产生反复进入中断的现象,靠查询方式决定响应谁。PIC也有中断嵌套,可以形成多级嵌套,甚至自身嵌套,不过嵌套的级数绝对不能超过硬件堆栈的深度。
-------------------------
篇6:PIC中档单片机的中断总结
一、中断活动的过程
对于PIC单片机来说,一次中断的过程大致有下列阶段:
为了使得说明形象和直观,本文采用一些诙谐的语句来比喻说明:
中断请求---------比喻成申请买经济适用房的请求
中断标志-------一份申请书
本中断使能xxIE-----本单位领导
PEIE-------------户口办公室主任
GIE--------------银行的管理信贷的科长
1. 中断请求:房子太少,儿子要结婚了,得买房了,可资源和财力有限,不能卖商品房, 只好按特殊情况处理,写一份申请书(中断标志位IF置1);
2. 本单位领导xxIE看了之后, 如果给你盖了一个戳:(即该中断使能位IE=1),那么恭喜你,这份申请书可以提交到更高一级的部门;如果没盖(xxIE=0),那么对不起,先放我这里吧,等我们研究研究好后再说。如果你不开心,要拿回申请书撕掉,呵呵,那么IF=0;你的购房请求之梦破灭;
3. xxIE领导将根据户口,将这些请求书给分类,一类是外地迁来的户口,提交给户口办公室PEIE主任审查,PEIE主任如果给你盖了个戳(PEIE=1),那么,他将会把申请书提交给银行的GIE科长批准,否则就是放在这里再研究研究或者你要回来撕毁;一类是本地户口,可直接提交给银行的GIE科长批准,然后你将申请书带到GIE科长的办公室。
4. GIE科长盖了章之后(GIE=1),然后,你就可以拿着申请书去找房地产商要房子了(此时PC指针=0004H),因为GIE科长有很多事情要做,所以他每盖了一次戳之后(注意是一次不是一个,因为也许有多个中断同时发生,也就是说有其他地方的人来请GIE盖戳),就在办公室门外挂了个牌子:请勿打扰。他自己则休息去了,直到接到RETFIE的电话或者有人打他的手机。
5. 房地产商准备给房子了,不过你最好得先把各项手续给填好,叫5w押金,另外协议阿,合同阿,都得自己搞定,这叫“保护现场”。
6. 房地产商开始上班了,于是挨个查“申请书”是谁提交的,以便给你安排你预定的房子。这个叫“中断查询”。
7. 查到是你的后,然后打电话让你过来,带你去看房子,把钥匙给你。这个交“中断处理”。
8. 钥匙交给你之后,房子你是到手了,不过这份申请书就失效了,房地产商将该申请书销毁。这个叫“清除中断标志”。
9. 好啦,现在你可以去房地产商自己去要回以前交的押金,身份证啊等等。这个叫“恢复现场”。
10. 最后,房地产商办完了,让RETFIE小姐打个电话给GIE科长(执行RETFIE指令),GIE科长才起来,把“请勿打扰”的牌子取下,让其他的带着申请书的人进来。当然,如果你的事情还没搞定,GIE科长的关系户打了他的手机(你在办事时-处理中断时,若有GIE被置1),他也会开门取下“请勿打扰”的牌子,让关系户进来,给他盖好章。这下就对不起了,人家有关系,所以你的事情要马上停下来,先等关系户办完他的事情之后,再给你办你的事情。这个叫“中断嵌套”,要注意GIE科长有8个关系户(硬件堆栈的深度为8级)哦。
二、需要注意的问题:
1. 中断现场的保护(可以参考以前的帖子,在xieyubing版主的指点下,有恰当的例子);
2. 初次上电复位、电源跌落复位和其他情况下的复位,均使得全局中断位GIE和其他中断使能位xxIE=0;
3. 中断标志位的状态与该中断源是否被屏蔽无关,与全局中断使能位GIE也无关。
4. 当开放某一中断源时,该中断源就是通过中断标志向CPU申请中断的,无论什么原因,只要标志位IF置1(可以用软件强行置1),均会产生中断请求。
5. 当中断标志位为1,如果该中断被屏蔽或者被禁止了,只要不清除标志位,那么该中断请求会被潜伏下来,一旦屏蔽解除,立即产生中断响应。反之,如果在屏蔽/禁止条件解除之前清除了该标志位,那么则无中断请求。
6. 当CPU响应任一中断时,全局中断使能位GIE会自动清零;当中断返回时,它有自动置1。如果在中断处理期间,用软件将已经清零的GIE位又重新置位,这个时候若再出现中断请求,就可以形成了中断嵌套。即:在处理某一中断期间又响应了其他中断请求,就形成了中断嵌套,此时,前一中断处理过程会被暂停而进入新的中断处理,当新中断处理完毕后,才会继续处理前一个被搁置的中断。此方式可以形成多级嵌套,但不能超过硬件堆栈的深度8级,以免造成堆栈溢出而不能正常返回。
7. 如果同时发生多个中断请求,则中断处理的顺序取决于中断程序中的检查中断源的顺序。
8. 若要防止中断请求被丢失:则要注意下面两种情况:如果同一中断源的中断发生间隔时间大于该中断服务的处理时间,则可能出现中断事件被忽略(体现在中断服务的过程中,标志位被连续发生来两次置位),例如:中断事件发生的时间间隔为30ms,中断服务处理加上跳转判断的时间为50ms,则情况将会如下所示:
[中断次数----------1][中断次数----------2][中断次数----------3][中断次数----------4]
[处理次数------------------------1][处理次数------------------------2][处理次数------------------------4]
如果在中断处理一开始就清除IF,那么如上图所示,中断事件3、4 在处理次数2的过程中发生来两次,那么即使IF清除发生在中断次数3发生之前,也将丢失第三次中断。
另外,即使中断出现的时间间隔大于中断服务的时间间隔,如果清除中断标志位的指令安排在中断服务子程序的尾部,就有可能造成丢失该中断请求(即两次中断
标志置位的事件只对应一条清除指令和一次中断处理。
9. 在进行查表操作时必须禁止CPU响应中断,以避免中断返回时跳转到不希望的地址上去。
三、一个疑惑
一个疑问:一些书上提到:如果对寄存器INTCON进行“读-改-写”操作的时候,要事先将GIE清0,再对INTCON进行操作,然后将GIE恢复为1
即BCF INTCON,GIE
BSF INTCON,XX
BSF INTCON,GIE
所提到的理由是:当CPU正在执行一条对INTCON寄存器进行“读-改-写”操作的指令时,如果恰好发生了中断请求,则中断服务程序会被执行两次。这是因为当中断请求发生后INTCON寄存器的GIE寄存器会被硬件自动清零(屏蔽所有中断),并且程序转入中断例程入口(0004h)。当GIE被清零后,这时如果CPU正在执行一条对INTCON“读-改-写”的指令时,则GIE位还会被写会操作重新置1,这样就会造成CPU两次进入中断服务程序。
该段解释晦涩难懂,根据中断发生过程的时序(PICmicro中档单片机系列参考手册的第8-2页):在第n个指令周期里,CPU检测到IF标志位为1,则在n+1个周期内将自动使得GIE=0,该周期内既不取指也不执行指令,然后在n+2个指令周期里,0004h指针装入PC指针,该周期也不运行其他指令,只完成0004H->(PC)的取指过程,第n+3个指令周期里,CPU执行0004h地址的指令码,并同时取0005h的指令码。
显然,作者提到的“当GIE被清零后,这时如果CPU正在执行一条对INTCON“读-改-写”的指令时,则GIE位还会被写会操作重新置1,这样就会造成CPU两次进入中断服务程序。”的解释存在下面的问题:GIE被硬件自动清零时的那个周期,是一个空运行周期,CPU并不执行指令,下一个周期也是空运行周期,不过是完成将0004h地址中的代码取指操作。然后就开始了0004h地址的代码的执行操作和0005h地址代码的取指过程。那么GIE在被硬件自动清零后要想置会1,只有两种方法:RETFIE指令使GIE自动置1;通过软件指令对GIE人为置1。显然,如果对GIE人为置1的指令执行在对该标志位清零前,那么会出现前文所述的中断嵌套(设该中断为A),如果没有其他中断发生且执行顺序先于中断A且对中断A的标志清零的话,那么中断A的嵌套是一个死循环。就不是执行两次的问题了----因为同一个中断嵌套时,GIE在自动清零被软件置一永远都发生在清除IF之前,那么IF一直得不到清除,而GIE又几乎一直都是1。
作者所说的情况似乎是这样的:读改写INTCON指令按如下过程分解:读INTCON的时候,GIE先是为1的,此时发生了中断,GIE被硬件清零,开始执行中断服务程序,然后再IF标志没有清除之前,执行INTCON的其他位的修改和写回操作,也将中断发生前的GIE读为1的信息写回GIE,这样,CPU被迫发生了第二次中断。显然,这样是将BSF INTCON, XX指令分解得支离破碎---本来一个指令周期可以完成的指令被跨了多个指令周期;而且一个指令周期的指令被CPU在不同地址处分解执行读改写过程。
如果不是这样的话,那么作者的解释就自相矛盾:“当CPU正在执行一条对INTCON寄存器的‘读-改-写’操作的指令时,如果恰好发生了中断请求 ”与“当GIE被清零后,这是如果CPU正在执行一条对INTCON‘读-改-写’的指令时”相互矛盾。
总之,我对这里的理解存在一些疑惑,请斑竹及各位前辈指点。
* - 本贴最后修改时间:2004-12-28 17:21:09 修改者:碧水长天
篇7:基于PIC单片机的热能表研制
基于PIC单片机的热能表研制
摘要:随着我国福利制度的改革和热能计量的规范化,对热能的准确计量成为一个比较关键的环节。文中介绍了热能表的组成和工作原理,给出了一种基于PIC16C64单片机的热能表设计方案,同时对设计和使用中的一些问题进行了讨论并提出了解决办法。关键词:热能表单片机温度传感器PIC16C64
随着我国福利制度的改革,供暖制度也发生了相应的变化。原来的供暖收费存在着对使用的热能估算不准确、收费不合理等问题。为此,国家建设部在一些城市实施供暖制度改革试点,并对热能实行计量收费,这就要求对使用的热能进行准确的计量。本文给出了一种基于PIC16C64单片机的、针对热水供暖的热能表设计方案。
1热能表的组成原理
一般热能表的原理框图如图1所示,它主要由积分仪、流量计和温度传感器三部分组成。流量计用于计量流过采暖设备的热水的体积。两只温度传感器分别用于测量进水温度和回水温度。积分仪是热能表的核心,它能够根据流量计提供的热水体积流量和进水、回水温度差等数据计算出消耗的热能。其计算公式如下:
Q=CV(t供水-t回水)
其中,Q为消耗的热能,单位为kWh;C为水的比热容(C=0.001167kWh/L.℃);V为流过采暖设备的热水体积,单位为升(L);t供水、t回水为流过采暖设备进水口和回水口的热水温度,单位为℃。
从热能的消耗计算公式可以看出,只要测得采暖设备进水和回水的温差以及流过采暖设备的热水体积就可以计算出消耗的热能,因此,引起计量误差的因素有:
(1)流量计的精度;
(2)温度测量的准确度;
(3)两只温度传感器的配对误差;
(4)积分仪的计算精度。
对于流量计引起的误差,可以通过选取精度较高的流量计来解决,计算精度可以采用合适的CPU和完善的算法来解决。对于温度测量,国家有相应的标准,温度测量误差一般不大于±0.3℃,而两只温度传感器的配对误差应不大于±0.1℃,所以需要重点解决。
另外,由于热能表通常是安装在室外且长期使用,所以,热能表的功耗、抗电磁干扰、可靠性因素都需要加以考虑。
2硬件电路构成及实现原理
2.1硬件组成
根据上面的分析,笔者设计了一种基于PIC16C74单片机的热能表,其组成框图如图2所示。该系统主要由CPU、流量计、A/D转换器、温度传感器、LCD显示器、电路控制、EEPROM存储器和时钟电路等部分组成。其中CPU采用Microchip公司的微处理器PIC16C64,它是系统的核心,用于完成所有的控制和计算功能。温度传感器和A/D转换器组成温度采集电路,可测量采暖设备进水和回水的温度。为了保证测量精度,设计中选用了12位串行A/D转换器ADS7844,理论上,ADS7844的温度采集精度可达0.03℃。流量计用于测量流过取暖设备的热水体积,每流过一定体积的热水,流量计内部的干簧管闭合一次。将这个信号接到CPU的外部中断输入端,干簧管每闭合一次就向CPU申请一次中断,CPU用该信号累计流过采暖设备的热水的体积来进行热能计算。在需要时,还可以通过LCD显示器来显示水温和消耗的热能以及系统信息等。EEPROM存储器用于存储系统信息和消耗的热能。时钟电路用于为整个系统提供系统时间。用键盘可实现各种操作,如:通过键盘可以查看水温、消耗的热能和系统信息等。电源控制电路主要是在不需要显示和温度测量时切断相应部分电路的电源,以降低系统功耗。系统设置是在每次加电时设备系统的年、月、日、小时和分等时间信息。另外,当系统出现故障时,它也可向CPU申请中断,以使CPU将当时的时间、热能值和故障信息写入EEPROM以备查询。
2.2系统工作过程
该系统的工作流程图如图3所示。每次加电时,一般先设备系统信息,然后CPU进入休眠状态,并等待处理各种中断。在CPU进入休眠状态前,需关闭温度传感器、A/D转换器和显示器的电源以减小系统功耗。处理完中断后,CPU再次进入休眠状态以等待下一次中断。水表中断表示已经有一定体积的热水流水采暖设备,需要计算一次热耗。键盘中断表示应处理各种显示,而故障中断则表示系统某个部分出现故障,此时CPU应将故障类型和此时的有关信息写入EEPROM。
3注意事项
3.1温度测量误差和传感器配对误差
从热耗计算公式可以看出,温度测量误差和传感器配对误差均会引起测量误差。鉴于这种情况,设计时一方面必须选用性能良好的温度传感器;另一方面应使温度传感器的特性呈线性关系且两只传感器的温度特性曲线应当一致。但是,常常温度传感器特性在0℃~100℃并非线性,每只传感器的`特生曲线又不尽相同。因此,除了采用性能比较好的铂电阻作为温度传感器外,还必须对每只热能表通过硬件或软件校正。由于硬件校正会增加成本,因而多采用软件校正。具体做法是将整个测温范围根据允许的测量误差分为若干段,校正时测出各校正点的误差并存储到EEPROM。而实际工作时,先测出水温,然后采用查表的办法从误差中查出修正值来对所测的温度进行修正。如果测出的水温不是正好在校正点上,则可采用插值估算的办法予以修正。这样处理不仅可以解决温度测量误差,同时也可以解决传感器的配对误差。
3.2功耗和抗电磁干扰
由于热能表长期处于无人看守状态,且只能使用电池供电,因此,设计时,要求系统功耗应非常低,且抗电磁干扰的性能要好。
正是为了降低系统功耗,设计时除显示器外,所有的器件都采用3.3V的低功耗器件。比如,作控制核心,PIC16C64具有功耗低、运行速度快等特点,其工作电流只有1mA(3.3V@32kHz时),进入休眠状态后只有几微安且可以用中断将其从休眠状态唤醒。温度传感器、A/D转换器和显示器是系统的主要耗能器件,因此在不使用时应将它们的电源切断,以进一步降低功耗。另外,由于PIC16C64的数据总线和地址总线都埋在芯片内部,因此,具有良好的抗电磁干扰性能。
4结束语
本文设计的热能表具有结构简单,计量准确的特点,可用于住宅小区或单元住户的采暖计量。检测结果表明:温度测量误差不大于±+0.15℃,传感器配对误差不大于±0.09℃。
★ 行车记录仪好评语
基于PIC单片机的便携式测试记录仪设计(精选7篇)




