📄 waterm2.asm
字号:
;*******************************************;
; Author:David zhang ;
; Date: 2004-10-13 ;
; the water_pos control program ;
; use the mcu AT89C52 ;
; or the mcu AT89S52 ;
; or the mcu AT89C55(WD) ;
; the at89c2051 use the id_2051.asm ;
; updata: 2004-10-21 ;
; 本程序为计流量方式,计量单位为x哩/升 ;
; 初始单价为:10哩/升 ;
; Describe: ASM51 ;
; 用户名称: 高淳漆桥中学 ;
;*******************************************;
org 0000h ;
;*******************************************;
;the special register define zero ;
;*******************************************;
send equ p1.0 ;红外开关
recieve equ p1.1
wp equ p1.4
scl1 equ P1.5
sda1 equ P1.6
watchdog equ p1.7
ser equ P2.0
srclk equ p2.1
rrclk equ P2.2
plusa equ P2.3
plusb equ P2.4
cm_a equ p2.5
cm_b equ p2.6
re184 equ p3.2
beep equ p3.6
r2051 equ p3.5
;*******************************************;
; bit define zero ;
;*******************************************;
f_plusa bit 00h
f_plusb bit 01h
lastplusa bit 02h
lastplusb bit 03h
f_iic bit 04h
f_zh bit 05h
f_com bit 06h
f_master bit 07h
f_status bit 08h
f_sal bit 09h
f_60ms bit 0ah
f_id bit 0bh
f_card bit 0ch
f_erra bit 0dh
f_card0 bit 0eh
f_expence bit 0fh
f_updata bit 10h
f_kguan0 bit 11h
f_kguan1 bit 12h
f_money bit 13h
f_time bit 14h
f_kguan2 bit 15h
;******************************
;valible define
;******************************
icdata equ 08h ;FM24-16从指定地址读写
icadd_h equ 09h
icadd_l equ 0ah
money_h equ 0bh ;金额的高字节
money_x equ 0ch
money_l equ 0dh
expence_h equ 0eh ;消费额高字节
expence_x equ 0fh
expence_l equ 10h
liuliang_h equ 11h ;流量高字节
liuliang_x equ 12h
liuliang_l equ 13h
rate equ 14h ;单价
;=================================
money_hbcd equ 15h ;未用
money_xbcd equ 16h ;未用
money_lbcd equ 17h ;未用
;==================================
dispbuf0 equ 18h ;显示缓冲区
dispbuf1 equ 19h
dispbuf2 equ 1ah
dispbuf3 equ 1bh
dispbuf4 equ 1ch
dispbuf5 equ 1dh
address equ 1eh ;本机地址
rega equ 1fh
;*******************;
length equ 23h ;和管理机通信的数据长度
pf equ 24h ;校验和
ricon equ 25h ;和管理机通信接受存储指针
rimod1 equ 26h
master equ 27h ;管理机地址存放单元
status equ 28h ;POS功能状态存放单元
Inline_Or_Offline_Count equ 29h
sendnum equ 2ah ;发送字节数
ricon1 equ 2bh
error equ 2ch
Request_Information_Count equ 2dh
Card_On_Or_Off_Count equ 2eh
rimod2 equ 2fh
idnum0 equ 30h ;卡号
idnum1 equ 31h
idnum2 equ 32h
idnum3 equ 33h
idnum4 equ 34h
idnum5 equ 35h
;=========================
assic0 equ 36h
assic1 equ 37h
assic2 equ 38h
assic3 equ 39h
assic4 equ 3ah
assic5 equ 3bh
assic6 equ 3ch
assic7 equ 3dh
assic8 equ 3eh
assic9 equ 3fh
assic10 equ 40h
assic11 equ 41h
;==========================
ricon2 equ 42h ;接受卡号的存储指针
sicon equ 43h
sicon0 equ 44h
sal_time equ 45h
rimod equ 46h
sicon1 equ 47h
rrx equ 48h
rrx0 equ 49h
rrx1 equ 4ah
rrx3 equ 4bh
sdispbuf0 equ 50h
sdispbuf1 equ 51h
sdispbuf2 equ 53h
dmoney_h equ 54h
dmoney_x equ 55h
dmoney_l equ 56h
daddr_h equ 57h
daddr_l equ 58h
rcount equ 59h
kgcount equ 5ah
salecount equ 5bh
disp_time equ 5ch
rrx4 equ 5dh
r_sp equ 60h
recievebuf equ 0a0h
sendbuf equ 0c0h
salbuf equ 0e0h
;********************************
;const define zero
;********************************
;=========================
; 出错信息处理
;=========================
err0 equ 0
err1 equ 1
err2 equ 2
err3 equ 3
err4 equ 4
err5 equ 5
err6 equ 6
err7 equ 7
err8 equ 8
err9 equ 9
err10 equ 10
err11 equ 11
err12 equ 12
err13 equ 13
err14 equ 14
err15 equ 15
;==========================
;==========================
bn equ 12 ;ID卡送字节数
;==========================
;==========================
;铁电信息
;==========================
fm_flag0 equ 0000h ;铁电中的系统标志
fm_master equ 0001h ;铁电中的管理器地址
fm_addr equ 0002h ;铁电中的本机地址
fm_status equ 0003h ;铁电中的功能状态
sal_rate equ 0010h
sal_flag equ 0011h
sal_beg equ 0012h
sal_end equ 0013h
fm_buf equ 0100h
;===========================
;===========================
baud equ 0f4h ;//ff:fd ff:fa ff:f7 ff:f4 ff:ee ff:dc
; 115200 57600 38400 28800 19200 9600
ljmp main
org 0003h
ljmp main
org 000bh
ljmp del_timer0
;******************************
;与读卡头通信通过2051转换成并口
;*****************************
org 0013h
ljmp int_1
org 001bh
ljmp _timer11
;*********************************
;和集线器通信波特率57600
;*********************************
org 0023h
push psw
push acc
push dph
push dpl
push 00h
push b
jbc ri,r_ceive
r_send: clr ti ;发送数据
mov a,sendnum
jz r_send0
mov r0,sicon
mov a,@r0
mov sbuf,a
inc sicon
dec sendnum
ljmp r_send1
r_send0:clr re184
r_send1:ljmp d_reti
;**********************************
;多机通信下的接受数据状态
;**********************************
r_ceive:
mov rega,sbuf
clr ri
mov a,rimod
anl a,#07h
rl a
add a,rimod
mov dptr,#ritab
jmp @a+dptr
ritab: ljmp r_mod0
ljmp r_mod1
ljmp r_mod2
ljmp r_mod3
ljmp r_mod4
ljmp r_mod4
ljmp r_mod4
;****************************
;第一字节是否为pos机号
;****************************
r_mod0: mov a,rega
cjne a,address,r_mod00
clr sm2
inc rimod
r_mod00:ljmp d_reti
;****************************
;第二字节为数据长度
;****************************
r_mod1: mov a,rega
mov pf,a
clr c
subb a,#02h
mov length,a
mov ricon,#recievebuf
inc rimod
ljmp d_reti
;***************************
;接收数据部分
;***************************
r_mod2: mov a,rega
mov r0,ricon
mov @r0,a
inc ricon
add a,pf ;处理校验和
mov pf,a
djnz length,r_mod20
inc rimod
r_mod20:ljmp d_reti
;**************************
;接收校验和
;**************************
r_mod3:
mov a,rega
cjne a,pf,r_mod30
mov ricon,#recievebuf
mov r0,ricon
mov a,@r0
anl a,#07h
inc ricon
mov rrx3,a
rl a
add a,rrx3
mov dptr,#ritab1
jmp @a+dptr
ritab1: ljmp r_mod30
ljmp r_mod31
ljmp r_mod32
ljmp r_mod33
ljmp r_mod34
ljmp r_mod35
ljmp r_mod36
;***********************
;***********************
r_mod30:nop
ljmp r_mod4
;***********************
;功能号为01h
;为轮循命令
;***********************
r_mod31: mov a,status
mov r0,ricon
inc ricon
mov b,@r0
cjne a,b,r_mod310
r_mod312:mov a,master
mov r0,ricon
mov b,@r0
cjne a,b,r_mod311
ljmp r_mod313
r_mod310:mov status,b
setb f_status
ljmp r_mod312
r_mod311:mov master,b
setb f_master
r_mod313:setb f_com
mov Inline_Or_Offline_Count,#0
;*******************************;
;轮循状态下是否有帐户请求标志 ;
; ;
;第一优先级为帐户申请 ;
;*******************************;
jnb f_zh,r_mod36
mov sicon1,#sendbuf ;写帐户申请数据
mov r0,sicon1
mov @r0,#09h
inc sicon1
mov r0,sicon1
mov @r0,#02h
mov pf,#0bh
inc sicon1
mov r0,sicon1
mov @r0,address
inc sicon1
mov a,pf
add a,address
clr c
mov pf,a
mov r0,sicon1
mov @r0,idnum0
inc sicon1
mov a,pf
add a,idnum0
clr c
mov pf,a
mov r0,sicon1
mov @r0,idnum1
inc sicon1
mov a,pf
add a,idnum1
clr c
mov pf,a
mov r0,sicon1
mov @r0,idnum2
inc sicon1
mov a,pf
add a,idnum2
clr c
mov pf,a
mov r0,sicon1
mov @r0,idnum3
inc sicon1
mov a,pf
add a,idnum3
clr c
mov pf,a
mov r0,sicon1
mov @r0,idnum4
inc sicon1
mov a,pf
add a,idnum4
clr c
mov pf,a
mov r0,sicon1
mov @r0,pf
mov sendnum,#09h
mov sicon,#sendbuf
setb ti
setb re184
nop
nop
nop
nop
nop
nop
nop
ljmp r_mod4
;*********************************
;是否有消费发送数据
;*********************************
r_mod36: jnb f_sal,r_mod37
push 01h
mov sicon1,#sendbuf
mov r0,sicon1
mov @r0,#11h
inc sicon1
mov r0,sicon1
mov @r0,#03h
inc sicon1
mov r0,sicon1
mov pf,#14h
mov r1,#salbuf
mov rrx,#14
r_mod360:mov a,@r1
inc r1
mov @r0,a
inc r0
add a,pf
mov pf,a
djnz rrx,r_mod360
mov @r0,pf
mov sendnum,#11h
mov sicon,#sendbuf
setb ti
setb re184
nop
nop
nop
nop
nop
nop
pop 01h
ljmp r_mod4 ;写消费发送数据
;*******************************************
;空闲应答
;*******************************************
r_mod37: mov sicon1,#sendbuf ;写普通应答数据
mov r0,sicon1
mov @r0,#05h
inc sicon1
mov r0,sicon1
mov @r0,#01h
inc sicon1
mov pf,#06h
mov r0,sicon1
mov @r0,address
inc sicon1
mov r0,sicon1
mov a,pf
add a,address
mov pf,a
mov @r0,status
inc sicon1
mov r0,sicon1
mov a,pf
add a,status
mov pf,a
mov @r0,pf
mov sendnum,#05h
mov sicon,#sendbuf
setb ti
setb re184
nop
nop
nop
nop
nop
nop
ljmp r_mod4
;**********************************
;功能号为0x2
;请求到指定id号信息
;**********************************
r_mod32: clr f_zh
ljmp r_mod4
;*********************************
;功能号为0x3
;时间更新信息
;*********************************
r_mod33: nop
ljmp r_mod4
;*********************************
;功能号为0x4
;收到消费应答
;*********************************
r_mod34: mov r0,ricon
mov a,@r0
cjne a,#55h,r_mod340
clr f_sal
r_mod340: ljmp r_mod4
;********************************
;功能号为0x5
;在线测试应答
;********************************
r_mod35: mov sicon1,#sendbuf
mov r0,sicon1
mov @r0,#03h
inc sicon1
mov r0,sicon1
mov @r0,#04h
mov pf,#07h
inc sicon1
mov r0,sicon1
mov @r0,pf
mov sendnum,#03h
mov sicon,#sendbuf
setb ti
setb re184
nop
nop
nop
nop
nop
nop
r_mod4:
mov rimod,#0
setb sm2
d_reti: pop b
pop 00h
pop dpl
pop dph
pop acc
pop psw
reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -