定时/计数器, 一个全双工异步串行口( UART ), 一个五源两级的中断结构, 片上振荡器与时钟电路。
经我们实验认为, AT89C51是一种很可靠的性能非常优良的芯片, 它的使用给我们这次设计提供了很多便利。
第三章 硬件的基本构成及软硬接口
§3.1 系统的大致硬件结构
★ 系统使用了一片带有4K 字节的闪速可编程及可擦除只读存贮器的
AT89C51单片机作为中央控制器;
★ 采用一片飞利浦 PCF8583 日历时钟芯片作为系统硬时钟, 并使用其中的 256个 Byte RAM 作为掉电时数据保存区;
★ 采用 8位 LED七段显示器作为显示部件, 4个发光二极管作为峰平
谷和电能脉冲指示灯;
★ 用七个按钮接到P2.0~P2.6作为系统控制键;
★ 用光电头得到电能脉冲信号, 以外部中断方式INT1将脉冲信号送
入89C51;
★ 用一块7705得到上电复位和掉电中断信号,掉电信号从INT0接入
89C51;
★ 用变压器作为系统正常工作电源,用一个高能锂电池作为掉电时
PCF8583备用电源以维护系统实时时钟和数据。
§3.2 PCF8583 日历时钟芯片简介
PCF8583是一个低电压源的日历时钟芯片和RAM电路, 它的主要功能特性如下:
* 4 年日历时钟, 24或12点格式; * 具有串行I2C总线接口;
* 256字节RAM, 自动字节地址增量; * 具有可编程的闹钟.定时和中断功能。
RAM的头8个字节单元(地址为00~07)作为可寻址的寄存器, 其中地址为00的单元为控制/状态寄存器, 01~07单元为时钟计数器,地址为的08~0F的单元可编程为空闲单元或闹钟寄存器。
由于我们只用到了它的计时功能, 所以下面只简单谈一下时钟计数器和控制寄存器。
00单元: 复位后状态为的00H, 此时为32.767kHz时钟方式, 取消了起闹功能, 读5至6单元时不屏蔽。装入实时时间时应先给00单元送80H;
01, 02, 03, 04单元依次为百分之一秒、秒、分、时计数器,其数据格式为压缩BCD码;
05单元为年和日期寄存器, 06单元为星期和月份寄存器,其格式如下:
PCF8583的其它单元被用作RAM,本文将在附录中对其详细说明。
§3.3 软硬之间的接口及硬件资源的分配
由上述硬件构成可知, 硬件在外围电路方面为软件提供的接口有: * 显示部分: P0.0~P0.3为数字0~9的BCD码, P0.4为小数点, P1 为八个七段的位选择, 如0010,0000B 则显示左数第三个七段。
* 按键信息: 七个按钮分别挂接在P2.0~P2.6上, 平时为高电平, 按下时为低, 定义如下:
键名 键值 对应89C51引脚
——————————————————
* 掉电中断: 掉电信息由INT0引入89C51。 * 电能脉冲: 电能脉冲由INT1引入89C51。 * 与PCF8583的通讯:
PCF8583具备I2C接口, 其中SDA(数据线)接P0.7,SCL(时钟线)接P2.7。
又: PCF8583有开放式中断, 接P0.5, 软件检测其由高到低跳变
作为秒信号。
* 指示灯: P3.4~P3.7接四个发光二极管, 软件将其定义如下:
P3.4 峰电指示, P3.5 平电指示, P3.6 谷电指示, P3.7 电能脉冲指示, P3.4和P3.5同时亮为尖峰电量指示, P3.4~P3.6全亮为总电量指示。
程序对系统内部硬件的资源分配为: T0定时器用作定时, 它的中断用于软件WATCHDOG, T1计数/定时器、TI/RI串行I/O 中断留作系统扩展用。 其余如P0,P1,P2,P3等在软硬接口中已有定义, 不再赘述。AT89C51中128字节RAM分配为: 25字节用作堆栈, 30 字节用作计算需量用的滑差队列, 第0第1两组寄存器, 8 字节的显示缓冲区以及一些常用常修改的数据。 PCF8583的RAM中设有实时时钟, 并存放下电保护数据和系统一些不常修改的数据(如: 时段定义、用户号、抄表密码等)。
在上述软硬接口定义和硬件资源分配下进行了软件设计以完成系统功能。
第四章 软件总要及关键技术分析
§4.1 软件总体思想
单片机程序又称为监控程序, 它负责监督管理智能仪器的全部资源和全部操作。它是智能仪器的心脏和灵魂, 监控程序质量的好坏直接决定着一个智能仪器性能。
由于程序将用在新型电表上, 所以其数据的安全性与可靠性就是至关重要的了, 这就要求首先要尽可能保证程序的正确性。而简单将在某种程度上导致正确, 因此在编程处理中尽可能避免了程序结构的过于复杂,而将其分为相对较为独立的功能模块。并且, 按照软件工程学的思想, 软件在其生存周期中其维护是很占用人力的, 所以尽可能应使程序有较好的可读性。本着正确、简单、可读的原则编制了整个软件。当然, 这是以程序代码效率的降低为代价的。 笔者认为, 在内存不是主要矛盾的情况下, 代码量在一定限度内的增加以换取软件的高可靠性和良好的可读性是很值得的。
§4.2 软件组成
本设计中监控程序由主程序和三个中断服务程序组成。
T0中断服务程序和RAM H单元一起作为软件WATCHDOG, 是系统抗干扰措施之一。
电能脉冲中断服务程序负责记录电能脉冲数目, 如果满一个计量单位就修改总电量, 并根据当前时段峰平谷值修改分电量。
掉电中断服务程序负责保存掉电保护数据, 然后停止程序执行以防数据丢失。
主程序则首先调用初始化, 给各特殊寄存器置初始值, 并依掉电标志的状态不同给各工作单元送初值。 如果是掉电恢复还要处理掉电时间记录和抄表等工作, 然后进入主循环。在这个主循环中喂软件WATCHDOG一次; 不断调用显示子程序显示数据;同时, 检测 PCF8583秒信号得到实时
时间, 维护滑差队列、计算最大需量、修改相应记录,并检测是否到时段转换点, 是则更新当前时段峰平值; 检测有无键按下, 若有, 则转到键处理子程序完成处理; 然后跳转到循环头继续循环; 这期间如果有中断则由中断服务程序处理之。 整个软件中显示项号是系统最重要的数据: 显示内容由它指示, 在调用键处理程序和数据送显示的子程序时都靠它来传递参数。
主程序流程如下: