📄 x5645.asm
字号:
SK BIT P1.1
SO BIT P3.1
SI BIT P1.6
;NCS BIT P1.4
ORG 0000H
LJMP TEST
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; READ AND WRITE X5645
; P1.1 IS SO
; P1.2 IS SK
; P1.3 IS SI
; P1.4 IS NCS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ADD16_INC: MOV A,R6
ADD A,#1
MOV R6,A
CLR A
ADDC A,R7
MOV R7,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 双字节数左环移1位
; input: (R7,R6)
; output: (R7,R6)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
R16L1: CLR C
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R7
MOV ACC.0,C
MOV R7,A
RET
CLR_CS: CLR P1.2
CLR P1.3
RET
SET_CS: SETB P1.2
SETB P1.3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; write 16 OR 8 bits
; input: ( R7,R6)--16 bits
; R7---8 bits
; use R5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE_16BITS: MOV R5,#16
SJMP WRITE_BITS_1
WRITE_8BITS: MOV R5,#8
WRITE_BITS_1: ACALL R16L1
CLR SK
;NOP
;NOP
MOV A,R6
MOV C,ACC.0
MOV SI,C
;NOP
;NOP
SETB SK
DJNZ R5,WRITE_BITS_1
CLR SK
;NOP
;NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; read 8 bits
; output: A
; use R5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ_8BITS: MOV R5,#8
CLR SK
;NOP
;NOP
READ_8BITS_1: SETB SK
;NOP
;NOP
MOV C,SO
CLR SK
RLC A
DJNZ R5,READ_8BITS_1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; READ STATUS UNTIL WIP=0
; use R5,R6,R7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ_STATUS: CLR SK
;NOP
;NOP
LCALL CLR_CS ;CLR NCS
;NOP
;NOP
MOV R7,#05H
ACALL WRITE_8BITS
ACALL READ_8BITS
LCALL SET_CS ;SETB NCS
;NOP
;NOP
SETB SK
MOV C,ACC.0
JC READ_STATUS
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; WREN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WREN: MOV R7,#06
LCALL WRITE_8BITS
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; WRITE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE: MOV R7,#02H
ACALL WRITE_8BITS
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; READ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ: MOV R7,#03H
ACALL WRITE_8BITS
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; WRDI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRDI: MOV R7,#04H
ACALL WRITE_8BITS
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; WRITE_EEPROM
; input: (R4,R3)---address
; R2---data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE_EEPROM: LCALL SET_CS
SETB SK
SETB SI
SETB SO
ACALL READ_STATUS
CLR SK
;NOP
;NOP
LCALL CLR_CS ;CLR NCS
;NOP
;NOP
LCALL WREN
LCALL SET_CS ;SETB NCS
;NOP
;NOP
CLR SK
;NOP
;NOP
LCALL CLR_CS ;CLR NCS
;NOP
;NOP
LCALL WRITE
MOV A,R4
MOV R7,A
MOV A,R3
MOV R6,A
LCALL WRITE_16BITS
MOV A,R2
MOV R7,A
LCALL WRITE_8BITS
LCALL SET_CS ;SETB NCS
;NOP
;NOP
CLR SK
;NOP
;NOP
LCALL CLR_CS ;CLR NCS
LCALL WRDI
LCALL SET_CS ;SETB NCS
;NOP
;NOP
SETB SK
SETB SI
SETB SO
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; READ_EEPROM
; input: (R4,R3)---address
; out: R2---data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ_EEPROM: LCALL SET_CS
SETB SK
SETB SI
SETB SO
LCALL READ_STATUS
CLR SK
;NOP
;NOP
LCALL CLR_CS ;CLR NCS
;NOP
;NOP
LCALL READ
MOV A,R4
MOV R7,A
MOV A,R3
MOV R6,A
LCALL WRITE_16BITS
LCALL READ_8BITS
MOV R2,A
LCALL SET_CS ;SETB NCS
;NOP
;NOP
SETB SK
SETB SI
SETB SO
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 2字节存eeprom程序MEMORY
; input: (35H,34H)---首地址
; (33H,32H)---数据
; output: (35H,34H)---首地址+2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MEMORY: MOV R4,35H
MOV R3,34H
MOV R2,32H
LCALL WRITE_EEPROM
MOV R7,35H
MOV R6,34H
LCALL ADD16_INC
MOV 35H,R7
MOV 34H,R6
MOV R4,35H
MOV R3,34H
MOV R2,33H
LCALL WRITE_EEPROM
MOV R7,35H
MOV R6,34H
LCALL ADD16_INC
MOV 35H,R7
MOV 34H,R6
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 2字节调出eeprom程序MEMORY_OUT
; input: (35H,34H)---首地址
; output: (33H,32H)---数据
; (35H,34H)---首地址+2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MEMORY_OUT: MOV R4,35H
MOV R3,34H
LCALL READ_EEPROM
MOV 32H,R2
MOV R7,35H
MOV R6,34H
LCALL ADD16_INC
MOV 35H,R7
MOV 34H,R6
MOV R4,35H
MOV R3,34H
LCALL READ_EEPROM
MOV 33H,R2
MOV R7,35H
MOV R6,34H
LCALL ADD16_INC
MOV 35H,R7
MOV 34H,R6
RET
TEST: NOP
LCALL WRITE_EEPROM
NOP
LCALL READ_EEPROM
NOP
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -