⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p31n-v1.1.2.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;****************************  终端机修改条例  ************************************
;1:添加了YIDA标志,在收到正确应答后置1,消费数据发送后置0,靠卡前判断该标志如为0,则靠卡无效
;2:添加消费流水号
;3:添加靠卡后等待一分钟10秒后无按键自动取消
;4:增加靠卡自动关闭帐户
;***********************************************************************************

;====================================
;=    ID卡售饭系统V8.0  FLASH版本   =
;=      上次更新时间 2004.08.21     =
;====================================
	org 0000h
;----------------------------------
;        常量定义
;----------------------------------

	null    equ    35	;全暗显示的码
	sleep   equ    2	;
	bpnum   equ    10	;
	delay   equ    15	;
	dslep   equ    7	;
	dfcom   equ    18       ;显示'-'
	nfcom   equ    0a3h     ;显示'.'

;----------------------------------
	kb_0    equ     0	;以下是键值
	kb_1    equ     1
	kb_2    equ     2
	kb_3    equ     3
	kb_4    equ     4
	kb_5    equ     5
	kb_6	equ 	6
	kb_7    equ     7
	kb_8    equ     8
	kb_9    equ     9
	kb_a    equ     10
	kb_b    equ     11
	kb_dot  equ     12
	kb_p    equ     13
	kb_m    equ     14
	kb_equ  equ     15
	kb_cl   equ     16
	kb_en   equ     17
	kb_f1   equ     18
	kb_f2   equ     19

	k_f10   equ     20           ;F1+A+0
	k_f11   equ     21           ;F1+A+1
	k_f12   equ     22           ;F1+A+2
	k_f13   equ     23           ;F1+A+3
	k_f14   equ     24           ;F1+A+4
	k_f15   equ     25           ;F1+A+5
	k_f16   equ     26           ;F1+A+6

	k_f1d   equ     27           ;F1+A+.
	k_f1equ equ     28           ;F1+A+=
	k_f1p   equ     29           ;F1+Plus
	k_f1m   equ     30           ;F1+Minus
	k_f2p   equ     31           ;F2+Plus
	k_f2m   equ     32h          ;F2+Minus

	k_f1a   equ     33           ;F1+A
	;----------------
	c_rmm   equ     30h          ;Read Main Memory Command
	c_wmm   equ     38h          ;Write Main Memory Command
	c_rpm   equ     34h          ;Read Protect Memory Command
	c_wpm   equ     3ch          ;Write Protect Memory Command
	c_rsm   equ     31h          ;Read Sc Memory Command
	c_wsm   equ     39h          ;Write Sc Memory Command
	c_cvd   equ     33h          ;Comp Verify Data Command
	;----------------
	normal  equ     0
	idle    equ     1            ;0-idle  1-all
	keyset  equ     0            ;0-keyset0&&key_a  1-keyset1&&key_a 2-keyset2&&key a
				     ;4-keyset0&&key_b  1-keyset1&&key_b 2-keyset2&&key b
	secnr   equ     0            ;Sector Number
	rf_sor  equ     80h
	rf_rfs  equ     40h
	rf_nrf  equ     02h
	rf_ac   equ     01h
	rf_br   equ     01h
	rf_pre  equ     40h
	rf_cen  equ     20h
	rf_cre  equ     10h
	rf_ppp  equ     06h
	rf_al   equ     80h
	rf_rc   equ     02h
	c_ant   equ     93h          ;command of antioll
	c_sel   equ     93h          ;command of select
	c_hlt   equ     50h          ;command of halt
	;----------------
	f_dt0   equ     0a2h
	f_dt1   equ     13h
	f_dt2   equ     10h
	f_dt3   equ     91h
	;----------------
	c_beg   equ     0e0h         ;Reading Card Main Memory Adress
	c_r_n   equ     32           ;Reading Card Main Memory Numbers
	;----------------
	err_0   equ     00h          ;非法靠卡,该卡在管理器的帐号没关闭
	err_1   equ     01h          ;键盘坏
	err_2   equ     02h          ;
	err_3   equ     03h          ;
	err_4   equ     04h          ;
	err_5   equ     05h          ;
	err_6   equ     06h          ;
	err_7   equ     07h          ;Read Error
	err_8   equ     08h          ;
	err_9   equ     09h          ;溢出
	err_10  equ     0ah          ;未注册
	err_11  equ     0bh          ;坏卡
	err_12  equ     0ch          ;未插出纳员卡
	err_13  equ     0dh          ;通讯错误
	err_14  equ     0eh          ;卡号和帐号不同
	err_15  equ     0fh          ;None Normal Card
	err_16	equ 	10h

	menufunc  equ   31h          ;食谱消费
	ratfunc   equ   11h          ;定额消费
	countfunc equ   21h          ;计次消费
	norsale   equ   01h          ;现金消费

	norsave   equ   02h          ;存款

	;-----------------------
	;     Bit Define
	;-----------------------
 	m393	bit	p1.0		;393电源检测输入脚
	sda	bit	p1.1		;ds1307时钟线
	scl	bit	p1.2		;ds1307数据线
	re184	bit	p1.3		;485通讯使能
	;-----------------------
	clock   bit     p1.4          ;Display Clock
	store   bit     p1.5          ;Display Store
	enabl   bit     p1.6          ;Display Enabl
	ddata   bit     p1.7          ;Display Data

	;-----------------------
	f_rsc   bit     00h          ;请求系统信息标志
	f_ini   bit     01h	     ;初始化完毕标志
	f_rde   bit     02h          ;请求定额标志
	f_pow   bit     03h          ;软关标志
	f_ri    bit     04h          ;接收中断标志
	f_com   bit     05h          ;通讯标志

	f_cny   bit     06h          ;管理卡标志
	f_rzh   bit     07h          ;更新终端机中的个信息
	f_rsl   bit     08h          ;发送脱机消费信息
	f_sal   bit     09h          ;要求发送消费信息
	f_zh    bit     0ah          ;要求得到帐号
	f_beg   bit     0bh          ;开始发送脱机消费信息
	f_mnu   bit     0ch          ;食谱消费标志

	f_udt   bit     0dh          ;更新日期和时间
        f_err0  bit     0eh
	f_a_s   bit     0fh          ;1:Sale,0:Deposit

	f_n     bit     10h          ;Entered Key Flag
	f_dot   bit     11h          ;Enter . Key Flag
	f_add   bit     12h          ;Enter + Key Flag
	f_sub   bit     13h          ;Enter - Key Flag
	f_equ   bit     14h          ;Enter = Key Flag

	f_m_p   bit     15h          ;1:miune  0:plus
	f_p_m   bit     16h          ;Copy as f_m_p

	f_tj    bit     17h          ;OffLine

	f_rat   bit     18h          ;定额标志

	bit_c   bit     19h          ;Bit Flag
	f_off   bit     1ah          ;Is Offline Flag
	f_sta   bit     1bh          ;Test Comm Flag
        f_cfk   bit     1ch          ;

	f_typ   bit     1eh          ;Card Type: 1=IC; 0=RF
        f_id    bit     1fh
         				;
        f_f	bit	50h		;这是新添加的标志位
	f_0 	bit 	51h		;此标志位是用来判断按下的是clear 还是enable.
	f_sign	bit 	52h		;信用额度符号
	r_en	bit	53h
	rf_chk 	bit	54h
	b_chk	bit	55h
        lastread bit	56h		;if the last read,yes,setb lastread
  	err	bit	57h
       ;========================
       ;   寄存器定义
       ;========================
  ;      th2	equ	0cdh
 ;	tl2	equ	0cch
 ;	rcap2h	equ	0cbh
 ;	rcap2l	equ	0cah
 ;	t2con	equ	0c8h

	shn     equ     08h         ;Row Regeist
	v_key   equ     09h         ;Key Vaule
	v0_key  equ     0ah         ;Copy of v_key
	kdt0    equ     0bh         ;Keyboard Scan Code 0
	kdt1    equ     0ch         ;Keyboard Scan Code 1
	kdt2    equ     0dh         ;Keyboard Scan Code 2
	;
	bitcount equ 	09h

	;
	r_mod   equ     0eh         ;RI Inputerrupt Step
	ricon   equ     0fh         ;RI Receive Data Counter
	rir0    equ     10h         ;RI Receive Data Address
	chksum  equ     11h         ;RI CheckSum
	;
	r_nme   equ     12h         ;Terminal Name Regist
	state   equ     13h         ;Terminal Work State
	max_h   equ     14h         ;
	max_l   equ     15h

	beg_h   equ     16h
	beg_l   equ     17h
	end_h   equ     18h
	end_l   equ     19h

	rat_0   equ     1ah         ;Ration
	rat_1   equ     1bh
	rat_2   equ     1ch

	adr_h   equ     1dh         ;Address
	adr_l   equ     1eh

	count   equ     1fh
	;
	r1_374  equ     24h         ;r_en rf_chk b_chk re184 bp pow a16 a15

	CE	BIT 	26H
	a17	BIT 	25h
	bp      bit     23h
	pow     bit     22h         ;AC Power On

	;
	func    equ     25h         ;0=Fc.17,1=Fc.18,2=Fc.19,3=Fc.20,4=Fc.43
	scancount equ   25h         ;=func

	regt    equ     26h         ;Temp Regeist
	reg1    equ     27h         ;Temp Regeist

	reg0    equ     28h         ;Temp Regeist
	rcr0    equ     28h         ;=reg0:Copy of R0

	rftyp   equ     29h
	;
	s_succ  equ     2bh         ;0-None Sale;1-Sale Sending;2-Sale Send Complete
	;
	repeat  equ     2ch         ;Re-Send Sale/Save Count

	lim_cnt equ     2dh         ;Limit Count
	reclen  equ     2dh         ;=lim_cnt: Record Length
	;
	sata    equ     2eh
	r_err   equ     2fh
	;
	r_sp    equ     30h

	;------------------------
	reg2    equ     58h         ;Temp Regist
	reg3    equ     59h         ;Temp Regist
       ;reg4    equ     5ah         ;Temp Regist
        stwt    equ     5bh
        yida    equ     5ch

	rf0ram  equ     50h
	rf1ram  equ     60h
	rf2ram  equ     70h

        d_addramh   equ  60h
        d_addraml   equ  61h
        xorram      equ  56h
        divh        equ  5eh
        divl        equ  5fh
        divram      equ  65h

	rf3ram      equ  68h         ;=rf1ram+8
	;----------------------
	icard_sc0   equ     51h         ;Comp Sc_0
	icard_sc1   equ     52h         ;Comp Sc_1

	icard_sc2   equ     0f6h         ;Comp Sc_2
	icard_sce   equ     0f7h         ;ScCompErrCounter
	icard_com   equ     0f8h         ;IC Read/Write Command
	icard_adr   equ     0f9h         ;IC Read/Write Address

	icard_dta   equ     57h         ;
	bytecount   equ     58h         ;从ds1307读写的字节数

	sw0	equ	0fah
	;----------------------
	;----------------------
	exp_rm0   equ     78h       ;Expense
	exp_rm1   equ     79h
	exp_rm2   equ     7ah
	exp_rm3   equ     7bh
	exp_rm4   equ     7ch
	exp_rm5   equ     7dh

	sur_rm0   equ     7eh       ;Surplus
	sur_rm1   equ     7fh
	sur_rm2   equ     80h
	sur_rm3   equ     81h
	sur_rm4   equ     82h
	sur_rm5   equ     83h

	augend0   equ     84h       ;Augend
	augend1   equ     85h
	augend2   equ     86h
	augend3   equ     87h
	augend4   equ     88h
	augend5   equ     89h

	lim_rm0   equ     8ah       ;Limit Expense
	lim_rm1   equ     8bh
	lim_rm2   equ     8ch
	lim_rm3   equ     8dh
	lim_rm4   equ     8eh
	lim_rm5   equ     8fh
	;
	ddsp0   equ     90h         ;Display
	ddsp01  equ     91h
	ddsp02  equ     92h
	ddsp03  equ     93h
	ddsp04  equ     94h
	ddsp05  equ     95h
	ddsp06  equ     96h
	ddsp07  equ     97h
	ddsp1   equ     98h
	ddsp11  equ     99h
	ddsp12  equ     9ah
	ddsp13  equ     9bh
	ddsp14  equ     9ch
	ddsp15  equ     9dh
	ddsp16  equ     9eh
	ddsp17  equ     9fh

	;消费数据流的格式
	dflag   equ     0b0h        ;标志
	d_nme   equ     0b1h        ;机号

        ;yida    equ     0b2h        ;消费年
	;d_dat   equ     0b3h        ;消费月
	;d_hor   equ     0b4h        ;消费时
	;d_min   equ     0b5h	     ;消费分

        dadr_h  equ     0b2h        ;卡地址高位
	dadr_l  equ     0b3h 	    ;卡地址低位
        idcode2 equ     0b4h        ;
        idcode3 equ     0b5h
        idcode4 equ     0b6h

	d_exp0  equ     0b7h        ;消费整数高位
	d_exp1  equ     0b8h	    ;消费整数低位
	d_exp2  equ     0b9h	    ;消费小数部分

	d_sur0  equ     0bah        ;卡中余额整数高位
	d_sur1  equ     0bbh	    ;卡中余额整数低位
	d_sur2  equ     0bch	    ;卡中余额小数部分
        s_code3 equ     0bdh
        s_code4 equ     0beh
        xflsh   equ     0bfh
	;madr_h  equ     0bdh        ;管理卡地址高位
	;madr_l  equ     0beh        ;管理卡地址低位

	;-----------------------
	r_buf   equ     0a0h        ;0a0h-0bfh:32 Temp Buffer
	;
	ribuf   equ     0c0h        ;0c0h-0ffh:64 Receive && Send Buffer
	;*********************************
	;   地址定义
	;*********************************

	d1_374  equ     0a000h	;
	d_245   equ     0e000h	;

	d_sal   equ     0000h   ;存放脱机消费数据的首地址

	ds_name	 equ 	08h

	ds_state equ 	09h

	ds_maxh	 equ 	0ah
	ds_maxl	 equ 	0bh

	ds_begh  equ 	0ch
	ds_begl  equ 	0dh

	ds_endh	 equ 	0eh
	ds_endl	 equ	0fh

	ds_rat0	 equ 	10h
	ds_rat1  equ	11h
	ds_rat2  equ	12h

	d_l_e	 equ	13h

        sum51    equ    14h
        sum61	 equ	15h
       ;sum71	 equ	16h
        d_stwt   equ    15h


	sum0	equ	17h
	sum1	equ	18h
	sum2	equ	19h
	sum3	equ	1ah
	sum4	equ	1bh
       	sum5	equ	1ch
	sum6	equ	1dh
	sum7	equ	1eh

	d_menu1	 equ	1fh    ;1fh~36h  totle 24byte

        command1  equ 37h      ;命令字存储单元
 	command2  equ 38h
 	commnad3  equ 39h

        ds_beghc   equ 	3ah    ;首位指针COPY地址
	ds_beglc   equ 	3bh

	ds_endhc   equ 	3ch
	ds_endlc   equ	3dh
             bz1   equ  3eh

        d_xflsh    equ  3fh    ;消费流水号

	;******************************
	;  Const Define
	;******************************
	dti_h   data     0f8h       ;2.15ms
	dti_l   data    0
	dt1_h   data    10h         ;66.66ms
	dt1_l   data    0

	s_recl  data    16          ;Sale Record Length

	mx_sh   data    10          ;1000h*16=128k      4096条信息
	mx_sl   data    00          ;Maxium Number Of Offline Sale Record

	ds1307w	data	0d0h
	ds1307r	data	0d1h

        cmd1    data    55h
        cmd2    data    0aah
        cmd3    data	55h        ;3个命令字
;****************************
	ljmp main
       ;----------------
	org     0003h               ;int0
	ljmp    main
       ;----------------
	org     000bh               ;T0
	clr tr0
	setb sm2
	clr f_ri
	sjmp m_t0
       ;----------------
	org     0013h               ;INT 1
        ljmp main

m_t0:   mov r_mod,#0
	reti
       ;-----------------
	org     001bh               ;T1
	ljmp m_t1
	;
	;----------------------
	;  串口中断处理子程序
	;---------------------
	org  0023h
	push acc
        push b
	push 00h
        push 01h
        push 02h
	push psw
	push 03h
	push 04h
	push 05h
	push 06h
        push 07h
        push dpl
        push dph

     	setb enabl

	jbc ri,r_rece

	jbc ti,r_send

	ajmp d_reti

r_send:
        mov a,ricon
	jnz r_sen1
	push dph
	push dpl
	mov r0,#70
	djnz r0,$
        clr re184
	clr f_ri
	pop dpl
	pop dph
	ljmp d_reti
r_sen1:
        mov r0,rir0
	mov a,@r0
        mov sbuf,a
	inc rir0
	dec ricon
	ljmp d_reti

r_rece:
        mov r0,sbuf
	clr tr0
	mov a,r_mod
	cjne a,#0,r_md10
        jbc rb8,nex332
        ljmp d_reti
nex332:
	mov a,r0
	cjne a,r_nme,r_md01
r_md00:
        clr sm2
	setb f_ri
	mov a,r0
	mov r0,#ribuf           ;收/发缓冲器
	mov @r0,a		;place the receive date
	inc r0			;
	mov rir0,r0
	inc r_mod
	sjmp r_md21

r_md01:
        cjne a,#0ffh,r_md02
	sjmp r_md00
r_md02:
        ajmp d_reti

r_md10:
        cjne a,#1,r_md20
	mov a,r0

	mov r0,rir0
	mov @r0,a

	cjne a,#17,r_md11         ;Write New Card
	mov a,#54
	sjmp r_md19
r_md11:
        cjne a,#18,r_md12         ;ReWrite Card
	mov a,#54
	sjmp r_md19

r_md12:
        cjne a,#70,r_md13         ;Get ZH
	mov a,#52			;old is 38
	sjmp r_md19

r_md13:
        cjne a,#74,r_md16         ;Update Time
	mov a,#38
	sjmp r_md19

r_md16:
        cjne a,#66,r_md17         ;Get Security
	mov a,#54
	sjmp r_md19

r_md17:
        cjne a,#76,r_md18
	mov a,#54
	sjmp r_md19

r_md18:
        mov a,#14

r_md19:
        mov ricon,a
	rr a
	mov chksum,a
	dec ricon
	dec ricon
	inc rir0
	inc r_mod
	sjmp r_md21
	;
r_md20:
        mov a,r0
	mov r0,rir0
	mov @r0,a

	inc rir0
	djnz ricon,r_md21

	mov r_mod,#0
	setb sm2
	ljmp rideal

r_md21:
        mov th0,#dti_h
	mov tl0,#dti_l
	setb tr0
	;
d_reti:
        mov c,r_en
	mov enabl,c
	;
        pop dph
        pop dpl
        pop 07h
	pop 06h
	pop 05h
	pop 04h
	pop 03h
	pop psw
        pop 02h
        pop 01h
	pop 00h
        pop b
	pop acc
	reti


;*********************************************
;*********************************************
main:
        clr re184
	mov r2,#30
	djnz r2,$		;将485通讯芯片设置成接收数据状态

	mov sp,#r_sp		;重新设定堆栈的深度

	mov dptr,#d1_374        ;374的地址
	mov a,#01001000b        ;-- CE A17 -- bp pow a16 a15
	mov r1_374,a		;
	movx @dptr,a		;

	lcall check_battery

	;-----------------------
	; Set Sreial Paramete
	;-----------------------

	mov th2,#0ffh           ;115200 57600 38400 28800 19200 9600
	mov tl2,#0fah           ;ff:fd  ff:fa ff:f7 ff:f4 ff:ee ff:dc
	mov rcap2h,#0ffh
	mov rcap2l,#0fah
	mov t2con,#00110100b    ;tf2 exf2 rclk tclk exen2 tr2 c/t2 cp/rl2
	;------
	mov r_mod,#0

	mov state,#0

	;--------------------
	;  Initilize Flag
	;--------------------
	clr f_ri
	clr f_zh
        clr f_id
	clr f_sal
	clr f_rsl
	clr f_cny
	clr f_a_s
	clr f_beg

	clr f_com
	setb f_pow

        mov yida,#01h           ;g应答标致

	clr f_mnu

	clr f_rat

	setb f_rde
	setb f_rsc

	clr f_rzh
	clr f_off
        clr f_cfk
	clr f_udt

	clr f_sta

	mov count,#0

 	setb rf_chk

	setb f_f
	clr f_0

	mov func,#0ffh
	mov s_succ,#0

	setb r_en
	setb rf_chk
  ;--------------------------
  ;  测试DS1307用户RAM好坏
  ;--------------------------
        lcall v0_ram		;检查写1307 RAM是否正常

	jb f0,ram_s		;f0=1,RAM检测成功

	lcall get_code           ;调用查找错误码对应的字型

ram_e:
        lcall clrbp
	;
	mov r4,#30
	lcall d0lay

	lcall setbp

	lcall d0lay

	lcall check_battery

	sjmp ram_e		;1307 写RAM出错,循环报警


ram_s:
        lcall inial		;初始化时钟芯片,检验RAM区数据的正确性

	;
	lcall get_pos_name

	;********************************
	;功能:	测试键盘
        ;       键盘损坏,循环报警ERR 001
	;*******************************
	mov regt,#60

test_k:

	lcall key_in
	mov a,v_key

	cjne a,#0ffh,kb_err        ;Keyboard Err

	lcall check_battery

	djnz regt,test_k

	;********************************************
	;功能:检测3V电池,电量不足,3次报警ERR 004
	;********************************************
	jb m393,ceok

        mov r_err,#04       ;ERR 004
        mov r7,#3           ;times

        lcall error_code

err_loop:
	lcall clrbp

	mov r4,#30
	lcall d0lay

	lcall setbp

	mov r4,#60
	lcall d0lay

	djnz r7,err_loop
	;***********
ceok:
	lcall clrbp		;自检通过,长叫一声

	mov r4,#30h
	lcall d0lay

	lcall setbp
	;----------------------

        ;****************************************
	;判断RAM中有无数据,没有数据就格式化FLASH
        ;****************************************
        mov a,beg_h
	mov b,end_h
	cjne a,b,edit

	mov a,beg_l
	mov b,end_l
	cjne a,b,edit

	clr a
	mov beg_h,a
	mov beg_l,a
	mov end_h,a
	mov end_l,a		;首尾指针清零
	lcall w_end

	lcall chip_erase


edit:
        sjmp edit_pos_name

	;-------------------
	; 键盘坏
	;--------------------
kb_err:
        mov r_err,#err_1

err_dp:
    lcall error_code
	lcall clrbp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -