⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x5645.asm

📁 储存芯片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 + -