《单片机课程设计多用户电表的设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计多用户电表的设计.doc(33页珍藏版)》请在三一办公上搜索。
1、山东科技大学课程设计实验项目名称 多用户电能表的设计姓名 学号 手机 Email 专 业 电气工程及其自动化 班级 09-3(定单)指导教师: 开课学期 2011 至 2012 学年 2 学期提交时间 2012 年 1 月 06 日多用户电表的设计摘要:多用户电子式单相电能表采用单片机作为中央处理器,每块电能表可对8户的用电情况进行集中检测、循环显示。多用户电子式电能表传统感应式电能表相比,有效地提高了电能计量的准确性,且具有体积小、质量轻、安装方便等优点。本文介绍了一种以单片机AT89C52作为控制核心设计,以脉冲发生器模拟用户用电情况,应用单片机C8051F360编制程序完成脉冲的读取、计
2、数、计算、存储、送显示等功能,用74HC164及八段译码显示器完成数据的显示,使用E2PROM 24C16芯片来实现单片机的掉电数据保护的多用户电子式电能表,并提供了其硬件和软件设计结构,该电能表可实现电能计量、数码管显示、掉电存储等功能。在本多用户电子式电能表的前面板上有8位LED显示器,前两位为分户号,后6位为分户用电量,所显示的用电量与分户号相对应,分户循环显示,每3s切换一户。关键词:电能表;单片机;硬件设计;软件设计目录一 前言 41.1 课题背景41.2 课题研究内容与意义4二 设计任务52.1 设计目的52.2 设计要求5三 设计内容63.1 硬件电路设计63.1.1系统框架63
3、.1.2 核心芯片部分设计63.1.3 显示模块的设计143.1.4 掉电保护模块的设计163.2 软件设计173.2.1 软件的总体设计173.2.2 显示模块的软件设计173.2.3 采集电路的流程图183.2.4 总程序流程图19五 结束语21六 参考文献21七 附录22附录122附录225附录325一 前言1.1 课题背景电能表自诞生至今已有100多年的历史,随着电力系统及其相关产业的发展以及电能管理系统的不断完善,电能表的结构和性能也经历了不断更新、优化的发展过程:由最初的感应电能表,发展到后来的感应系脉冲电能表,直至现在的纯电子式电能表。感应系电能表是利用处于交变磁场的金属圆盘中的
4、感应电流与有关磁场形成力的原理制成的。感应系脉冲电能表仍采用感应系电能表的测量机构作为工作元件,由光电传感器完成电能脉冲转换,然后经电子电路对脉冲进行处理,从而实现对电能的测量。纯电子式电能表的原理是采用电子电路来实现电能计量,所以电子式电能表的共同特点是采用乘法器,根据所依托的乘法器为模拟的还是数字的分为模拟乘法器型电子电能表和数字乘法器型电子电能表。微电子技术和计算机技术的高速发展是电子式电能表迅速进步、日益成熟的主要技术支撑。准确度高、可靠性高的元器件以及大规模集成电路等的采用,使电子式电能表的使用寿命、准确度、稳定度等技术指标均显著改善。电子式多功能多用户电能表由于准确度高、功能扩展性
5、强、易于实现多费率和通信等一系列优点,较好解决了机械表长期以来难以解决的诸多问题,将会在现代化电能计量与管理中逐步占据主导地位。本文给出基于AT89C52单片机的一种新型单相多用户电能表设计,电能计量准确。该电能表具有八段数码管显示,功耗低,掉电后自动存储数据的特点。1.2 课题的研究内容与意义电子式多用户多功能电能表适用于城市、农村供电部门对居民用户供电进行计量管理,电子式电能表计量准确、易于安装。机械式电能表对安装有严格的要求,若悬挂水平偏差大,将造成电能表的安装位置与垂直的角度不一,使电能计量失衡,造成计量不准,慢走、停走、不走的结果。而电子式电能表是一种静止的计量方式,不存在机械旋转设
6、备,所以电子式电能表不管怎么安装,电能计量都是误差比较小的。电子式多用户多功能电能表,具有测量精度高,过载能力强,功率消耗低,性能稳定可靠,体积小,重量轻,操作方便;易于实现管理,适应工业、农业、民用等不同用户群体用电测量的需求。二 设计任务该课程设计任务要求完成是基于AT89C51单片机的多用户电子式电能表的设计与调试。其中包括硬件设计、软件设计和程序调试两部分。1、硬件设计硬件设计包括单片机的整体设计、显示单元的设计、掉电保护单元的设计以及脉冲发生电路的设计。2、软件设计软件设计包括用C8051F360单片机及汇编或C语言编写用户电量显示程序,并具有掉电保存功能。主函数和各子函数的流程图及
7、其说明等。2.1 设计目的(1)通过计算机编程实现多用户电子式数码显示电能表的功能。(2)本次设计用户数为八户,即实现八位用户循环显示电能量。同时,基于E2PROM 24C16芯片实现单片机的掉电数据保护。2.2 设计要求(1) 基于AD7755芯片实现电能脉冲的发生;(2) 应用单片机C8051F360编制程序完成脉冲的读取、计数、计算、存储、送显示等功能;(3) 、应用74HC164及八段译码显示器完成数据的显示;(4)、应用E2PROM 24C16完成数据的定时写入以防停电时数据丢失。三 设计内容3.1硬件电路设计3.1.1系统框架图一 系统结构图总体概述:本文硬件设计主要由MCU模块、
8、显示模块、AT24C16掉电保护模块部分组成。由拨码开关产生的脉冲信号传送给单片机,AT89C52单片机对方波信号进行采集和计数,P0和P2口同时工作即可对8户电能脉冲进行采集与计数,轮流采集并计数其脉冲信号,将电量存储到非易失存储器中,以防电量丢失。整个电表采用分时方式,并通过八段数码管轮流显示用户使用的电量数据。AT89C52组成的MCU模块控制所有芯片的工作、截止及计算和模块的显示,显示模块采用74HC164和LED数码管的连接模块,正常显示当前测量的用户、相应用户的电能值等;存储模块采用AT24C16,为系统提供数据存储,可以做到掉电不丢失数据,还可以实现电力系统参数的实时记录,该系统
9、可以实现对电能等电参量测量、显示及采集处理的目的。多用户电子式电能表硬件结构总体框图如图一所示。3.1.2核心芯片部分设计核心芯片部分原理图如下:图一 CPU外围电路的设计AT89C52芯片概述:AT89C52是一种低功耗、高性能CMOS8位微控制器,片内含有8K字节的可反复擦写的只读程序存储器(PEROM)。器件采用了Atmel公司高密度、非易失性存储器技术生产制造,与标准MCS51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。片内置通用8位中央处理器(CPU)和Flash存储单元 ,使得AT89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案
10、。功能强大的AT89C52单片机适用于较为复杂控制的场合。主要性能参数:(1)与MCS-51产品指令和引脚完全兼容。(2)8K字节可重擦写Flash闪速存储器。(3)1000次擦写周期。(4)全静态操作:0Hz-24MHz。(5)三级加密程序存储器。(6)2568字节内RAM。(7)32个可编程I/O口线。(8)8个中断源。(9)可编程串行UART通道。(10)低功耗空闲和掉电模式。AT89C52口资源分配:1、RST是AT89C52的复位端口,复位电路如图3.1所示。当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。设计中选用的晶
11、振是12MHZ2、XTAL1:振荡反相放大器及内部时钟发生器的输入端。XTAL2:振荡反相放大器的输出端。晶振电路如图3.1所示。在晶振电路中电容C11和C12起到帮助起振的作用,通常情况下选择30pf。3、外部访问允许,欲使CPU仅访问外部数据存储器(地址0000H-FFFFH),端必须保持低电平(接地);如果EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。4、P0、P1、P2口资源的应用:P1.3 - 24C04_SCLP1.4 - 24C04_SDP1.5 - 74LS165_CLK/P1.6 - 74LS164_CLKP1.7 - 74LS164_ABP2.3 - 7
12、4LS165_CLKP2.4 - ATT7022_DIOUTP2.5 - ATT7022_DINP2.6 - ATT7022_SCLKP2.7 - ATT7022_CSP3.5 - 74LS165_DBP3.4 - T0定时器,用于控制各用户的数据显示时间P1.0 - T2定时器,用于键盘扫描间隔的控制AT89C52常用功能介绍:(1)内部程序存储器AT89C52芯片中共有8K个单元,用于存储程序,原始数据或表格,称为程序存储器,简称内部ROM。(2)并行I/O口AT89S52芯片内部有4个8位的I/O口(P0、P1、P2、P3),以实现数据的并行输入输出。(3)串行口AT89C52有一个全双
13、工的串行口,以实现单片机和其他设备之间的串行数据传送。该串行口功能比较强,既可作为全双工异步通信收发器使用,也可作为同步移位寄存器使用。(4)中断AT89C52共有6个中断向量;两个外部中断(INT0和INT1),3个定时器中断(定时器0,1,2)和串行口中断,比51单片机多了定时器2。这些中断源可通过分别设置专用寄存器IE的位置位或清0来控制每一个中断的允许或禁止,IE也有一个总禁止位EA,它能控制所有中断的允许或禁止。定时器2是一个16位定时/计数器,它既可以当作定时器使用,也可以作为外部计数器使用,其工作方式由特殊功能寄存器T2CON的C/T2位选择;定时器有三种工作方式:捕获方式,自动
14、重载方式(向上或向下计数)方式或波特率发生器方式,工作方式有T2CON的控制位来选择。24C04芯片概述:Microchip公司的24C04B/08B是4K或8K位电可擦除PROM。芯片有两个或者4个2568位存储器构成,并具有两线串行接口。可在电源低到2.5V的条件下工作,等待电流和额定电流分别仅为5uA和1mA。24C04B/08B还具有16个字节数据的页面写能力。24C04B/08B提供标准的八脚DIP、8引线或者14引线SOIC封装。芯片特点:(1)可在低到2.5V的单电源供电条件下工作。(2)低功耗CMOS技术:额定电流的典型值为1mA。5.5V电源条件下,等待电流典型值为10uA。
15、3.0V电源条件下,等待电流典型值为5uA。(2)有两个或者四个256字节块(22568)和(42568)构成。(3)输入端接有施密特触发器和滤波器,用以抑制噪声。(4)消除接地冲激的输出斜率控制。(5)两线串行接口总线,与I2CTM兼容。(6)100KHz(2.5V)和400KHz(5V)兼容。(7)自定时写周期(包含自动擦除)。(8)16个字节的页面写缓冲器。(9)页面写周期的典型值为2ms。(10)整个存储器具有硬件写保护。(11)可被用作串行ROM。(12)可提供工厂编程芯片(QTP)。(13)ESD保护4000V。(14)1,000,000擦/写周期。(15)八脚DIP、8引线或者1
16、4引线SOIC封装。(16)提供很宽的温度适用范围:芯片应用:24C04与单片机的接口电路如图3.1所示,图中RP1、RP2为上拉电阻,大小为5.1K。24C04B/08B支持双向两线总线和数据传输规程。若器件传送数据到总线上,则定义器件为发送器。若器件接受数据,则定义器件为接收器。总线必须在一个主器件控制下工作,主器件产生串行时钟(SCL),控制总线存取,并且产生开始和停止条件。同时24C04B/08B作为从器件工作。主器件和从器件都可工作于发送器或接收器的状态。但是工作于何种状态由主器件决定。1、总线特性总线规程定义如下:仅当总线不忙时,传送数据才能开始。数据传送期间,无论何时时钟线为高,
17、数据线保持稳定。当时钟线为高时,数据线的变化认为是传送的开始或停止。(1)总线不忙(A)数据线和时钟线保持高。(2)开始传送数据(B)时钟(SCL)为高,SDA线由高到低的变化决定开始条件。所有的命令必须在开始条件以后进行。(3)停止数据传送(C)当时钟(SCL)为高,SDA线由高到低的变化决定停止条件。所有的操作必须在停止以前结束。(4)数据有效(D)在开始条件以后,时钟信号高电平周期期间,当数据线稳定时,数据线的状态表示数据有效。在时钟信号低电平期间,数据线上的数据必须改变。每位数据需要一个时钟脉冲。每一次数据的传送在开始条件下启动,在停止条件下结束。在开始和停止条件之间传送的数据字节数由
18、主器件决定,并且在理论上是无限制的。尽管进行一次写操作时,仅最后16个字节将被存储。当发生重复写操作时,后写的数据将代替先写的数据,以先入先出的方式工作。(5)确认在接收到每一个字节后,当寻址时,每一接收器件必须产生一个确认位。主器件必须产生一个与此确认位相关的额外时钟脉冲。注意,如果内部编程周期正在进行,24C04B/08B不产生任何确认位。通过在相对与确认位时钟脉冲的高电平期间拉SDA线为稳定的低电平,器件可完成确认。当然,建立和保持时间必须加以考虑。若不在从器件输出的最后一个字节中产生确认位,主器件必须发一个数据结束信号给从器件。在这种情况下,从器件必须保持数据线为高电平,以保证主器件能
19、产生停止条件。(6)器件寻址与操作控制字节是跟随在主器件发出的开始条件后面,首先收到的字节。控制字节的前四位由四位控制码组成,当控制码为1010时,对24C04B/08B进行读和写操作。控制字节的后面三位是块选择位(B2、B1、B0)。对24C04B/08B而言,B2位无关紧要。对24C04B,B1位无关紧要。主器件利用B1和B0来选择对存储器中那两个或4个256字块进行存取。这些位影响字节地址的最高有效位。控制字节的最后一位(R/W)决定对24C04B/08B进行读或者写操作。当R/W位为“1”时,则进行读操作。当R/W位为“0”时,则进行写操作。在开始条件以后,24C04B/08B进行监视
20、SDA总线,检查发送的控制字节。当检测1010码时,从器件在SDA线上输出一个确认信号。R/W位的状态决定了24C04B/08B将选择进行读操作还是写操作。2、 写操作(1)字节写 主器件发出开始信号以后,主器件再发送四位器件码、三位块地址码、以及逻辑低电平R/W位到总线上。这指示被寻址的从接收器,一个字地址和一个字节的数据将跟在第九个时钟周期期间产生的确认位之后。因此,主器件发送的下一个字节是字地址,并且它将被写入到24C04B/08B的指针。24C04B/08B接收到另一个确认信号后,主器件将发送写入到被寻址的存储器中的数据字节。24C04B/08B再次发出确认信号,同时主器件产生停止条件
21、。这样会启动内部写周期,并且在这段时间内24C04B/08B将不产生确认信号。(2)页面写写控制字节、字地址和第一个数据字节以与字节写相同方式发送到24C04B/08B。但替代产生停止条件,主器件发送多达16个数据字节到24C04B/08B,这些数据字节暂存在片内页面缓存器中,并在主器件发送停止信号以后写入到存储器中。接收到每一字节后,低四位顺序地址指针位在内部加1。高七位顺序字地址保持常数。如果主器件在产生停止条件以前发送多于16个字节的数据,地址计数器将循环,并且先接收到的数据将被覆盖。像字节写操作一样,一旦停止条件被接收到,则内部写周期将开始。(3)写保护当WP端连接到Vcc,24C04
22、B/08B可被用作串行ROM,编程将被禁止,并且整个存储器是写保护的。3.1.3 显示模块的设计显示模块原理图如下:电路设计中74HC164是比较典型的移位寄存器,该移位寄存器有一个数据输入端口、一个时钟信号端口和八个输出端口。如图1-4所示。当时钟信号从低电平变为高电平的时候将输出一个数据到输出端D0,当时钟第二次由低电平变为高电平的时候将输出第二个数据到D0,而第一个数据将转移到D1端口。依此类推,每一个时钟周期中都有一个串行数据输出到D0,而其他的数据则不断往高位移动直到所有数据传输结束。如果不再有时钟周期输入,则这些数据将暂存在输出端。图1-4 74HC164各引脚数码管由8个发光二极
23、管(以下简称字段)构成,数码管管脚如图1-4所示,通过不同的组合可用来显示数字0 9、字符A F、H、L、P、R、U、Y、符号“-”及小数点“.”。数码管的外形结构如图1-5所示。数码管又分为共阴极和共阳极两种结构。图1-5 数码管管脚图数码管工作原理:共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。共阴极数码管
24、的8个发光二极管的阴极(二极管负端)连接在一起。通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。C8051F360单片机外接8片74HC164作为8位LED显示接口,把单片机的P10作为数据输出线,P11作为移位时钟脉冲。74LS164为TTL单向8位移位寄存器,可实现串行输入,并行输出。其中A、B(第1、2脚)为串行数据输入端,2个引脚按逻辑与运算规律输入信号,共一个输入
25、信号时可并接。CLK为时钟输入端,可连接到P11端。每一个时钟信号的上升沿加到CLK端时,移位寄存器移一位,8个时钟脉冲过后,8位二进制数全部移入74LS164中。Q0Q7并行输出端分别接LED显示器的ge各段对应的引脚上。在给出了8个脉冲后,最先进入74LS164的第一个数据到达了最高位,然后再来一个脉冲,第一个脉冲就会从最高位移出,8片74HC164首尾相串,而时钟端则接在一起,这样,当输入8个脉冲时,从单片机P10端输出的数据就进入到了第一片74LS164中了,而当第二个8个脉冲到来后,这个数据就进入了第二片74LS164,而新的数据则进入了第一片74LS164,这样,当第8个8个脉冲完
26、成后,8位数据便显示在八段数码管上了。3.1.4 掉电保护模块的设计存储部分电路原理图如下:存储部分电路如上图,采用AT24C16存储芯片,其具有以下特性特性:(1)与400KHz I2C 总线兼容(2)1.8 到6.0 伏工作电压范围(3)低功耗CMOS 技术(4) 写保护功能当WP 为高电平时进入写保护状态(5) 页写缓冲器(6) 自定时擦写周期(7) 1,000,000 编程/擦除周期(8) 可保存数据100 年(9)8 脚DIP SOIC 或TSSOP 封装图1-7 AT24C16管脚图AT24C16支持C总线数据传送协议,I2C总线协议规定,任何将数据传送到总线的器件作为发送器,任何
27、从总线接收数据的器件为接收器,数据传送是由产生串行时钟和所有起始停止信号的主器件控制的,主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据发送或接收的模式。由于其控制引脚较少,占用单片机口线较少,在少量数据存储中有非常大优势,因为在本设计中,我们只需将校表数据及少量的电能数据存储其中,以做到系统掉电时不丢失数据,免除每次开机时的校表过程,故选用控制引脚简洁的AT24C16将非常的合适。3.2 软件设计3.2.1 软件的总体设计在设计中仅仅只有硬件电路,是完不成我们所设计的功能的,必须有相应的软件配合使用,所以,该设计的软件总体设计有如下几部分:1、显示部分比较直观,又比较容易编程,
28、在遵循由易到难的规律,所以我就先设计电能表的显示部分。2、数据采集程序,是整个设计的核心,特别重要,只有采集的数据是正确地才能进行下一步数据的处理。 3、存储程序也是本设计中的一个重要部分,只有读、写正确了,才能使存储的数据正确,不发生误操作。3.2.2显示模块的软件设计在显示中,我选用的是串入并出芯片74LS164控制的八段数码管的显示。思路:在显示子程序中要有一个判断户数和显示功能的标志位,因为每一户,每一种功能的数据有24位数据,即四个存储单元,要根据这两个标志位来判定所要显示数据的偏移地址。首地址加上偏移地址就得到了所要显示数据的存储地址,然后对数据进行处理显示。在该程序中,要循环显示
29、24户的电能,电压有效值,电流有效值,功率因数。显示子程序的流程图如下图所示。判断是第几户要显示判断是否显示完?开始判断要显示什么功能的数据,调出相应的存储单元的数据 进行BCD码转换显示相应的位未完完成3.2.3采集电路的流程图采集与存储的流程图如图3.2所示。开始写入A、B、C功能寄存器地址读出A、B、C三相寄存器地址中的数据把数据进行存储结束图4.2 采集电能流程图3.2.4总程序流程图 要想实现电能表的各种功能,就必须把各个模块的程序串接在一起,实现设计得要求。无开始有无功能键按下读取相应存储器的值存取读出的数值读取功能键所指的数据读出各功能数据并且存储开定时器,并且设置一个标志位在2
30、4C04中读取要显示的内容进行BCD码转换显示要求的功能时间到?是否有系统的总程序流程图如上图所示。五 结束语经过了两个星期的学习和工作,在各位老师的悉心指导和严格要求下,我终于完成了多用户电能表的设计。在这两个星期的学习与实践中,让我学到了很多在课本上没有的只是,也巩固了对单片机的学习,尝试将学到的知识应用于实践中。在这两周的实践中我意识到,学习和应用是不同的概念,如果只学会了课本上的只是而自己不会应用的话也是没有用的。在今后的学习中,我会努力实践,把学到的知识应用起来,并且要活学活用。这次课程设计对我有很大的帮助,也让我明白了实践和学习是同等重要的。 六 参考文献1 公茂法、黄鹤松、杨学慰
31、等,MCS-51/52单片机原理与实践2罗旭、张彦斌等,单相电子式电能表的特点及其原理,第1期:10-17,2003.3邬宽明,单片机外围器件实用手册数据传输接口器件分册, 北京: 北京航空航天大学出版社,1999年.4张毅坤、陈善久、裘雪红等编著, 单片微型计算机原理及应用, 西安电子科技大学出版社,1998.5马彪 ,基于ADE7757 的公寓电能计量管理系统设计, 第2期:5-8,2001. 6邱关源,电路第四版 ,高等教育出版社,2002. 8公茂法、马宝甫、孙晨等编著,单片机人机接口实例集,北京:北京航空航天大学出版 ,1998.9何立民,MCS51系列单片机应用系统设计,北京:北京
32、航空航天大学出版社,1990.10胡汉才,单片机原理及其接口技术,北京:清华大学出版社, 1996.11钟道昌,单片微处理器多用户电能表, 第12期:1-14, 1999.七 附录附录1硬件原理图 附录2元件清单名称数量标注封装或说明AT89C521U9DIP4074HC1648U1U8 DIP1474HC1652U10-U11DIP16CD405112U12-U23DIP16LM3171LM317TTO-220LED数码管80.5寸高亮红色共阳极附录3源程序: $include (c8051f360.inc) CLK EQU P11;/LED 时钟 DATE EQU P10;/LED 数据
33、PB0 EQU P2.0 PB1 EQU P2.1 PB2 EQU P2.2 PB3 EQU P2.3 PB4 EQU P2.4 PB5 EQU P2.5 PB6 EQU P2.6 PB7 EQU P2.7 ORG 00H LJMP MAIN ORG 0BH LJMP T0_INT ORG 0100H/主程序/MAIN: LCALL CHUSHI LCALL RD01MAIN1: MOV 20H,P2 ; 读取外部P2口状态 MOV TMOD,#01H MOV TH0,#0D5H MOV TL0,#0A0H ; 利用计数器T0读取外部脉冲 SETB ET0 SETB EA SETB TR0BE
34、GIN: MOV R0, #60H MOV R7, #1HLOOP: MOV A,R0 MOV B,#10 DIV AB PUSH ACC MOV A,B LCALL XS;显示个位 POP ACC MOV B,#10 DIV AB PUSH ACC MOV A,B LCALL XS;显示十位 POP ACC MOV B,#10 DIV AB PUSH ACC MOV A,B LCALL XS;显示百位 POP ACC MOV B,#10 DIV AB PUSH ACC MOV A,B LCALL XS;显示千位 MOV A,#10 LCALL XS;显示 MOV A,R7 LCALL XS;
35、显示户名 LCALL XS LCALL XS INC R0 INC R7 LCALL DELAY CJNE R7, #9, LOOP LCALL WR01 LJMP BEGIN/初始化程序/CHUSHI: /MOV SFRPGEN,#01H MOV SFRPAGE,#0FH MOV P1MDIN,#0FFH MOV P1MDOUT,#0EFH ;推挽输出 MOV XBR1,#40H ;交叉开关使能 MOV PCA0MD,#00H ;关闭看门狗clear Watchdog Enablei /MOV FLKEY,#0a5H MOV PSCTL,#13H MOV OSCICN,#83H ;内部振荡器
36、允许,不分频 RET/中断子程序/T0_INT: MOV TH0, #0D5H MOV TL0, #0A0H PUSH ACC MOV A, 20H MOV 20H, P2 JNB ACC.0, BJ1 NEXT1: JNB ACC.1, BJ2 ;判断外部脉冲的状态 NEXT2: JNB ACC.2, BJ3 ;判断外部脉冲的状态 NEXT3: JNB ACC.3, BJ4 ;判断外部脉冲的状态 NEXT4: JNB ACC.4, BJ5 ;判断外部脉冲的状态 NEXT5: JNB ACC.5, BJ6 ;判断外部脉冲的状态 NEXT6: JNB ACC.6, BJ7 ;判断外部脉冲的状态
37、NEXT7: JNB ACC.7, BJ8 ;判断外部脉冲的状态 JMP DONE BJ1: JB PB0,ADD1 ;与原来外部的状态进行比较 JMP NEXT1 ;若相等则继续读外部状态 BJ2: JB PB1,ADD2 ;若不等则相应的用户的脉冲数加一 JMP NEXT2 BJ3: JB PB2,ADD3 JMP NEXT3 BJ4: JB PB3,ADD4 JMP NEXT4 BJ5: JB PB4,ADD5 JMP NEXT5 BJ6: JB PB5,ADD6 JMP NEXT6 BJ7: JB PB6,ADD7 JMP NEXT7 BJ8: JB PB7,ADD8 JMP DONE
38、 ADD1: INC 60H JMP NEXT1 ADD2: INC 61H JMP NEXT2 ADD3: INC 62H JMP NEXT3 ADD4: INC 63H JMP NEXT4 ADD5: INC 64H JMP NEXT5 ADD6: INC 65H JMP NEXT6 ADD7: INC 66H JMP NEXT7 ADD8: INC 67H DONE:POP ACCRETI/显示子程序/-显示子程序-XS: PUSH ACC MOV DPTR,#TAB MOVC A,A+DPTR MOV R4,#08hRR1: RRC A JC SET1 JNC SET0SET1: CLR CLK SETB DATE SETB CLK DJNZ r4,RR1 JMP RETURNSET0: CLR CLK CLR DATE