附录水表源程序Word文档下载推荐.docx

上传人:b****2 文档编号:5911872 上传时间:2023-05-05 格式:DOCX 页数:24 大小:19.28KB
下载 相关 举报
附录水表源程序Word文档下载推荐.docx_第1页
第1页 / 共24页
附录水表源程序Word文档下载推荐.docx_第2页
第2页 / 共24页
附录水表源程序Word文档下载推荐.docx_第3页
第3页 / 共24页
附录水表源程序Word文档下载推荐.docx_第4页
第4页 / 共24页
附录水表源程序Word文档下载推荐.docx_第5页
第5页 / 共24页
附录水表源程序Word文档下载推荐.docx_第6页
第6页 / 共24页
附录水表源程序Word文档下载推荐.docx_第7页
第7页 / 共24页
附录水表源程序Word文档下载推荐.docx_第8页
第8页 / 共24页
附录水表源程序Word文档下载推荐.docx_第9页
第9页 / 共24页
附录水表源程序Word文档下载推荐.docx_第10页
第10页 / 共24页
附录水表源程序Word文档下载推荐.docx_第11页
第11页 / 共24页
附录水表源程序Word文档下载推荐.docx_第12页
第12页 / 共24页
附录水表源程序Word文档下载推荐.docx_第13页
第13页 / 共24页
附录水表源程序Word文档下载推荐.docx_第14页
第14页 / 共24页
附录水表源程序Word文档下载推荐.docx_第15页
第15页 / 共24页
附录水表源程序Word文档下载推荐.docx_第16页
第16页 / 共24页
附录水表源程序Word文档下载推荐.docx_第17页
第17页 / 共24页
附录水表源程序Word文档下载推荐.docx_第18页
第18页 / 共24页
附录水表源程序Word文档下载推荐.docx_第19页
第19页 / 共24页
附录水表源程序Word文档下载推荐.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

附录水表源程序Word文档下载推荐.docx

《附录水表源程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《附录水表源程序Word文档下载推荐.docx(24页珍藏版)》请在冰点文库上搜索。

附录水表源程序Word文档下载推荐.docx

WQT_HEQU36H;

总用水量存储单元,此为高字节

WQT_MEQU37H;

总用水量存储单元,此为中字节

WQT_LEQU38H;

总用水量存储单元,此为低字节

C_DE1EQU39H;

暂存片外EEPROM中用户信息,用户码3字节,此

为高字节

C_DE2EQU3AH;

用户码3字节,此为中字节

C_DE3EQU3BH;

用户码3字节,此为低字节

C_RDEQU3CH;

读卡条件

IC_DE1EQU3DH;

暂存IC卡用户信息,用户码3字节,此为高字节

IC_DE2EQU3EH;

IC_DE3EQU3FH;

用户码3字节,此为低字节

IC_RDEQU40H;

W_HIEQU41H;

剩余水量存储单元,此为高字节

W_LOWEQU42H;

剩余水量存储单元,此为低字节

B_HIEQU43H;

本次暂存购买水量存储单元,此为高字节

B_LOWEQU44H;

本次暂存购买水量存储单元,此为低字节

MEQU45H;

测得脉冲数存储单元

NEQU46H;

设定的转数值

显示存储单元定义如下:

SFWEQU47H;

十分位

GWEQU48H;

个位

SWEQU49H;

十位

BWEQU4AH;

百位

QWEQU4BH;

千位

WWEQU4CH;

万位

片外EEPROM分配如下:

EE1Q_LEQU01H;

第一剩余水量存储单元,此为低字节

EE1Q_HEQU02H;

第一剩余水量存储单元,此为高字节

EE_W_HEQU03H;

EE_W_MEQU04H;

EE_W_LEQU05H;

C_0DE1EQU06H;

用户码3字节,此为高字节

C_0DE2EQU07H;

C_0DE3EQU08H;

EEC_RDEQU09H;

原读卡条件标志单元

EE2Q_LEQU10H;

第二剩余水量存储单元,此为低字节

EE2Q_HEQU11H;

第二剩余水量存储单元,此为高字节

E_MEQU12H;

E_NEQU13H;

C_0GAIEQU14H;

拆盖标志

下列各信息读自IC卡:

READ_FEQU01H;

读IC卡标志,如不等于0,则说明IC卡未被

读过

USER1EQU02H;

USER2EQU03H;

USER3EQU04H;

USER_RDEQU05H;

原读卡条件

WQ_HEQU06H;

购水总量,此为高字节

WQ_LEQU07H;

购水总量,此为低字节

函数名:

主程序

功能:

主要完成系统的初始化,水量判断及关阀操作,进入睡眠状态处理。

ORG0003H;

INT0中断入口

AJMPDO_INT0

ORG0013H;

INT1中断入口

AJMPDO_INT1

ORG0000H

AJMPSTART

ORG0030H

START:

MOVSCON,#10H;

串行口初始化(方式0)

MOVIP,#01H;

定义中断优先级

MOVTCON,#04H;

一个为跳变触发,一个为电平触发

SETBP3.2;

置P3.2,P3.3为输入状态

SETBP3.3

ACALLR_EEP;

调用子程序,从EEPROM中读有关信息

JZF_KEY,DO_F;

防拆卸

JZV_MONI,DO_V;

电池电压检测线

JZOPEN_D,DIS_P;

JZSW_T,DO_KA;

有卡插入

JZW_IN,DO_INT0;

有流量传感器信号

MOVA,W_HI;

剩余水量高字节赋给A

JNZSLEEP;

不等于0,则进入睡眠状态

MOVA,W_LOW;

剩余水量低字节赋给A

JZG_FA;

剩余水量,关闭阀门

CLRC

SUBBA,#50

JNCSLEEP;

剩余水量大于5吨,则进入睡眠状态

SETBC_LOW;

剩余水量过低标志

ACALLALARM;

调用报警子程序

MOVIE,#85H;

允许外部中断0和外部中断1

SLEEP:

MOVPCOM,#01H;

进入待机方式

INT0中断子程序

用于处理0.1m3传感脉冲。

处理的事务有:

(1)剩水总数减1,并写入EEPROM相应单元;

(2)用水总数加1,并写入EEPROM相应单元;

(3)根据条件设置剩水不多了等标志位C_LOW;

(4)适当时候产生报警。

DO_INT0:

PUSHPSW;

有关单元内容进栈

PUSHACC

PUSHB

INCM

DJNZM,N,RETI;

脉冲数与设定转数不相等则中断返回

DECW_LOW;

剩余水量减1

MOVA,W_HI

SUBBA,#0

MOVW_HI,A

CLCC

INCWQT_L;

总用水量加1

MOVA,WQT_M

ADDCA,#0

MOVWQT_M,A

MOVA,WQT_H

MOVWQT_H,A

AJMPW_EEP1;

保存剩余水量

AJMPW_EEP2;

保存总用水量

剩余水量等于5m3,则报警提示

POPPSW;

有关单元内容出栈

POPACC

POPB

SETBET0;

开中断

SETBEA

RETI

INT1中断子程序

根据4种不同的情况进行相应的中断处理。

(1)当水表被拆卸时,报警并保存必要数据,并关阀门;

(2)当电池欠压或取出电池时,保存必要数据并关阀门;

(3)当按钮按下时,调用显示;

(4)当有IC卡插入时,进入IC卡处理子程序。

DO_INT1:

PUSHB

SETBET1;

SETBEA

POPACC

POPB

DO_V:

ACALLW_EEP;

保存必要数据到EEPROM

ACALLG_FA

RET

DO_F:

ACALLR_EEP1;

SETBC_GAI;

将拆卸标志置1

SETBP1.4;

P1.4置1.蜂鸣器产生报警

ACALLDELAY_10S;

延时10秒

CLRP1.4;

关报警

ACALLG_FA

G_FA:

MOVA,F_OPEN

JZRET

CLRP1.1

SETBP1.1

ACALLDELAY_2S;

延时2秒

CLRP1.1;

P1.1输出一个高电平脉冲,关闭阀门

CLRF_OPEN;

阀门关闭标志

EEPROM读写子程序

读写剩余水量、总用水量、用户信息与密码等。

R_EEP:

读有关信息

读剩余水量

ACALLR_EEP2;

读总用水量

ACALLR_EEP3;

读用户信息和密码

ACALLR_EEP4;

读测得脉冲数与设定的转速值

W_EEP:

保存有关信息

ACALLW_EEP1;

写剩余水量

ACALLW_EEP2;

写总用水量

ACALLW_EEP3;

写标志位

ACALLW_EEP4;

写测得脉冲数

R_EEP1:

MOVSP,#60H;

设置堆栈

SCLBITE_SCL

SDABITE_SDA

MOVR4,W_HI;

片内地址,剩余水量高字节

MOVR1,EE1Q_L;

欲读数据存放地址指针,剩余水量高字

MOVR7,2;

连续读字节数

MOVAddress,R1

MOVI2CData,R4

CALLI2C_READ;

读入数据

R_EEP2:

MOVR4,WQT_H;

片内地址,总用水量高字节

MOVR1,EE_W_H;

欲读数据存放地址指针,总用水量高字

MOVR7,3;

R_EEP3:

读片内用户信息和密码

MOVR4,C_DE1;

片内地址,用户信息高字节

MOVR1,C_ODE1;

欲读数据存放地址指针,用户信息高字

MOVR7,4;

R_EEP4:

读测得脉冲数和设定的转速值

SDABITE_SDA

MOVR4,M;

片内地址,测得脉冲数

MOVR1,E_M;

欲读数据存放地址指针,测得脉冲数

W_EEP1:

欲写数据存放地址指针,剩余水量高字

连续写字节数

CALLI2C_WRITE;

写入数据

W_EEP2:

欲写数据存放地址指针,总用水量高字

W_EEP3:

MOVR4,C_GAI;

片内地址,标志位地址

MOVR1,C_OGAI;

欲写数据存放地址指针,标志位地址

MOVR7,1;

MOVI2CData,R1

MOVI2C_WRITE;

RET

W_EEP4:

片内地址,测得脉冲数地址

欲写数据存放地址指针,测得脉冲数

地址

I2C_WRITE:

写子程序

I2C_WRITE_A:

LCALLI2C_START

MOVA,#10100000B

LCALLI2C_SEND8BIT

LCALLI2C_ACK

JCI2C_WRITE_A;

=1表示无确认,再次发送

MOVA,Address

MOVA,I2CData

INCR1

DJNZR7,I2C_WRITE_A;

连续写n个字节

LCALLI2C_STOP

I2C_READ:

读子程序

I2C_READ_A:

JCI2C_READ_A;

I2C_READ_B:

MOVA,#10100001B

JCI2C_READ_B

LCALLI2C_RECEIVE8BIT

MOVI2CData,A

连续读n个字节

I2C_START:

发送开始信号

SETBSCL

SETBSDA

NOP

NOP

CLRSDA

CLRSCL

I2C_STOP:

发送结束信号

I2C_ACK:

发送接收确认信号

JBSDA,I2C_ACK0

SJMPI2C_ACK_END

I2C_ACK0:

SETBC

I2C_ACK_END:

I2C_SEND8BIT:

送八位数据

MOVB,#08H

I2C_SEND8BIT_A:

RLCA

MOVSDA,C

DJNZB,I2C_SEND8BIT_A

I2C_RECEIVE8BIT:

接收八位数据

CLRA

I2C_RECEIVE8BIT_A:

MOVC,SDA

DJNZB,I2C_RECEIVE8BIT_A

IC卡插卡处理子程序

进行IC卡类型判断、有效性判断和IC卡读写等。

DO_KA:

JBMG_CARD,DO_MG;

管理卡?

MOVR2,#4

JBUS_CARD,DO_US;

用户卡?

DO_MG:

CLCC_GAI;

清拆盖标志

DO_US:

DJNZR2,ERROR;

核对用户信息和密码三次有误跳出

LCALLR_US;

调出用户信息

MOVR5,#4

US_LOOP:

CJNEC_0DE1,IC_DE1,DO_US;

用户信息不相等则再次核对

INCC_0DE1

INCIC_DE1

DJNZR5,US_LOOP

DJNZREAD_F,ERROR;

READ_F为1则该卡已读,跳出

ACALLG_CHU;

有效性判断合格,调用本次购买处

理程序

G_CHU:

本次购买处理程序

ACALLR_IC;

读本次购买水量

ACALLJIA;

本次购买水量与剩余水量相加

ACALLW_IC;

写已读标志位

JIA:

相加子程序

PUSHACC;

将A中内容进栈保护

MOVR0,W_HI;

将剩余水量存储单元高字节送R0

MOVR1,B_HI;

将本次暂存购买水量存储单元高字

节送R1

MOVA,@R0;

被加数低字节内容送给A

MOVA,@R1;

低字节

MOV@R0,A;

低字节和存W_HI

INCR0;

指向被加数高位字节

INCR1;

指向加数高位字节

被加数高位字节送给A

ADDCA,@R1;

高字节数相加

高字节数和存W_LOW

R_US:

读用户信息

SCLBITIC_SCL

SDABITIC_SDA

MOVR4,IC_DE1;

片内地址,存放用户信息

MOVR1,USER1;

欲读数据存放地址指针,用户信息

MOVR7,#4;

R_IC:

MOVR4,B_HI;

片内地址,购买水量高字节

MOVR1,WQ_H;

欲读数据存放地址指针,购买水量

高字节

MOVR7,#2;

W_IC:

MOVR4,READ_F;

片内地址,标志位

MOVR1,#01H;

欲写数据

MOVR7,#1;

ERROR:

LJMPSLEEP

显示子程序

实现对剩余水量和总用水量的显示。

DIS_P:

ACALLDELAY_10MS;

延时,确认

JNZOPEN_D,RET;

确认按钮按下则调用显示

ACALLDIS_1P;

调用显示剩余水量子程序

DIS_1P:

显示剩余水量

MOVDMbuffer,W_LOW

MOVR1,#4

LOOP_1P:

循环扫描显示

ACALLDIS_3P

JNZOPEN_D,LOOP_1P;

有按钮按下则显示总用水量

JZOPEN_D,DIS_2P;

确认按钮按下则调用显示总用水量

ACALLLOOP_1P

DIS_2P:

显示总用水量

MOVDMbuffer,WQT_L

MOVR1,#6

LOOP_2P:

JNZOPEN_D,LOOP_2P;

有按钮按下则关闭显示

JZOPEN_D,RET;

确认按钮按下则关闭显示

ACALLLOOP_2P

DIS_3P:

MOVSCON,#00H;

初始化

CLRES

CLRIE

MOVR0,#DMbuffer

MOVWMbuffer,#0FEH

MOVDPTR,#TABLE

DLOOP:

MOVA,WMbuffer;

送位码

MOVSBUF,A

JNBTI,S

CLRTI

送段码

ACALLH_BCD;

16进制转化为BCD码

MOVCA,@A+DPTR

CPLA;

将共阳极的段码取反

JNBTI,$

延时10MS

MOVA,WMbuffer

RLA

MOVWMbuffer,A

INCR0

DJNZR1,DLOOP;

显示下一位

H_BCD:

16进制转化为BCD码子程序

MOVB,#100;

分离出百位,存放在R3中

DIVAB

MOVR3,A

MOVA,#10;

余数继续分离十位和个位

XCHA,B

SWAPA

ORLA,B;

将十位和个位拼装成BCD码

TABLE:

共阳

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2