1、.页眉.页脚数理与信息工程学院单片机原理及应用期末课程设计题 目: IC 卡式单片机预付费电度表的设计 专 业: 计算机科学与技术 班 级: 计算机 072 班(非师范) 姓 名: 唐 华 学 号: 07220337 指导老师: 余 水 宝 成 绩: ( 2010.1 )目 录第 1 节 引 言 11.1 IC 卡式单片机预付费电度表概述 11.2 本设计任务和主要内容2第 2 节 系统主要硬件电路设计 42.1 方案设计与比较论证42.1.1 电能计量系统方案设计42.2 预付费电度表工作过程及基本原理5.页眉.页脚2.2.1 预付费电度表工作过程52.2.2 有功电能测量的基本原理62.3
2、 预付费电度表电路 72.3.1 电能计量电路72.3.2 控制部分 82.3.3 显示电路 92.3.4 IC 卡接口电路 102.3.5 电能存储电路 112.3.6 掉电检测电路 122.3.7 磁保持继电器驱动电路 12第 3 节 系统软件设计 143.1 主程序设计流程图以及相应代码143.2 IC 卡检测及读写程序设计153.3 外中断 0 服务程序流程图以及相应代码183.4 定显示器 0 中断服务程序流程图以及相应代码20第 4 节 结束语 30参考文献32IC 卡式单片机预付费电度表的设计数理与信息工程学院 计算机科学与技术(非师范)072 班 唐 华指导教师: 余水宝第 1
3、 节 引 言 在工业和日常生活中,电已经成为不可或缺的生活品之一,其重要地位不言而喻。同时,电度表作为电能计量产品被国家列为影晌国计民生的重点仪器仪表产品,无论是计划经济时代还是市场经济时代电度表都是国家重点支持的产品。在我国发展过程中,电度表技术经历了“仿制探索阶段、联合攻关阶段、引进消化阶段、自举创新阶段”四个阶段的发展。使用的电度表种类有机械式、电子式等,但是,诸如此类的电度表均存在数据的重复性和一致性较差、笨重、耗电、需要手工抄表、防窃电差、抗恶劣环境能力差等缺点。.页眉.页脚随着微电子技术的迅猛发展,微控制器(单片机)和大规模集成电路在电能计量领域的广泛应用,使电度表的技术水平和性能
4、得到长足发展。本系统利用单片机的可靠性高、便于扩展、控制功能强、低电压、低功耗等优点展开设计,并采用 IC卡设置预付费系统,得到电能计量准确、精度高、保密性好、抗干扰强的优质预付费电度表。1.1 IC 卡式单片机预付费电度表概述IC 卡式单片机预付费电度表是一种新型的 IC 卡式预付费仪表,具主要包括电能计量系统和预付费系统。电能计量系统采用成熟的电子式电能表技术,整体结构合理、工艺先进,实现电能测量、电能值显示、超负荷断电等功能,并具有电子式电能表的各种优点;预付费系统主要利用 IC 卡实现先付费、再用电。该表在设计过程中,充分考虑到在线仪表的特点,在可靠性和抗干扰能力方面采取了一系列措施,
5、完全符合电磁兼容性标准。该产品各项性能指标符合 JBT8328-1996预付费电度表标准中对单相电子式预付费电能表的全部技术要求。结合用户的群众性及经济利益等诸多特殊要求与条件,本电度表引入微控制器,其具有更多的技术特点和优越功能,具体如下:(1) 采用新型 IC 卡,一户一卡,互不通用,具有良好的可靠性和安全性。(2) 具有负荷设定功能,超负荷跳闸功能并记录超负荷次数(可选功能)(3) 可在 20A 电流下长期工作,温升小于 30 度(4) 具有数据回写功能,回写累积电量,剩余电量,超负荷次数,非正常用电时间,电能脉冲常数至售电系统,便于电力部门管理。(5) 剩余电量为 0 时跳闸断电,此时
6、若用户使用短路方式窃电,该表可记录窃电时间,并回写至售电系统。(6) 剩余电量不足报警。(7) IC 插座自保护功能,当金属片等异体物质插入 IC 插座时,读卡部分自动保护但不影响正常计费和其他功能,确保电表不会损坏。1.2 本设计任务和主要内容本论文主要研究 IC 卡式单片机预付费电度表,分别对电能计量、预付费系统、控制电路、显示、IC 卡接口等方面进行了深入研究,并增加采用 IC 卡付费和掉电保护功能。预付费电度表的设计任务是实现相关的功能及要求,符合现实生产生活的需要。其必须满足具备以下一些要求和功能:(1) 电能计量准确、精度高、要求至少达到二级表(误差为 2%)的精度;(2) 用户将
7、存有电能的 IC 卡插入卡槽,卡中电能被读入表中,同时把 IC 卡清”0” ;.页眉.页脚(3) 专卡专用.当有非本机卡或异物插入卡槽时,能及时发现,切断卡座的供电,并在液晶显示屏上给出相应的汉字提示信息,且保密性高;(4) 电度表正常工作时,液晶显示剩余电能值、已用电能值,并随时改写剩余电能和已用的工作是否正常及用电负荷的大小;(5) 当表内剩余电能不足 20KW.H 时,在液晶显示器上显示“请及时购电”以提醒用户余电不多,及时购电;(6) 当表内剩余电能为 0 时,自动断电,这时用户不能用电。在用户将重新购电的 IC 卡插入槽中时,表完成上述第一项的功能,恢复供电;(7) 有负荷限制功能:
8、当用户电流大于 25A 时自动断电, 1min 后恢复供电;(8) 具有掉电保护功能:掉电时,自动把剩余电能从 RAM 转储在 EEPROM 中。预付费电度表的设计主要内容包括电能计量系统设计和预付费系统设计两方面的内容。此处,预付费系统并非本论文讨论的重点。但是为了描述的方便,我们从整体上进行考虑,具体分硬件设计和软件设计等两个方面进行讨论。1硬件设计预付费电度表根据设计任务的需要,其硬件电路主要包括电能计量电路、控制电路、显示电路、IC 卡接口、电能存储器、掉电检测和电源等模块。电能计量电路:采用电子电度表专用集成电路 SM9903。芯片内部包含了模拟乘法器、电压 N 频率转换器、VFC、
9、计数器(分频器)及控制逻辑。控制部分为整个电能表的心脏,实现电能脉冲、掉电信号、IC 卡信号、串行EFPROM 数据的采集和读写,完成显示驱动模块的控制和继电器的驱动等功能。显示电路:采用液晶显示,其特点是显示内容丰富(可显示汉字) ,功耗小,可靠性高,电路简单。IC 卡接口电路:采用 Atmel 公司的存储 IC 卡 AT23C01,用于存储由售电管理系统写入密码、卡号、电度数等。2软件设计硬件是系统的基础,则软件是系统的灵魂。本系统的软件设计主要依托于硬件设计,采用模块化编程,可分为系统初始化程序、主程序 MAIN、IC 卡检测及读写程序、定时器 0 中断服务程序、外中断 0 服务程序(掉
10、电保护)等。.页眉.页脚第 2 节 系统主要硬件电路设计 2.1 方案设计与比较论证预付费电度表主要包括电能计量系统和预付费系统。电能计量系统完成了电能测量、电能值显示、超负荷断电等功能;预付费系统主要是利用 IC 卡实现先付费,再用电的模式。前者追求可靠性,后者追求高安全性。因为预付费系统在此设计中并非重点,所以接下去仅对电能计量系统方案进行设计和论证比较。2.1.1 电能计量系统方案设计根据电能计量系统的功能要求,有以下一些设计方案,对各类方案进行描述并比较论证,得出结论。方案一:机械电子式前置通道采用原感应式电度表电路,通过对转盘转动圈数的计数来测量电能。具体方案是在转盘上涂上大约 1c
11、m 的“黑条” ,在转盘上方或者下方设置一红外线发射接收对管。当红外线照射在“黑条”处,红外线被吸收,无反射,即接收管接收不到红外线;当红外线照在其他部分时,被反射,接收管能接收到红外线。这样转盘每转一圈,产生一个脉冲,再通过对脉冲的整形、计数、显示完成电能的计量。这种方案显示直观,读数容易。但它仍然具有机械式感应电度表的缺点,即耗电多,笨重。方案二:模数转换式.页眉.页脚对电流和电压分别采样,再通过 A/D 转换器转换成数字信号,然后送入单片机进行相乘运算。并在 CPU 中设置一个定时器定时对功率进行累加,其系统如图 2-1所示。A/D 变换IU 变换 A/D 变换CPU液晶显示器控制键盘I
12、C 卡卡座图 2-1 方案二的系统图这种方案对信号的采样速度快,但 A/D 转换器的精度要求高,而且由于电网的电力谐波引入前置通道,导致 A/D 转换后产生错误数据。为抑制这种干扰,必须在软件上加数字滤波器或在硬件上采用隔离放大器和高精度的运算放大器。这将增加CPU 的负担和硬件电路成本,其方案可行而不可取。方案三:电压频率转换式采用电压/频率(V/F)转换器加单片机实现对电流和电压的 A/D 转换。这样,模拟通道中本身的干扰信号被抑制。无须专门的 A/D 转换器,大大减小了硬件成本。CPU 只需对 V/F 转换后的脉冲进行定时计数,便可测出电压和电流的数字量。同时,电压和电流分别经过零检测电
13、路。将过零脉冲送 CPU 处理,得出电流和电压的相位差,经过查表得功率因数(cos) ,按公式 P=UIcos 计算,便得有功功率,再定时累加就是电能值。系统框图如图 2-2 所示。IU 变换 模拟开关过零检测过零检测V/F 转换CPU液晶显示器控制键盘IC 卡卡座图 2-2 方案三的系统图.页眉.页脚这种方案 CPU 要实现读写卡控制、求功率因数(cos) 、电能计算等功能,负担较重,一般的 MCS-51、MCS-96 和 PIC 系列单片机难以胜任。22 预付费电度表工作过程及基本原理2.2.1 预付费电度表工作过程结合系统设计的要求,我们可知,预付费电度表的工作过程如下:(1)上电时,在
14、液晶屏上显示“电子电能表” 。随后将存放在 EEPROM 中的剩余电能调出到 RAM 中;(2)当单片机工作正常时,能显示剩余电能和已用电能;(3)当有本机 IC 卡插入卡槽时,根据有电卡和无电卡(空卡)做出不同的处理。若为有电卡,则显示“正在读卡,主稍候” 。稍候显示:“请抽卡” 。这时卡中的电能被写入表中,且将卡清零;若为空卡,则显示“空卡” ;(4)当用电时,剩余电能递减,已用电能递增;(5)当插入无效卡时,系统提示“IC 卡型号不对,请换卡” ;(6)当电用完时,切断电源,并显示:“电用完,请及时购电” ;(7)液晶显示器显示的内容与处理,如表 2-1 所示。表 2-1 液晶显示器显示
15、内容以及处理显示内容 处 理超负荷 减少用电负荷密码有误 非本机卡,请换卡卡短路 卡座的电源短路,可能是认为破坏非法卡 IC 卡型号不对,请换卡读写错误 IC 卡可能已坏,请换卡电子电能表 上电复位正在读卡,请稍后 将 IC 卡中数据送入表中,清 IC 卡请抽卡 IC 卡已读写完空卡 所插 IC 卡无电能2.2.2 有功电能测量的基本原理本设计采用有功电能测量集成电路 SM9903,芯片内部包含了四象限模拟乘法器、积分器、电压/频率转换器 VFC、计数器(分频器)及控制逻辑,它能将正弦电压和电流相乘后,转换为频率输出。只需对输出脉冲累计计数,就可计量出电能。SM9903 内部电路模型如图 2-
16、3 所示。.页眉.页脚四象限模拟乘法器积分器 V/F转换器 图 2-3 SM9903 内部电路模型示意图在正弦稳态情况下,设正弦电压和电流分别为:(2-1)2cosuUt(2-2)()iI式中,u 为交流电压瞬时值,i 为交流电流瞬时值,U 为交流电压有效值,I 为交流电流有效值, 为交流电的角频率, = u- i 为电压电流的相位差。经四象限模拟乘法器相乘后的瞬时功率为:(2-3)2cos*cs()cos(2)piUtItIt可见,瞬时功率有恒定分量 UI 和正弦分量两面三量两面三刀部分,正弦分量的频率是电压(或电流)频率的两倍。图 2-4 所示为正弦电流、电压和瞬时功率的波形图。图 2-4
17、 正弦电流、电压和瞬时功率的波形图在图 2-4 中,u 是瞬时电压,i 是瞬时电流,p 是瞬时功率。瞬时功率 p 经积分器后,得有功功率 P,即P= (2-4)11coscs(2-)cos00TTdtUIwtdtUIIl以上分析表明,有功功率 P 为恒定分量,将正比于 P 的电压经 V/F 变换后,输.页眉.页脚出的是频率随 P 变化的脉冲,只需将脉冲累计计数,则计数值 N 即为电能。2.3 预付费电度表电路预付费电度表的硬件电路可分为电能计量电路、显示电路、IC 卡接口、电能存储器、掉电检测和电源几大模块。下面分别介绍各部分电路。2.3.1 电能计量电路电能计量电路采用了电度表专用集成电路
18、SM9903。SM9903 采用 3 m 硅栅 BICMOS 工艺制成。电路设计先进,内部集成有缓冲放大器、乘法器、V/F 型 A/D 转换器等电路。本芯片模拟部分和数学部分可分开供电,所以可靠性较高。封装采用 DIP20 塑封。SM9903 是将取自电阻网络的交流电压和交流电流信号进行放大。应用乘法器将功率转换成电压,再通过 V/F(电压/频率转换)型 A/D 转换器等电路将电压信号转换成可供 MCU 读取和直接驱动步进电机的数字信号。SM9903 同时具有测量负向有功功率的功能,测量负向有功功率以正向有功功率计算,并通过 IND(9 脚)输出负电平以指示测量负向有功功率。如图 2-5 所示
19、,此即为由 SM9903 构成的电能计量电路。该电路采用 340 的锰铜片作为电流采样电阻,用精密金属膜作为电压采样电阻。C4、R17、VD1、VD2、C8、C9、VZ1、VZ2 为电容降压式电源,为 SM9903 提供5V 的工作电压。32768Hz 为表用晶体振荡器,为 SM9903 提供时钟。C6、C7 为积分电容。R8 为参考电压调整电位器。本电路无须机械计数器。.页眉.页脚图 2-5 SM903 构成的电能计量电路2.3.2 控制部分 控制部分为整个电度表的心脏,实现电能脉冲、掉电信号、IC 卡信号、串行EEPROM 数据的采集与读写,完成显示驱动模块的控制和驱动等功能。单片机的选择
20、是决定电度表性能的关键因素,本设计采用 MCS-51 系列单片机,其特点是通用强,堆栈丰富和编程容易。51 系列单片机的指令系统中,2-3B 的指令很多。当程序指针 PC 跳飞至某条指令的中间时,会把操作数当成指令码执行而引起混乱,这一致命的弱点将导致电度表的可靠性下降。本设计选用 Atmel 公司的 AT89C52,其内部有 8KB 的程序存储器,无须外部扩展,使硬件电路简单,电路图如 2-6 所示。.页眉.页脚P1.023P1.243VCP0.1P0.24039837P1.45567P1.687P0.45P0.6633REST9XD10T12IN07EALPSEN231029T130145
21、T116WR.7P26.5P248D7XTAL2189120VS .3P2.1P202+5VCU+5V +5V+5VR301KS1S2C130uFR23D10IN48C31R50204.7K0.uFIC2TL5210KR2C14C1520PF20PF12MHzR510KC320.1uFIC4AT89C52图 2-6 由 AT89C52 组成的主控电路2.3.3 显示电路本系统采用液晶显示器。其特点是显示内容丰富(可显示汉字) ,功耗小,可靠性高,电路简单。器件型号是:SMG12232B-2,显示容量为 122*32 点阵。采用总线方式连接。显示电路如图 2-7 所示。.页眉.页脚P1.023P
22、1.243VCP0.1P0.24039837P1.45567P1.687P0.45P0.6633REST9XD10T12IN07EALPSEN231029T130145T116WR.7P26.5P248D7XTAL2189120VS .3P2.1P202+5V VCDB01DB23DB45DB67A0CS12RDWRSTGNDSM123B-2液晶显示器CU 10KR37-4图 2-7 液晶显示接口电路2.3.4 IC 卡接口电路IC 卡接口电路采用的是 Atmel 公司的存储 IC 卡 AT24C01,用于存储由售电管理系统写入的密码、卡号、电度数等,是电管部门与用户连接的桥梁。为了提高 IC
23、卡操作的可靠性,必须有卡上下电控电路、卡插入检测电路、卡短路检测电路等辅助电路,结合软件可以大大提高其读写的准确性和可靠性。IC 卡接口电路如图 2-8所示。.页眉.页脚P1.6P1.5P1.43P1.2AT89C52CPU VCGNDSDACLK21IC卡 卡 座R19R20R18Q39014Q2901R24R29 R28D5D61K5.1K 3K5.1K5.1K+5V+5VIN418IN4180图 2-8 IC 卡接口电路2.3.5 电能存储器电能存储器由串行 EEPROM 和上拉电阻组成,在串行时钟和数据端接了上拉电阻R25 和 R27,分别连接到 IC4 的 P3.0 和 P3.1 端
24、。串行 EEPROM 选用AT24C04,AT24C04 为低电压(2.5V-5.5V) 、长寿命(可擦写 10 万次以上)器件。在掉电时存储剩余电度数。 VCA01A2GND 5.1KWPSCLDA P3.105.1KR2R27+5VAT24C0 AT89C52CU图 2-9 电能存储电路2.3.6 掉电检测电路掉电检测电路比较器(运放 LM393) 、电压基准 LM336(2.5V ) 、.页眉.页脚R31、 R32、 R33、R34、 R35、R36 和二极管 VD7 组成。+5VR31R32R34R35 R3620KD7IN418接 AT89C52的 P3.2脚IC5LM39K5.1K
25、10K10KLM36Z3 84123-+图 2-10 掉电检测电路R31 为 VZ3 提供合适的工作电流,VZ3 上端作为电压基准,R32、R33 对 5V 电压分压,为 VZ 做比较。电源电压正常时,V-V+,比较器输出高电平;当电源掉电时,V-跟随电源电压下降,而 V+在一定时间内保持 2.5V 不变。当下降到 V-V+时,比较器输出低电平,使微处理器产生外中断,做掉电处理。VD7、R36 为施密特电路,是为了避免电压在阀值左右波动时引起反复的写操作。2.3.7 磁保持继电器驱电路磁保持继电器使电器能使电磁线圈中保持上次驱动脉冲所注入的磁场不变,即在正常工作时不需要加驱动电流,只在需要改变
26、触点状态时加上 200ms 左右的反向脉冲即可。随后不需要任何驱动。这就大节省了能量,降低了功耗。磁保持继电器由 AT89C52 的 P1.0、P1.1 发出控制信号,P1.1 为高电平时线圈中有正向电流,P1.0 为高电平时线圈渡过反向电流。驱动电路由电阻R21、R45、R46、R47、R48、R49、R50、R51、PNP 三极管 VT1、VT4,三极管VT5、VT6、VT7、VT8 组成。L 为电磁圈。当 P1.1=1、P1.0=0 时三极管VT4、VT7、VT8 导通,而 VT1、VT5、VT6 截止。流经 L 的电流方向为+12VVT4的 E 极VT4 的 C 极线圈 B 端线圈 A
27、 端VT7 的 C 极VT7 的 E 极地,继电器触点接通;当 P1.1=0、P1.0=1 时三极管 VT4、VT7、VT8 截止,而VT1、VT5、VT6 导通。流经 L 的电流方向为+12VVT1 的 E 极VT1 的 C 极线圈 A 端线圈 B 端VT6 的 C 极VT6 的 E 极地,继电器触点断开。当P1.1=P1.0=0 时,所有三极管均截止,线圈无电流。P1.1=P1.0=1 是不允许的情况,因为这时所有的三极管导能,功耗很大。.页眉.页脚+5VP1.0 P1.LA BR45 R46R47 R48R49 R50R21R51 Q1Q4Q5Q6Q7Q89029012901390139
28、01390131K 1K2K K1K 1K.K .7K图 2-11 磁保持继电器驱动电路第 3 节 系统的软件设计.页眉.页脚为求的高可靠性要求的电度表,我们针对该系统的特征对其进行系统模块化程序结构,主要可以分为系统初始化程序、主程序 MAIN、IC 卡检测及读写程序、外中断 0 服务程序、定时器 0 中断服务程序等。31 主程序设计流程图以及相应代码 主程序是程序的核心,主要判断是否有卡插入、是否有键按下,基于此种判断是否需进行相关操作运行。下面就是主程序的算法流程图和相关程序代码。开 始初始化是否有卡插入卡操作是否有键按下读键值显 示YYNN图 3-1 主程序流程图主程序程序清单:ORG
29、 0100HMAIN: MOV SP,#60H ;堆栈设置LCALL DIRRST ;执行显示复位程序LCALL KEYRST ;执行键盘复位程序LCALL AT24RST ;执行E2PROM复位程序LCALL AT24RSTI ;执行IC卡复位程序LCALL DDJCRST ;设置中断LCALL DLCSRST ;设置定时器MAIN1: LCALL KEY ;执行键扫描程序MOV A,SEERCJNE A,SEE,MAIN3.页眉.页脚MOV A,#1CJNE A,SEE,MAIN2SJMP MAIN4MAIN2: MOV A,#2CJNE A,SEE,MAIN5SJMP MAIN4MAIN
30、3: MOV SEER,SEELCALL LCDRESET ;执行液晶显示器复位程序MOV A,#00HLCALL LCDFILLMAIN4: LCALL DIR ;执行显示程序MAIN5: LCALL ICK ;执行IC卡检测及读写程序AJMP MAIN132 IC卡检测及读写程序设计IC卡检测程序清单:ICK: JNB K2,ICK1SETB VCCIRETICK1: MOV DEL,#10LCALL DELYJNB K2,ICK2SETB VCCIRETICK2: CLR VCCIMOV DEL,#10LCALL DELYJB VCCDL,ICK3SETB VCCIMOV SEERR,S
31、EEMOV SEE,#5MOV SEER,SEELCALL LCDRESET ;执行液晶显示器复位程序MOV A,#00HLCALL LCDFILL.页眉.页脚LCALL DIRMOV DEL,#60LCALL DELYMOV SEE,SEERRRETICK3: MOV MRDI,#00HMOV NUMBYT,#8MOV SLA,#0A0HLCALL RDNBYTIMOV A,#0AAHCJNE A,MRD1I,ICK4CJNE A,MRD2I,ICK4CJNE A,MRD3I,ICK4CJNE A,MRD4I,ICK4CJNE A,MRD5I,ICK4CJNE A,MRD6I,ICK4CJN
32、E A,MRD7I,ICK4CJNE A,MRD8I,ICK4SJMP ICK5ICK4: MOV SEERR,SEEMOV SEE,#4MOV SEER,SEELCALL LCDRESET ;执行液晶显示器复位程序MOV A,#00HLCALL LCDFILLLCALL DIRMOV DEL,#60LCALL DELYMOV SEE,SEERRRETICK5: MOV MRDI,#10HMOV NUMBYT,#3MOV SLA,#0A0HLCALL RDNBYTI.页眉.页脚MOV A,#00HCJNE A,MRD1I,ICK6CJNE A,MRD2I,ICK6CJNE A,MRD3I,IC
33、K6MOV SEERR,SEEMOV SEE,#7MOV SEER,SEELCALL LCDRESET ;执行液晶显示器复位程序MOV A,#00HLCALL LCDFILLLCALL DIRMOV DEL,#60LCALL DELYMOV SEE,SEERRRETICK6: MOV SEERR,SEEMOV SEE,#8MOV SEER,SEELCALL LCDRESET ;执行液晶显示器复位程序MOV A,#00HLCALL LCDFILLLCALL DIRMOV MTD1I,#00HMOV MTD2I,#00HMOV MTD3I,#00HMOV MTDI,#10HMOV NUMBYT,#
34、4MOV SLA,#0A0HLCALL WRNBYTICLR ET0CLR TR0MOV A,MRD3ICLR CADD A,SDL3.页眉.页脚MOV SDL3,AMOV A,MRD2IADDC A,SDL2MOV SDL2,AMOV A,MRD1IADDC A,SDL1MOV SDL1,ALCALL ZHCSMOV TH0,#0FFHMOV TL0,#0FEHSETB ET0SETB TR0MOV DEL,#60LCALL DELYMOV SEE,#12LCALL LCDRESET ;执行液晶显示器复位程序MOV A,#00HLCALL LCDFILLLCALL DIRICK7: JB K
35、2,ICK8SJMP ICK7ICK8: SETB VCCIMOV SEE,#2RET33 外中断 0 服务程序的流程图以及代码外中断 0 主要用于实现电能的掉电保护,当电源突然断开时,由于掉电保护的作用,使单片机产生中断,迅速将电能保护到 AT24C04 中去,以便下次来电时重新恢复电能值。以下为程序流程图和程序代码清单。.页眉.页脚中断入口保护现场将剩余电能存入 EEPROM 中恢复现场中断返回图 3-2 外中断 0 服务程序(掉电保护)流程图外中断初始化程序清单:DDJCRST: SETB IT0SETB EASETB EX0RET;外中断服务程序DDJC: PUSH APUSH BPU
36、SH DPLPUSH DPHPUSH 00HPUSH 01HPUSH 02HPUSH 03HPUSH 04HPUSH 05HPUSH 06HPUSH 07HMOV JWW,CMOV MTD1,YDL1MOV MTD2,YDL2MOV MTD3,YDL3.页眉.页脚MOV MTD4,YDL4MOV MTD5,SDL1MOV MTD6,SDL2MOV MTD7,SDL3MOV MTD,#00HMOV NUMBYT,#8MOV SLA,#0A0HLCALL WRNBYTMOV C,JWWPOP 07HPOP 06HPOP 05HPOP 04HPOP 03HPOP 02HPOP 01HPOP 00HP
37、OP DPHPOP DPLPOP BPOP ARETI34 定时器 0 中断服务程序以及代码定时器 0 中断服务主要用以实现脉冲计数,从而实现电能的累加。以下即为服务程序流程图和程序代码清单。.页眉.页脚中断入口保护现场剩余电能减 1已用电能加 1是否超负荷显示“超负荷” ,延时5min恢复现场中断返回YN图 3-3 定时器 0 中断服务程序流程图定时器0中断服务程序清单:DLCSRST: MOV TMOD,#05HMOV TH0,#0FFHMOV TL0,#0FFHMOV MRD,#00HMOV SLA,#0A0HMOV NUMBYT,#7LCALL RDNBYTMOV YDL1,MRD1M
38、OV YDL2,MRD2MOV YDL3,MRD3MOV YDL4,MRD4MOV SDL1,MRD5.页眉.页脚MOV SDL2,MRD6MOV SDL3,MRD7LCALL ZHCSMOV A,SDL1CJNE A,#00H,DLCSRST1MOV A,SDL2CJNE A,#00H,DLCSRST1MOV A,SDL3CJNE A,#00H,DLCSRST1SETB DYKGMOV SEE,#9RETDLCSRST1: CLR DYKGMOV DEL,#10LCALL DELYSETB EASETB ET0SETB TR0RETDLCS: PUSH APUSH BPUSH DPLPUSH
39、 DPHPUSH 00HPUSH 01HPUSH 02HPUSH 03HPUSH 04HPUSH 05HPUSH 06HPUSH 07HMOV JWW,CMOV A,SDL1CJNE A,#00H,DLCS1.页眉.页脚MOV A,SDL2CJNE A,#00H,DLCS1MOV A,SDL3CJNE A,#00H,DLCS1SETB DYKGMOV SEE,#9CLR ET0CLR TR0AJMP DLCS3DLCS1: CLR DYKGMOV A,#100CLR CADD A,YDL4MOV YDL4,ACLR AADDC A,YDL3MOV YDL3,ACLR AADDC A,YDL2M
40、OV YDL2,ACLR AADDC A,YDL1MOV YDL1,AMOV A,SDL3CLR CSUBB A,#100MOV SDL3,AMOV A,SDL2SUBB A,#00HMOV SDL2,AMOV A,SDL1SUBB A,#00HMOV SDL1,ALCALL ZHCS.页眉.页脚MOV A,SDL1CJNE A,#00H,DLCS2MOV A,SDL2CJNE A,#4EH,DLCS2MOV A,SDL3CJNE A,#20H,DLCS2MOV SEERR,SEEMOV SEE,#13DLCS2: MOV TH0,#0FFHMOV TL0,#0FFHSETB ET0SETB
41、TR0DLCS3: MOV C,JWWPOP 07HPOP 06HPOP 05HPOP 04HPOP 03HPOP 02HPOP 01HPOP 00HPOP DPHPOP DPLPOP BPOP ARETIZHCS: MOV ZY4,YDL4MOV ZY3,YDL3MOV ZY2,YDL2MOV ZY1,YDL1MOV ZS3,SDL3MOV ZS2,SDL2MOV ZS1,SDL1MOV R7,#32.页眉.页脚CLR AMOV R2,AMOV R3,AMOV R4,AMOV R5,AMOV R6,AYBCDT1: CLR CMOV A,ZY4RLC AMOV ZY4,AMOV A,ZY3R
42、LC AMOV ZY3,AMOV A,ZY2RLC AMOV ZY2,AMOV A,ZY1RLC AMOV ZY1,AMOV A,R6ADDC A,R6DA AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,AMOV A,R3ADDC A,R3DA A.页眉.页脚MOV R3,AMOV A,R2ADDC A,R2DA AMOV R2,ADJNZ R7,YBCDT1MOV A,R2ANL A,#0FHMOV SEE08,AMOV A,R2SWAP AANL A,#0FHMOV SEE09,AMOV A,R3ANL
43、A,#0FHMOV SEE06,AMOV A,R3SWAP AANL A,#0FHMOV SEE07,AMOV A,R4ANL A,#0FHMOV SEE04,AMOV A,R4SWAP AANL A,#0FHMOV SEE05,AMOV A,R5ANL A,#0FHMOV SEE02,AMOV A,R5SWAP AANL A,#0FHMOV SEE03,A.页眉.页脚MOV A,R6ANL A,#0FHMOV SEE00,AMOV A,R6SWAP AANL A,#0FHMOV SEE01,AMOV R7,#24CLR AMOV R2,AMOV R3,AMOV R4,AMOV R5,ASBC
44、DT1: CLR CMOV A,ZS3RLC AMOV ZS3,AMOV A,ZS2RLC AMOV ZS2,AMOV A,ZS1RLC AMOV ZS1,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,AMOV A,R3ADDC A,R3DA A.页眉.页脚MOV R3,AMOV A,R2ADDC A,R2DA AMOV R2,ADJNZ R7,SBCDT1MOV A,R2ANL A,#0FHMOV SEE16,AMOV A,R2SWAP AANL A ,#0FHMOV SEE17,AMOV A ,R3ANL A,#0FHMOV SEE14,AMOV A,R3SWAP AANL A,#0FHMOV SEE15,AMOV A,R4ANL A,#0FHMOV SEE12,AMOV A,R4SWAP AANL A,#0FHMOV SEE13,AMOV A,R5ANL A,#0FHMOV SEE10,AMOV A,R5SWAP AANL A,#0FHMOV SEE11,A