ORG 0000H
LJMP SETUP
ORG 0013H
;8870的输出选通信好STD接在P3.3的
LJMP EX0INT
ORG 0003H
LJMP INEX0P
org 000bh
ljmp inet0p
ORG 0030H
SETUP: mov 20h,#0
SETB IT0
SETB EX0
SETB et0
SETB EA
MOV 7CH,#1
MOV 7DH,#2
MOV 7EH,#3
MOV 7FH,#4 ;4位密码初值,这部分在初始化部分
MOV TMOD,#01H
MOV TH0,#60
MOV TL0,#176
MOV R2,#0
MOV R3,#0
MOV R0,#78H;读进来的首位密码准备保存在此(direct(78H~7BH)中)
MOV R1,#7CH;已知的密码位置(direct(7CH~7FH)中)
MAIN:SJMP MAIN
INEX0P:clr ex0
SETB TR0
RETI
INET0P: jb 20h.0,aa ;查下面写的标志位,有是第二次 则过一定时间摘
; 机没有则是第一次
MOV TH0,#60
MOV TL0,#176
INC R2
CJNE R2,#200,N1S
MOV R2,#0
setb 20h.0 ;写一个标志位,表示一定的时间
clr tr0
setb ex0
aa: MOV TH0,#60
MOV TL0,#176
INC R2
CJNE R2,#200,N1S
inc r3
cjne r3,#3,n1s
MOV R2,#0
clr p3.6
N1S: RETI
EX1INT:
JB 20H.1,MMXG
;判密码是否校验正确,正确转移到密码修改子程序
LCALL LOAD
;调接收码子程序
MOV R0,#78H;如果到达7CH,则4个数据已经接受完毕,R0重新指向78H
LOOP_PASSWORD:
MOV A,@R0;取出保存的数据
CJNE A,@R1,MIMA_ERR;与对应得密码单元比较,如果不相等则转密码错误处理
INC R0;前一位密码正确,调整指针
INC R1
CJNE R0,#7CH, LOOP_PASSWORD;四个密码都比较完了吗?没完循环继续比较,完了做密码正确的处理
SETB 20H.1
;密码校验结束且正确标志
LJMP INT0RET
MIMA_ERR:
LCALL BEEPC
LCALL BEEPC
;2声500HZ,提示错误,重新输入
INT1RET:
MOV R0,#78H
MOV R1,#7CH
RETI
[ 本帖最后由 TSB53 于 2009-5-6 18:38 编辑 ]
|