当前位置:文档之家› 基于单片机的IC卡智能水表源代码

基于单片机的IC卡智能水表源代码

基于单片机的IC卡智能水表源代码作者:清华大学杨家沛;**************************************************************************;本系统所用CPU:PIC16F84;;采用外接RC经济阻容振荡方式:R=100K C=100P;时钟频率约72KHz;机器周期约56us;************************************************************************** INCLUDE “PIC 84.H”;PIC84头文件;**************************************************************************;液晶显示命令字定义;************************************************************************** SYSDIS EQU B'00000000' ;关闭液晶系统振荡和偏振命令字SYSEN EQU B'00000001' ;打开液晶系统振荡LCD ON EQU B'00000011' ;打开液晶偏振发生器BIAS 1 EQU B'00100000' ;液晶显示方式命令字;**************************************************************************;PIC I/O口线输入输出方式定义字;**************************************************************************O RB EQU B'01000110' ;RB口输出状态定义字;输出状态:RB0,RB3,RB4,RB5,RB7均为输出,RB1,RB2,RB6为输入;I RB EQU B'01100110' ;RB口输入状态定义字;输入状态:RB0,RB3,RB4,RB7为输出,RB1,RB2,RB5,RB6为输入;0 RA EQU B'11110000' ;RA口定义字;RA4为输入,低4位均为输出;**************************************************************************;各口线作用定义;**************************************************************************SWCH1 EQU RA2 ;开阀控制,低电平有效SWCH2 EQU RB0 ;关阀控制,低电平有效S VOLT EQU RB7 ;IC卡电源地控制(即控制IC卡座电源),低电平有效SDA EQU RA4 ;IC卡串行数据线(双向)SCL EQU RB4 ;IC卡时钟线S T EQU RB6 ;IC卡插卡检测线.=1 表明IC卡已插入SPK EQU RB3 ;蜂鸣器控制,高电平蜂鸣V_MONI EQU RB2 ;电池电压检测线.=1,说明电池电压正常,否则说明过低WR EQU RA1 ;液晶显示时钟输出,正跳变有效DATA EQU RA0 ;液晶串行数据输出,=1,为0;=0,为1CS EQU RA3 ;液晶片选控制,高电平有效(同时控制水脉冲,和IC卡)W IN EQU RB1 ;0.1m3脉冲输入线(负跳变有效)F KEY EQU RB5 ;作为防拆表输入线;**************************************************************************;IC84通用寄存器定义(共有68个):地址为0CH—4FH;**************************************************************************XDATA EQU 0CH ;通用数据暂存单元CON1 EQU 0DH ;循环条件暂存单元CON2 EQU 0EH ;循环条件暂存单元CON3 EQU 0FH ;循环条件暂存单元CON4 EQU 10H ;循环条件暂存单元FLAG EQU 11H ;通用标志字节(各位意义见后)DFLG EQU 12H ;液晶显示标志字节(各位意义见后)DA1 DSP EQU 13H ;液晶显示高2位(BCD码)DA2 DSP EQU 14H ;液晶显示低2位(BCD码)L CON EQU 15H ;循环控制,如果=10 则读卡SW DL EQU 16H ;关阀延时数T CON EQU 17H ;FUNCTION KEY TEST COUNT(NO USE)ST FLG EQU 18H ;W CRC EQU 18HS0 EQU 2FH ;十六进制->十进制(BCD)中十六进制数暂存S1 EQU 2EH ;R0 EQU 13H ;转换后的BCD(4位)暂存R1 EQU 14HXDATA1 EQU 1AHXDATA2 EQU 1BHCON5 EQU 19HXDAT EQU 1CHF ST1 EQU 35H ;机器开始标志单元(正确的开始标志值为55HF ST2 EQU 36H ;以及0AAH)RANDHI EQU 4AH ;加密用随机数高字节RANDL0 EQU 4BH ;加密用随机数低字节;**************************************************************************;下列文件寄存器用来比较用户码及M1码;**************************************************************************F VAL EQU 37H ;电磁阀开关标志WQT H EQU 27H ;以下3单元为用水总量存储单元,此为高字节WQT M EQU 38H ;中字节WQT L EQU 39H ;低字节C RD EQU 3AH ;读卡条件W HI EQU 3BH ;以下2单元是剩水总量存储单元,此为高字节W LOW EQU 3CH ;低字节EFLG EQU 3DH ;写片内EEPROM剩水单元选择标志. 0选EEQ1,;否则选EEQ2;**************************************************************************;读IC卡标志;**************************************************************************READ F EQU 3EH ;如不等于0,则说明IC卡未被读过;**************************************************************************;下列各信息读自IC卡;**************************************************************************USER1 EQU 3FH ;用户码3字节,高USER2 EQU 40H ;中USER3 EQU 41H ;低M1 H EQU 42H ;M1码3字节高M1 M EQU 43H ;中M1 L EQU 44H ;低C RD0 EQU 45H ;原读卡条件YEAR EQU 46H ;年MON EQU 47H ;月DAY EQU 48H ;日HOUR EQU 49H ;时M2 H EQU 4AH ;M2码3字节M2 M EQU 4BH ;M2 L EQU 4CH ;WQ H EQU 4DH ;购水总量,高字节WQ L EQU 4EH ;低字节R CRC EQU 4FH ;校验码;**************************************************************************;液晶显示标志字节(12H),各位定义如下;**************************************************************************F WQF EQU 0H ;传感脉冲处理否标志位. =1,说明已被处理;否则,未处理READED EQU 1H ;读卡标志位. =1,说明IC卡已读F T C EQU 2H ;是工厂测试用IC卡否标志位.=1,说明是测试用IC卡F S T EQU 3H ;暂时未用AN KEY EQU 4H ;暂时未用F OFF EQU 5H ;暂时未用C LOW 2 EQU 6H ;暂时未用S OPEN EQU 7H ;显示开阀标志位.=1,说明开阀;=0,则显示关阀;**************************************************************************;标志字节(11H),各位定义如下;**************************************************************************F T EQU 0H ;小数点闪烁标志位.=1,则点亮小数点;=0则不显示CARD ON EQU 1H ;插卡标志位.=1,说明有IC卡F WQ EQU 2H ;干簧传感开关闭合标志位(即用水).=1,说明闭合F VL EQU 3H ;电池电压过低标志位.=1,说明过低SW OPEN EQU 4H ;阀门已开否标志.=1说明阀已开;关C LOW EQU 5H ;剩水总量过低标志位.=1,说明过低C NUL EQU 6H ;已无剩水标志位。

=1,说明已无剩水C LOW 1 EQU 7H ;剩水已到关阀警告点标志.=1,说明要告警;即:先关阀10秒后开阀;**************************************************************************;PIC84片内EEPROM分配(64字节,地址为00H—3FH);**************************************************************************EEPR EQU 1H ;选择片内剩水总量存储单元.=00,选EE1Q;否则,选EE2Q EE1Q L EQU 2H ;第一剩水总量存储单元,此为低字节EE1Q H EQU 3H ;高字节EE W H EQU 4H ;用水(购水)总量存储单元. 高字节EE W M EQU 5H ;中字节EE W L EQU 6H ;低字节EE VAL EQU 7H ;SAVE VALVE NO CLOSE FLAG(ERROR VALUE 0CCH)EE TEST EQU 8H ;使用工厂测试卡标志.=01,说明可使用测试卡C 0DE EQU 9H ;用户码(三字节)EM1 EQU 0CH ;M1码(三字节)EEC RD EQU 0FH ;原读卡条件标志单元EE2Q L EQU 10H ;第二剩水总量存储单元(两字节)EE2Q H EQU 11H;**************************************************************************;所用IC卡单元定义;**************************************************************************E2400 EQU 00H ;VALVE ERROR FLAGE2401 EQU 01H ;用水总量存储单元,这里只有中单元,低单元E2403 EQU 03H ;CONT READ CARDE2404 EQU 04H ;L,H WQ DATA FOR USE,EFLGE2407 EQU 07H ;此IC卡已读标志.=00,说明此卡上数据已读走,否则未读E2408 EQU 08H ;用户码存储单元(三字节)E240B EQU 0BH ;M1码存储单元(三字节)E240E EQU 0EH ;原读卡条件存储单元E240F EQU 0FH ;年,月,日,时(各一字节)E2413 EQU 13H ;M2码存储单元(三字节)E2416 EQU 16H ;剩水(购水)总量存储单元,高字节在先,低字节在后E2418 EQU 18H ;CRC校验字节存储单元LIST F=INHX8M,P=16F84,R=HEX0RG 0B START ;复位后从START处开始执行程序;**************************************************************************;以下程序:用于处理0.1m3传感脉冲。

相关主题