cmd128.asm
来自「51系列的双CPU通过模拟I2C总线通信的例程。 文件格式为MSC-51 AS」· 汇编 代码 · 共 1,324 行 · 第 1/2 页
ASM
1,324 行
LCALL DL10MS
LCALL DL10MS
LCALL DL10MS
LCALL DL10MS
LCALL DL10MS
LCALL DL10MS
MOV R5,#0A0H
LPRR11:
MOV C,SKH
JC OOSKH
DJNZ R5,LPRR11:
LJMP ERRECE
OOSKH:
; LCALL DL100MS
; LCALL DL100MS
; LCALL DL10MS
; LCALL DL10MS
; LCALL DL10MS
; LCALL DL10MS
; LCALL DL10MS
MOV C,SKL
JC OOANS
LJMP ERRWW
OOANS:
MOV A,#0AAH
JMP OUT128
ERRECE:
MOV A,#0E0H
JMP OUT128N
ERRWW:
MOV A,#0EEH
OUT128N:
RET
RABYTE:
MOV A,R2
PUSH ACC
MOV R2,#8
MOV A,#0FFH
MOV B,A
LPREAD:
CLR SKC
NOP
LCALL DDLL1
MOV C,O112 ;;;THE OUTPUT PIN OF AT45D041.......
MOV A,B
RLC A
MOV B,A
LCALL DDLL2
NOP
SETB SKC ;;;
LCALL DDLL
NOP
DJNZ R2,LPREAD
NOP
SETB SKC
POP ACC
MOV R2,A
RET
;;;;;;;;;write a byte
;;;;;;;INPUT: THE BYTE TO BE WRITEEN IS IN "B"
WABYTE:
MOV A,R2
PUSH ACC
MOV R2,#8
LPWR:
CLR SKC
NOP
LCALL DDLL1
MOV A,B
RLC A
MOV B,A
MOV SKD,C ;;;SI THE INPUT PIN OF AT45D041
LCALL DDLL2
NOP
SETB SKC
LCALL DDLL
NOP
DJNZ R2,LPWR
NOP
SETB SKC
POP ACC
MOV R2,A
RET
SENDB34:
MOV R2,#16
MOV R0,#30H ;;SHIFT 128 BIT DATA TO 4562
LOOP34:
MOV A,@R0
MOV B,A
LCALL WABYTE
INC R0
DJNZ R2,LOOP34
SETB SKC
C34:
SETB SKL
JNB SKL,C34
CONC34: ;;;;ACTIVE THE SKHUST LINE
CLR SKH
MOV C,SKH
JC CONC34
B34:
SETB SKL
JB SKL,B34
LCALL DDLL
SETB SKH
SETB SKL
MOV R5,#0FFH ;;;WAIT FOR -SKH- TO TURN 1
WW34SKH:
LCALL DELAY
MOV C,SKH
JC OO34SKH
DJNZ R5,WW34SKH
LJMP ER34ECE
OO34SKH:
MOV A,#0AAH
JMP OUT134
ER34ECE:
MOV A,#0E0H
OUT134:
RET
DDLL1:
MOV R7,#01H
TT11:MOV R6,#5FH
TT22:DJNZ R6,TT22
DJNZ R7,TT11
RET
DDLL2:
MOV R7,#01H
AA11: MOV R6,#5FH
AA22: DJNZ R6,AA22
DJNZ R7,AA11
RET
DDLL:
MOV R7,#02H
CC11: MOV R6,#5FH ;;;;5
CC22: DJNZ R6,CC22
DJNZ R7,CC11
RET
;;;;CLEAR ALL THE DATA BUFFER UNITS TO 0
;;;;INPUT: R0 ---BEGIN ADDRESS
CLRBLK:
MOV R2,#16
LPCLR:MOV A,#00H
MOV @R0,A
INC R0
DJNZ R2,LPCLR
RET
;;;;GET THE CHECK SUM AND PUT IT THE CONSEQUENTLY BYTE
;;;;INPUT: R0---THE BEGIN ADDRESS OF DATA BLOCK
;;;;
CHKSUM:
MOV A,@R0
DEC A
MOV R2,A
MOV B,#00H
LLLS:
INC R0
MOV A,@R0
ADD A,B
MOV B,A
DJNZ R2,LLLS
INC R0
MOV A,B
MOV @R0,A
RET
;;;;GET THE CHECK SUM AND PUT IT THE CONSEQUENTLY BYTE
;;;;INPUT: R0---THE BEGIN ADDRESS OF DATA BLOCK
;;;;
CHKXOR:
MOV A,@R0
DEC A
MOV R2,A
MOV B,#00H
LXOR:
INC R0
MOV A,@R0
XRL A,B
MOV B,A
DJNZ R2,LXOR
INC R0
MOV A,B
MOV @R0,A
RET
;;;TELL THE MONITOR MODE OF POWER ON AND DISPLAY
;;; INPUT: R1--MODE OF POWER ON
;;;; R2--MODE OF DISPLAY
POWERON:
MOV R0,#30H
MOV A,#05H
MOV @R0,A
INC R0
MOV A,R1
MOV @R0,A
INC R0
MOV A,R2
MOV @R0,A
RET
;;;TELL THE MONITOR MODE OF POWER ON AND DISPLAY
;;; INPUT: R1--MODE OF POWER ON
;;;; R2--MODE OF DISPLAY
CMDB31:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#30H
MOV A,#06H
MOV @R0,A
INC R0
MOV A,#0A0H
MOV @R0,A
INC R0
MOV A,R1
MOV @R0,A
INC R0
MOV A,R2
MOV @R0,A
MOV R0,#30H ;;;;.SSSSSSSS
LCALL CHKXOR
LCALL SEND128 ;;;;;FOR 4562
RET
CMDB32:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#30H
MOV A,#03H
MOV @R0,A
INC R0
MOV A,#0A1H
MOV @R0,A
INC R0
MOV A,#00H
MOV @R0,A
MOV R0,#30H
LCALL CHKXOR
LCALL SEND128 ;;;;;FOR 4562
RET
;;;; TELL THE END OF FILL OIL OPERATION
;;;;INPUT: OIL (3 BYTE) MONEY (3 BYTE) PRICE (3 BYTE)
;;;;; GUNNUM ( 1 BYTE)
CMDB33:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV A,#11
MOV R0,#30H
MOV @R0,A
INC R0
MOV A,#0A2H
MOV @R0,A
INC R0
MOV R1,#GUNNUM
MOV A,@R1
MOV @R0,A
MOV R1,#OIL
MOV R2,#03H
LLO33:
INC R0
MOV A,@R1
MOV @R0,A
INC R1
DJNZ R2,LLO33
MOV R1,#MONEY
MOV R2,#03H
LL33:
INC R0
MOV A,@R1
MOV @R0,A
INC R1
DJNZ R2,LL33
MOV R1,#PRICE
MOV R2,#03H
LLP33:
INC R0
MOV A,@R1
MOV @R0,A
INC R1
DJNZ R2,LLP33
MOV R0,#30H
LCALL CHKXOR
LCALL SEND128 ;;;;;FOR 4562
RET
;;;;OK
;;;; SEND THE OIL DATA TO MONITOR
;;;;INPUT: OIL (3 BYTE) MONEY (3 BYTE) PRICE (3 BYTE)
;;;;; GUNNUM ( 1 BYTE)
CMDB34:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV A,#11
MOV R0,#30H
MOV @R0,A
INC R0
MOV A,#0A3H
MOV @R0,A
INC R0
MOV R1,#GUNNUM
MOV A,@R1
MOV @R0,A
MOV R1,#OIL
MOV R2,#03H
LLOIL:
INC R0
MOV A,@R1
MOV @R0,A
INC R1
DJNZ R2,LLOIL
MOV R1,#MONEY
MOV R2,#03H
LLMN:
INC R0
MOV A,@R1
MOV @R0,A
INC R1
DJNZ R2,LLMN
MOV R1,#PRICE
MOV R2,#03H
LLPRI:
INC R0
MOV A,@R1
MOV @R0,A
INC R1
DJNZ R2,LLPRI
MOV R0,#30H
;; LCALL CHKXOR
LCALL SENDB34 ;;;;;FOR 4562
RET
CMDB35:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#30H
MOV A,#0FH
MOV @R0,A
INC R0
MOV A,#0A4H
MOV @R0,A
INC R0
MOV A,#00H
MOV @R0,A
MOV R0,#30H
LCALL CHKXOR
LCALL SEND128 ;;;;;FOR 4562
RET
CMDB36:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#30H
MOV A,#03H
MOV @R0,A
INC R0
MOV A,#0A5H
MOV @R0,A
INC R0
MOV A,#00H
MOV @R0,A
MOV R0,#30H
LCALL CHKXOR
LCALL SEND128 ;;;;;FOR 4562
RET
;;;;;LOOK FOR THE DAY RECORD
;;;;;INPUT: YEAR,MONTH,DAY
CMDB37:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#30H
MOV A,#07H
MOV @R0,A
INC R0
MOV A,#0A6H
MOV @R0,A
INC R0 ;;;;GUN
MOV A,#00H
MOV @R0,A
INC R0
MOV R1,#YEAR
MOV A,@R1
MOV @R0,A
INC R0
INC R1
MOV A,@R1
MOV @R0,A
INC R0
MOV R1,#MONTH
MOV A,@R1
MOV @R0,A
INC R0
MOV R1,#DAY
MOV A,@R1
MOV @R0,A
MOV R0,#30H
LCALL CHKXOR
LCALL SEND128 ;;;;;FOR 4562
RET
;;;;;LOOK FOR THE MONTH RECORD
;;;;;INPUT: YEAR,MONTH
CMDB38:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#30H
MOV A,#06H
MOV @R0,A
INC R0
MOV A,#0A7H
MOV @R0,A
INC R0 ;;;;GUN
MOV A,#00H
MOV @R0,A
INC R0
MOV R1,#YEAR
MOV A,@R1
MOV @R0,A
INC R0
INC R1
MOV A,@R1
MOV @R0,A
INC R0
MOV R1,#MONTH
MOV A,@R1
MOV @R0,A
MOV R0,#30H
LCALL CHKXOR
LCALL SEND128 ;;;;;FOR 4562
RET
;;;;;CHANGE+++++++++
;;;;;MODIFY THE PRICE
;;;;;INPUT: PRICE ,GUN
;;;;;OUTPUT: AAH ----- SUCCESS
;;;;; EEH -----FAILE OR REFUSED BY SKSJ CPU
CMDB39:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#30H
MOV A,#05H
MOV @R0,A
INC R0
MOV A,#0A8H
MOV @R0,A
INC R0 ;;;;GUN
MOV A,#00H
MOV @R0,A
INC R0
MOV R1,#PRICE
MOV A,@R1
MOV @R0,A
INC R0
INC R1
MOV A,@R1
MOV @R0,A
MOV R0,#30H
LCALL CHKXOR
LCALL SEND128J ;;;;;FOR 4562
XRL A,#0AAH
JZ CHOK
MOV A,#0EEH
JMP ENDCHJ
CHOK:
MOV A,#0AAH
ENDCHJ:
RET
CMDB312:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#30H
MOV A,#02H
MOV @R0,A
INC R0
MOV A,#0ABH
MOV @R0,A
MOV R0,#30H
LCALL CHKXOR
LCALL SEND128 ;;;;;FOR 4562
RET
;;;;;SET THE REAL TIME
;;;;;INPUT: YEAR,MONTH,DAY,HOUR,MINUTE
CMDB310:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#30H
MOV A,#08H
MOV @R0,A
INC R0
MOV A,#0A9H
MOV @R0,A
INC R0
MOV R1,#YEAR
MOV A,@R1
MOV @R0,A
INC R0
INC R1
MOV A,@R1
MOV @R0,A
INC R0
MOV R1,#MONTH
MOV A,@R1
MOV @R0,A
INC R0
MOV R1,#DAY
MOV A,@R1
MOV @R0,A
INC R0
MOV R1,#HOUR
MOV A,@R1
MOV @R0,A
INC R0
MOV R1,#MINUTE
MOV A,@R1
MOV @R0,A
MOV R0,#30H
LCALL CHKXOR
LCALL SEND128 ;;;;;FOR 4562
RET
CMDB311:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#30H
MOV A,#03H
MOV @R0,A
INC R0
MOV A,#0AAH
MOV @R0,A
INC R0
MOV R1,#MODE
MOV A,@R1
MOV @R0,A
MOV R0,#30H
LCALL CHKXOR
LCALL SEND128 ;;;;;FOR 4562
RET
CMDB313:
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#30H
MOV A,#04H
MOV @R0,A
INC R0
MOV A,#0ACH
MOV @R0,A
INC R0
MOV R1,#GUNNUM
MOV A,@R1
MOV @R0,A
INC R0
MOV R1,#MODE
MOV A,@R1
MOV @R0,A
MOV R0,#30H
LCALL CHKXOR
LCALL SEND128 ;;;;;FOR 4562
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STEST: ;;;;;NOT USE
MOV A,R2
PUSH ACC
MOV A,B
RLC A
MOV B,A
MOV SKD,C
MOV R2,#07H
MOV R7,#0FFH
TESTLF:
MOV C,SKC
JC TESTLF
TESTHF:
MOV C,SKC
JNC TESTHF
MOV A,B
RLC A
MOV B,A
MOV SKD,C
DJNZ R2,TESTLF
TTTF:
POP ACC
MOV R2,A
RET
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?