📄 1991.asm
字号:
;将RAM中30H-37H的数据写入01区SUBKEY的10H-17H中,然后读到RAM中40H-47H。且用串口输出到计算机
;将RAM中60H-67H的数据写入SCRATCHPAD中20H-27H,然后读到RAM中70H-77H中,且用串口输出到计算机
;将RAM中60H-67H的数据写入SCRATCHPAD中20H-27H,然后COPY到密码区1 20H-27H中,然后读RAM中的80H-87H,且用串口输出到计算机
ORG 00h
AJMP MAIN
ORG 0023H
AJMP INTT1
ORG 40h
DIO BIT p1.0
MAIN:
MOV R0,#30H ;存放8个数据到30H-37H
MOV R1,#01H
MOV R5,#08H
WRAM:MOV A,R1
MOV @R0,A
INC R1
INC R0
DJNZ R5,WRAM
MOV R0,#60H ;存放8个数据到60H-67H
MOV R1,#09H
MOV R5,#08H
WRAM2:MOV A,R1
MOV @R0,A
INC R1
INC R0
DJNZ R5,WRAM2
LCALL WPASSW
LCALL WSUBKEY
LCALL RSUBKEY
LCALL WSCRATCHPAD
LCALL RSCRATCHPAD
LCALL CSCRATCHPAD
LCALL RSUBKEY1
SHOW: ;利用串口通信检验试验的结果
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV TMOD,#20H
MOV SCON,#40H
MOV TH1,#0fdH
mov tl1,th1
MOV PCON,#80H
SETB TR1
MOV R6,#08H ;******显示40H-47H中的数据
MOV R0,#40H
SEND1:
LCALL DELAY
LCALL DELAY
MOV A,@R0
MOV SBUF,A
INC R0
LCALL DELAY
LCALL DELAY
DJNZ R6,SEND1
MOV R6,#08H ;******显示70H-77H中的数据
MOV R0,#70H
SEND2:
LCALL DELAY
LCALL DELAY
MOV A,@R0
MOV SBUF,A
INC R0
LCALL DELAY
LCALL DELAY
DJNZ R6,SEND2
MOV R6,#08H ;******显示80H-87H中的数据
MOV R0,#80H
SEND3:
LCALL DELAY
LCALL DELAY
MOV A,@R0
MOV SBUF,A
INC R0
LCALL DELAY
LCALL DELAY
DJNZ R6,SEND3
AJMP MAIN
;*********************************************
DELAY:
MOV R3,#230
DELAY1:MOV R4,#240
DELAY2: DJNZ R4,DELAY2
DJNZ R3,DELAY1
RET
;*********************************************
INTT1:
CLR TI
RETI
;********************************************
RESET: ;初始化DS1991
CLR DIO ;将P1。0口置低,开始初始化
MOV R4,#210
LOOP:NOP
DJNZ R4,LOOP
SETB DIO
MOV R4,#12H
RESET1: DJNZ R4,RESET1
MOV R4,#30
RESET2:
JNB DIO,RESET3
DJNZ R4,RESET2
RERESET:SETB DIO
MOV A,#0EH
RET
RESET3:MOV R4,#64H
DJNZ R4,$
MOV R4,#54
RESET4:JB DIO,RESET5
DJNZ R4,RESET4
RESET5:SETB DIO
MOV R4,#180
DJNZ R4,$
MOV A,#0H
RET
;***********************************************************
WBYTE: MOV R6,#08H ;向DS1991写一字节数据
WB1: CLR DIO
MOV R4,#05H
DJNZ R4,$
CLR C
RRC A
MOV DIO,C
MOV R4,#50
DJNZ R4,$
SETB DIO
NOP
NOP
NOP
NOP
DJNZ R6,WB1
RET
;*******************************************************************
RBYTE: MOV R6,#08H ;从DS1991读一字节数据
RB1:CLR DIO
MOV R4,#02H
DJNZ R4,$
SETB DIO
MOV R4,#3
DJNZ R4,$
MOV C,DIO
RRC A
SETB DIO
MOV R4,#32
DJNZ R4,$
SETB DIO
MOV R4,#3
DJNZ R4,$
DJNZ R6,RB1
RET
;***************************************************************************
RROM: ;读ROM
INIT: LCALL RESET
;JNZ INIT ;判断初始化是否成功
MOV A,#33H
LCALL WBYTE
MOV R5,#08H
RCOM1: LCALL RBYTE
DJNZ R5,RCOM1
RET
;*********************************************************************************
WPASSW: LCALL RROM ;向DS1991写密码
MOV A,#5AH
LCALL WBYTE
MOV A,#40H
LCALL WBYTE
MOV A,#40H
CPL A
LCALL WBYTE
MOV R5,#08H
MOV R0,#50H
ROID: LCALL RBYTE ;存放读出的SUBKEY -1的ID号
MOV @R0,A
INC R0
DJNZ R5,ROID
MOV R0,#50H ;写回读出的SUBKEY -1的ID号
MOV R5,#08H
WOID:MOV A,@R0
LCALL WBYTE
INC R0
DJNZ R5,WOID
WNID: ;写入新的ID号
MOV DPTR,#IDTAB
MOV R3,#00H
MOV R5,#08H
WNID1:MOV A,R3
MOVC A,@A+DPTR
LCALL WBYTE
INC R3
DJNZ R5,WNID1
WNPS: ;写入新的密码
MOV DPTR,#PSTAB
MOV R3,#00H
MOV R5,#08H
WNPS1:MOV A,R3
MOVC A,@A+DPTR
LCALL WBYTE
INC R3
DJNZ R5,WNPS1
LCALL RESET
RET
IDTAB: DB 10H,11H,12H,00H,00H,00H,00H,44H
PSTAB: DB 12H,13H,14H,15H,16H,17H,11H,12H
;*****************************************************************************************
WSUBKEY:LCALL RROM ;向SUBKEY 01区10H-17H 的数据写入RAM中30H-37H 的数据
MOV A,#99H
LCALL WBYTE
MOV A,#50H
LCALL WBYTE
MOV A,#50H
CPL A
LCALL WBYTE
LCALL IDPS
MOV R0,#30H
MOV R5,#08H
WDATA:MOV A,@R0
LCALL WBYTE
INC R0
DJNZ R5,WDATA
LCALL RESET
RET
;************************************************************************************
RSUBKEY: ;从SUBKEY 01区10H-17H中读取数据存放在RAM 40H-47H
LCALL RROM
MOV A,#66H
LCALL WBYTE
MOV A,#50H
LCALL WBYTE
MOV A,#50H
CPL A
LCALL WBYTE
LCALL IDPS
MOV R0,#40H
MOV R5,#08H
RDATA:LCALL RBYTE
MOV @R0,A
INC R0
DJNZ R5,RDATA
LCALL RESET
RET
;****************************************************************************************
RSUBKEY1: ;从SUBKEY 01区20H-27H中读取数据存放在RAM 80H-87H
LCALL RROM
MOV A,#66H
LCALL WBYTE
MOV A,#60H
LCALL WBYTE
MOV A,#60H
CPL A
LCALL WBYTE
LCALL IDPS
MOV R0,#80H
MOV R5,#08H
RDATA1:LCALL RBYTE
INC A
MOV @R0,A
INC R0
DJNZ R5,RDATA1
LCALL RESET
RET
;****************************************************************************************
WSCRATCHPAD: ;写暂存器,20H-27H
LCALL RROM
MOV A,#96H
LCALL WBYTE
MOV A,#0E0H
LCALL WBYTE
MOV A,#0E0H
CPL A
LCALL WBYTE
MOV R0,#60H
MOV R5,#08H
WSC:MOV A,@R0
LCALL WBYTE
INC R0
DJNZ R5,WSC
LCALL RESET
RET
;*******************************************************************************************
RSCRATCHPAD: ;读暂存器,存放到70H-77H
LCALL RROM
MOV A,#69H
LCALL WBYTE
MOV A,#0E0H
LCALL WBYTE
MOV A,#0E0H
CPL A
LCALL WBYTE
MOV R0,#70H
MOV R5,#08H
RWS:LCALL RBYTE
MOV @R0,A
INC R0
DJNZ R5,RWS
LCALL RESET
RET
;*******************************************************************************************
CSCRATCHPAD: ;COPY暂存器中20H-27H到密码区1中20H -27H中
LCALL RROM
MOV A,#3CH
LCALL WBYTE
MOV A,#40H
LCALL WBYTE
MOV A,#40H
CPL A
LCALL WBYTE
MOV A,#95H ;写选区代码
LCALL WBYTE
MOV A,#95H
LCALL WBYTE
MOV A,#0BCH
LCALL WBYTE
MOV A,#92H
LCALL WBYTE
MOV A,#94H
LCALL WBYTE
MOV A,#9EH
LCALL WBYTE
MOV A, #99H
LCALL WBYTE
MOV A,#0BCH
LCALL WBYTE
MOV DPTR,#PSTAB
MOV R1,#00H
MOV R5,#08H
WPSS:MOV A,R1
MOVC A,@A+DPTR
LCALL WBYTE
INC R1
DJNZ R5,WPSS
LCALL RESET
RET
;*******************************************************************************************
IDPS:MOV R5,#08H ;验证密码和ID
RID: LCALL RBYTE
DJNZ R5,RID
MOV DPTR,#PSTAB
MOV R1,#00H
MOV R5,#08H
WPS:MOV A,R1
MOVC A,@A+DPTR
LCALL WBYTE
INC R1
DJNZ R5,WPS
RET
;********************************************************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -