📄 cpu4563.asm
字号:
;;; WISE TM READ/WRITE PROGRAM
;;;;;;P3.4 T0
;;;;;;P3.5 T1
REQ EQU P1.0
ANSWER EQU P1.1
CLK EQU P1.2
DIN EQU P1.3
O112 EQU P1.5
LOWCK EQU 00H
HIGHCK EQU 01H
DDDD EQU 02H
OIL EQU 10H
MONEY EQU 13H
PRICE EQU 16H
GUNNUM EQU 19H
ORG 0
SJMP IINT
NOP
RETI
NOP
NOP
NOP
NOP
NOP
NOP
NOP
;--- TIMER T0 INT.
ORG 0BH
LJMP IINT
;------------
NOP
NOP
NOP
NOP
NOP
RETI
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETI
NOP
NOP
NOP
NOP
NOP
NOP
NOP
;-- COMM INT
ORG 23H
JMP IINT
;------
NOP
NOP
NOP
NOP
NOP
RETI
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
ORG 50H
IINT:
MOV A,#00H
MOV PSW,A
MOV SP,#80H ;
CLR EA
CLR HIGHCK
CLR LOWCK
CLR DDDD
BEGIN:
NOP
NOP
NOP
CLR REQ
NOP
SETB REQ
NOP
SETB ANSWER
NOP
SETB CLK
NOP
CLR CLK
NOP
SETB DIN
NOP
CLR DIN
NOP
NOP
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
MOV R0,#GUNNUM
MOV A,#00H
MOV @R0,A
MOV R0,#OIL ;;;;;FILL OIL DATA
MOV R2,#03H
LOIL:
MOV A,#44H
MOV @R0,A
INC R0
DJNZ R2,LOIL
MOV R0,#MONEY ;;;;;FILL MONEY DATA FIELD
MOV R2,#03H
POIL:
MOV A,#55H
MOV @R0,A
INC R0
DJNZ R2,POIL
MOV R0,#PRICE ;;;;FILL PRICE FIELD
MOV R2,#03H
KOIL:
MOV A,#77H
MOV @R0,A
INC R0
DJNZ R2,KOIL
LCALL CMDB34
NOP
MOV R0,#30H
LCALL CHKXOR
NOP
;;;LCALL S128B
LCALL SEND128 ;;;;;FOR 4562
NOP
NOP
NOP
;;;;;;;;;;--------------------------
YYYY:
NOP
NOP
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
NOP
MOV R1,#0A3H
MOV R2,#01H
LCALL CMDB31 ;;;POWER ON......
NOP
MOV R0,#30H
LCALL CHKXOR
NOP
LCALL SEND128 ;;;;;FOR 4562
SETB CLK
NOP
NOP
JMP YYYY
NOP
NOP
NOP
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
NOP
LCALL CMDB312 ;;;DISPLAY REAL TIME
NOP
MOV R0,#30H
LCALL CHKXOR
NOP
LCALL SEND128 ;;;;;FOR 4562
SETB CLK
NOP
NOP
NOP
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
NOP
LCALL CMDB35 ;;;DISPLAY DIRECTLY
NOP
MOV R0,#30H
LCALL CHKXOR
NOP
LCALL SEND128 ;;;;;FOR 4562
SETB CLK
NOP
NOP
NOP
;;;;;;;;;SSSSSSSSSTTTTTTTTTTTTTTTTTTT
NOP
NOP
MOV R0,#30H
LCALL CLRBLK ;;;FILL THE UNITS FROM 30H-->3FH WITH "00H"
NOP
LCALL CMDB310
NOP
MOV R0,#30H
LCALL CHKXOR
NOP
LCALL SEND128 ;;;;;FOR 4562
SETB CLK
NOP
NOP
NOP
MOV R2,#16
MOV R1,#30H
LDLD: MOV A,@R1
MOV B,A
LCALL WABYTE
INC R1
DJNZ R2,LDLD
NOP
NOP
NOP
MOV R2,#16
MOV R1,#20H
LOLO: LCALL RABYTE
MOV A,B
MOV @R1,A
INC R1
DJNZ R2,LOLO
NOP
NOP
NOP
MOV R0,#30H
LCALL CLRBLK
NOP
MOV R0,#30H
LCALL CHKSUM
NOP
LCALL DELAY
NOP
LJMP BEGIN
;;;;;;NOT USED
ASK:
CLR REQ
MOV C,REQ
JC ASK
MOV C,DDDD
MOV DIN,C
MOV R3,#00H
WAITL:
MOV C,REQ
JC OUTT
MOV C,CLK
JC WAITL
SETB LOWCK
WAITH:
MOV C,REQ
JC OUTT
MOV C,CLK
JNC WAITH
MOV C,DDDD
CPL C
MOV DIN,C
MOV DDDD,C
INC R3
MOV A,R3
CLR C
SUBB A,#128
JNC OUTT
; MOV C,REQ
; JNC WAITL
JMP WAITL
OUTT:
RET
;;;;TEST CLOCK ..........
;;;;SEND 128 BIT DATA TO MONITOR
;;;;INPUT: 30H--->3FH:THE 128 BIT DATA
;;;;OUTPUT: E0H ----COMMUNICATION ERROR
;;;;;; EEH ----REFUSED BY MONITOR
;;;;;; AAH ----SUCCESS
S128B:
CLR REQ
MOV C,REQ
JC S128B
MOV R0,#30H
MOV A,@R0
MOV B,A
LCALL SFIRST
SETB REQ ;;;GET READY FOR MONITOR
JC ERRORS
MOV R2,#15
MOV R0,#31H
LOOPS:
MOV A,@R0
MOV B,A
LCALL SABYTE
JC ERRORS
INC R0
DJNZ R2,LOOPS
MOV R5,#0FFH
WAITREQ:
LCALL DELAY
MOV C,REQ
JC OVERREQ
DJNZ R5,WAITREQ
LJMP ERRSHOU
OVERREQ:
MOV R5,#0FFH
WAITANS:
LCALL DELAY
MOV C,ANSWER
JC OVERANS
DJNZ R5,WAITANS
LJMP ERRORS
OVERANS:
MOV A,#0AAH
JMP OUT128B
ERRSHOU:
MOV A,#0E0H
JMP OUT128B
ERRORS:
MOV A,#0EEH
OUT128B:
RET
;;;;TEST CLOCK ..........
;;;SEND A BYTE TO MONITOR
SABYTE:
MOV A,R2
PUSH ACC
MOV R2,#08H
MOV R6,#0FFH
R703: MOV R7,#0FFH
WAITLS:
MOV C,CLK
JNC OVERL00
DJNZ R7,WAITLS
DJNZ R6,R703
LJMP ERRORB
OVERL00:
MOV R6,#0FFH
R704: MOV R7,#0FFH
WAITHS:
MOV C,CLK
JC OVERH00
DJNZ R7,WAITHS
DJNZ R6,R704
LJMP ERRORB
OVERH00:
MOV A,B
RLC A
MOV B,A
MOV DIN,C
DJNZ R2,WAITLS
CLR C
JMP OUTTS
ERRORB:
SETB C
OUTTS:
POP ACC
MOV R2,A
RET
;;;;TEST CLOCK ..........
;;;;; SEND THE FIRST BYTE OF 128 BYTE
SFIRST:
MOV A,R2
PUSH ACC
MOV A,B
RLC A
MOV B,A
MOV DIN,C
MOV R2,#07H
MOV R6,#0FFH
RR7: MOV R7,#0FFH
WAITLF:
MOV C,CLK
JNC OVERLL
DJNZ R7,WAITLF
DJNZ R6,RR7
LJMP ERRORF
OVERLL:
MOV R6,#0FFH
R702: MOV R7,#0FFH
WAITHF:
MOV C,CLK
JC OVERHH
DJNZ R7,WAITHF
DJNZ R6,R702
LJMP ERRORF
OVERHH:
MOV A,B
RLC A
MOV B,A
MOV DIN,C
DJNZ R2,WAITLF
CLR C
JMP OUTTF
ERRORF:
SETB C
OUTTF:
POP ACC
MOV R2,A
RET
DELAY:
MOV R7,#08H ;;;WHEN R6=0F7H R7=02H THE TIME IS 1MS
DD11:MOV R6,#0ACH
DD22:DJNZ R6,DD22
DJNZ R7,DD11
RET
;;;;GENERATE CLOCK TO 4562........
;;;;SHIFT 128 BIT DATA TO MONITOR THROUGH 4562
;;;;INPUT: 30H--->3FH:THE 128 BIT DATA
;;;;OUTPUT: E0H ----COMMUNICATION ERROR
;;;;;; EEH ----REFUSED BY MONITOR
;;;;;; AAH ----SUCCESS
SEND128:
MOV R2,#16
MOV R0,#30H ;;SHIFT 128 BIT DATA TO 4562
LOOPWS:
MOV A,@R0
MOV B,A
LCALL WABYTE
INC R0
DJNZ R2,LOOPWS
SETB CLK
CCC:
SETB ANSWER
JNB ANSWER,CCC
CONCLR: ;;;;ACTIVE THE REQUST LINE
CLR REQ
MOV C,REQ
JC CONCLR
BBB:
SETB ANSWER
JB ANSWER,BBB
LCALL DDLL
LCALL DDLL
LCALL DDLL
LCALL DDLL
SETB REQ
SETB ANSWER
MOV R5,#0FFH ;;;WAIT FOR -REQ- TO TURN 1
WWWWREQ:
LCALL DELAY
MOV C,REQ
JC OOOOREQ
DJNZ R5,WWWWREQ
LJMP ERRRECE
OOOOREQ:
MOV R5,#0FFH ;;;WAIT FOR ANSWER TO TURN 1
WWWWANS:
LCALL DELAY
MOV C,ANSWER
JC OOOOANS
DJNZ R5,WWWWANS
LJMP ERRWWW
OOOOANS:
MOV A,#0AAH
JMP OUT128
ERRRECE:
MOV A,#0E0H
JMP OUT128
ERRWWW:
MOV A,#0EEH
OUT128:
RET
RABYTE:
MOV A,R2
PUSH ACC
MOV R2,#8
MOV A,#0FFH
MOV B,A
LPREAD:
CLR CLK
NOP
LCALL DDLL1
MOV C,O112 ;;;THE OUTPUT PIN OF AT45D041.......
MOV A,B
RLC A
MOV B,A
LCALL DDLL2
NOP
SETB CLK ;;;
LCALL DDLL
NOP
DJNZ R2,LPREAD
NOP
SETB CLK
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 CLK
NOP
LCALL DDLL1
MOV A,B
RLC A
MOV B,A
MOV DIN,C ;;;SI THE INPUT PIN OF AT45D041
LCALL DDLL2
NOP
SETB CLK
LCALL DDLL
NOP
DJNZ R2,LPWR
NOP
SETB CLK
POP ACC
MOV R2,A
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
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
RET
;;;
CMDB32:
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
RET
CMDB312:
MOV R0,#30H
MOV A,#02H
MOV @R0,A
INC R0
MOV A,#0ABH
MOV @R0,A
RET
CMDB35:
MOV R0,#30H
MOV A,#0AH
MOV @R0,A
INC R0
MOV A,#0A4H
MOV @R0,A
INC R0
MOV A,#00H
MOV @R0,A
RET
CMDB310:
MOV R0,#30H
MOV A,#08H
MOV @R0,A
INC R0
MOV A,#0A9H
MOV @R0,A
RET
CMDB33:
MOV R0,#30H
MOV A,#02H
MOV @R0,A
INC R0
MOV A,#0A2H
MOV @R0,A
RET
;;;; SEND THE OIL DATA TO MONITOR
;;;;INPUT: OIL (3 BYTE) MONEY (3 BYTE) PRICE (3 BYTE)
;;;;; GUNNUM ( 1 BYTE)
CMDB34:
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
RET
MXJILU:
MOV R0,#30H
MOV A,#02H
MOV @R0,A
INC R0
MOV A,#0A5H
MOV @R0,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STEST:
MOV A,R2
PUSH ACC
MOV A,B
RLC A
MOV B,A
MOV DIN,C
MOV R2,#07H
MOV R7,#0FFH
TESTLF:
MOV C,CLK
JC TESTLF
TESTHF:
MOV C,CLK
JNC TESTHF
MOV A,B
RLC A
MOV B,A
MOV DIN,C
DJNZ R2,TESTLF
TTTF:
POP ACC
MOV R2,A
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -