📄 samsung.asm
字号:
CLS_DATA: MOV R0,#040H ;清空接收暧冲区
CLS_RX_DATA: MOV @R0,#000H
INC R0
CJNE R0,#000H,CLS_RX_DATA
RET
;-------------------------写完到复位手机----------------------------
;------------完成----------
no_a2000: MOV 17H,#0H ;三星串号三个版本标志位00=VER1,01=VER2,03=VER3
MOV DPTR,#D_WRITE_ESN
MOV R2,#080H ;在第二行显示 "WRITE ESN"
MOV R3,#0FH
LCALL WI
LCALL WDD
; --------------WRITE ESN ------------
SAT_ESN_W: MOV 1EH,#0AH ;不正常时重复上送10次
S_ESN: DJNZ 1EH,WRITE_ESN
AJMP DISP
WRITE_ESN: ACALL CLS_DATA
MOV R1,#40H ;置数据 开始 位
MOV @R1,#7FH ;置写ESN 命令 '3F'
INC R1
MOV @R1,#3FH
MOV R2,#04H ;传送数据到发送缓冲
MOV R0,#018H
MOV R1,#042H
LCALL A_MOV ;传送
ACALL BEG_16 ;计算串号第一个较检码
MOV R2,#04H
MOV R0,#00CH
MOV R1,#046H
LCALL A_MOV ;传送数据到发送缓冲
MOV R0,#17H
CJNE @R0,#00H,ESN_VER_2 ;是第一个版本吗?
ACALL BEG_VER_1
AJMP TO_ESN_VER
ESN_VER_2: CJNE @R0,#01H,ESN_VER_3 ;是第二个版本吗?
ACALL BEG_VER_2
AJMP TO_ESN_VER
ESN_VER_3: CJNE @R0,#02H,S_ESN ;是第三个版本吗? 找不到所有版本到反回显示串号
ACALL BEG_VER_3 ;计算串号第一个较检码
TO_ESN_VER: MOV R2,#04H
MOV R0,#00CH
MOV R1,#04AH
LCALL A_MOV ;传送数据到发送缓冲
;
MOV R7,#0FFH ;计算结束码
MOV R6,#0FFH
MOV R0,#41H
NEXT_END_CODE: MOV A,@R0
LCALL END_CODE
INC R0
CJNE R0,#4EH,NEXT_END_CODE
XRL 06H,#0FFH
XRL 07H,#0FFH ;计算完成
MOV A,R6 ;传送到发送区
MOV @R0,A
INC R0
MOV A,R7
MOV @R0,A
; 发送写串指令 R1开始地址 R2发送长度
MOV R0,#80H ;置接收地址
MOV R1,#40H ;
MOV R2,#10H
LCALL COM_TXRAM ;发送子程序
LCALL TX_7E
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
CLR ES
MOV R0,#092H
CJNE @R0,#07EH,NEXT_ERR ;检证数据接收是否正确
AJMP MOB_RE ;到手机重启
NEXT_ERR: MOV R0,#81H
CJNE @R0,#014H,S_ESN
INC 17H
AJMP SAT_ESN_W
;-------------------------------手机重启-----------------------------
; --------------MODE RESET------------
MOB_RE:
MOV DPTR,#D_OK
MOV R2,#080H ;在第二行显示 " OK!!"
MOV R3,#0FH
LCALL WI
LCALL WDD
MOV 1EH,#02H ;不正常时重复上送四次
S_RE: DJNZ 1EH,MODE_RE
AJMP DISP
MODE_RE: ACALL CLS_DATA
MOV R0,#040H ;发送读手机型号命令 '00'
mov DPTR,#RE_
LCALL COM_TX
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
CLR ES
MOV R0,#048H
CJNE @R0,#07EH,S_RE ;检证数据接收是否正确
LJMP DISP
;-------------------第二个串号较检码--------------------
BEG_VER_2: MOV R0,#1FH ;取出版本号到 'A'
MOV A,@R0
MOV R0,#042H
ADD A,@R0
SETB RS0
PUSH ACC
MOV DPTR,#A_00 ;计算数据库地址 到 DPTR
; SWAP A
RR A
RR A
ANL A,#03CH
MOV B,A
MOVC A,@A+DPTR ;将数据库的数据存到 R4--R7
MOV R4,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R5,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R6,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R7,A
POP ACC
ANL A,#0FCH
MOV DPTR,#A_00 ;计算数据库地址 到 DPTR
MOV B,A
MOVC A,@A+DPTR ;将数据库的数据存到 R0--R3
MOV R0,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R1,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R2,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R3,A
;----------------计算库1------------------
MOV A,R4
ADD A,R0
MOV R4,A
MOV A,R5
ADDC A,R1
MOV R5,A
MOV A,R6
ADDC A,R2
MOV R6,A
MOV A,R7
ADDC A,R3
MOV R7,A
CLR RS0
RET
BEG_VER_1: MOV R0,#1FH ;取出版本号到 'A'
MOV A,@R0
MOV R0,#042H
ADD A,@R0
SETB RS0
PUSH ACC
MOV DPTR,#A_00 ;计算数据库地址 到 DPTR
SWAP A
RR A
RR A
ANL A,#03H
ADD A,DPH
MOV DPH,A
POP ACC ;取出版本号
PUSH ACC
RL A
RL A
ANL A,#0FCH
MOV B,A
MOVC A,@A+DPTR ;将数据库的数据存到 R4--R7
MOV R4,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R5,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R6,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R7,A
POP ACC ;取出版本号
PUSH ACC
ANL A,#0FCH
MOV DPTR,#A_00 ;计算数据库地址 到 DPTR
MOV B,A
MOVC A,@A+DPTR ;将数据库的数据存到 R0--R3
MOV R0,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R1,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R2,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R3,A
;----------------计算库1------------------
MOV A,R4
ADD A,R0
MOV R4,A
MOV A,R5
ADDC A,R1
MOV R5,A
MOV A,R6
ADDC A,R2
MOV R6,A
MOV A,R7
ADDC A,R3
MOV R7,A
MOV DPTR,#D_VER
POP ACC ;取出版本号
RLC A
JNC NEXT_VER
INC DPH
NEXT_VER: ANL A,#0FEH
MOV B,A
MOVC A,@A+DPTR
MOV R2,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R3,A
;----------------计算库2------------------
MOV A,R4
ADD A,R2
MOV R4,A
MOV A,R5
ADDC A,R3
MOV R5,A
MOV A,R6
ADDC A,#0H
MOV R6,A
MOV A,R7
ADDC A,#0H
MOV R7,A
CLR RS0 ;计算结果在R4-R7
RET
BEG_VER_3: MOV R0,#1FH ;取出版本号到 'A'
MOV A,@R0
MOV R0,#042H
ADD A,@R0
SETB RS0
PUSH ACC
MOV DPTR,#A_00 ;计算数据库地址 到 DPTR
SWAP A
RR A
RR A
ANL A,#03H
ADD A,DPH
MOV DPH,A
POP ACC ;取出版本号
PUSH ACC
RL A
RL A
ANL A,#0FCH
MOV B,A
MOVC A,@A+DPTR ;将数据库的数据存到 R4--R7
MOV R4,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R5,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R6,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R7,A
POP ACC ;取出版本号
; PUSH ACC
ANL A,#0FCH
MOV DPTR,#A_00 ;计算数据库地址 到 DPTR
MOV B,A
MOVC A,@A+DPTR ;将数据库的数据存到 R0--R3
MOV R0,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R1,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R2,A
MOV A,B
INC DPTR
MOVC A,@A+DPTR
MOV R3,A
;----------------计算库2------------------
MOV A,R4
ADD A,R0
MOV R4,A
MOV A,R5
ADDC A,R1
MOV R5,A
MOV A,R6
ADDC A,R2
MOV R6,A
MOV A,R7
ADDC A,R3
MOV R7,A
CLR RS0 ;计算结果在R4-R7
RET
;--------------------------串号后八位运算子程序(第一个)-----------------------------------
BEG_16: SETB RS0
MOV R1,#42H ;串号地址
MOV R4,#0FFH
MOV R5,#03FH
MOV R6,#0FFH
MOV R7,#0FFH
RE_BEG: MOV DPTR,#A_00
MOV A,R5
RL A
RL A
ANL A,#0FCH
MOV B,A
MOV A,R4
SWAP A
RR A
RR A
ANL A,#03H
ORL A,B
XRL A,@R1
MOV B,A ;读出库 的四位数据
SWAP A ;计算高两位地址到DPH
RR A
RR A
ANL A,#03H
ADD A,DPH
MOV DPH,A
MOV A,B ;低两位
RL A
RL A
ANL A,#0FCH
MOV B,A
MOVC A,@A+DPTR
PUSH ACC ;1
INC DPTR
MOV A,B
MOVC A,@A+DPTR
PUSH ACC ;2
INC DPTR
MOV A,B
MOVC A,@A+DPTR
PUSH ACC ;3
INC DPTR
MOV A,B
MOVC A,@A+DPTR
PUSH ACC ;4
POP ACC
XRL A,R4
MOV R5,A
POP ACC
XRL A,R7
MOV R4,A
POP ACC
XRL A,R6
MOV R7,A
POP ACC
XRL A,#00H
MOV R6,A
INC R1
CJNE R1,#046H,RE_BEG
MOV B,R4 ;NOT:1
MOV A,R6
CPL A
MOV R4,A
MOV A,B
CPL A
MOV R6,A
MOV B,R5 ;NOT:2
MOV A,R7
CPL A
MOV R5,A
MOV A,B
CPL A
ANL A,#3FH
MOV R7,A
CLR RS0 ;计算完成将得出结果存放在 R4,R5,R6R7 中
RET
;--------------------键盘部分---------------(输出键值=A )
KEY: MOV A,P2
CJNE A,#0FFH,KEY_X
RET
KEY_X: LCALL CLOCK ;防抖动延时
MOV A,P2
MOV B,A
LCALL CLOCK ;防抖动延时
WAIT_KEY: MOV A,P2
CJNE A,#0FFH,WAIT_KEY
MOV A,B
KEY_EXIT: RET
;------------------------------数据接收中断部分 ------------------------
COM_INT: PUSH ACC ;接收部分断
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -