单片机 > 单片机程序设计 > 详情

X5045的汇编读写程序

发布时间:2025-12-19 发布时间:
|

X5045读写子程序
;**************extern EEPROM const  define******
WREN            EQU 06H         ;X5045 WRITE ENABLE
;WRDI            EQU 04H         ;X5045 write disable 
RDSR            EQU 05H         ;Read x5045 status register
WRSR            EQU 01H         ;Write x5045 status register
READ            EQU 03H         ;Read data from x5045 instruction 
WRITE           EQU 02H         ;Write data to x5045 instruction
STATUS          EQU 30H         ;STATUS REGISTER INIT
;*********************************************************
;***********读数据子程序********************
;数据最终在以R0间址的缓冲区中
RDX5_DAT:       CLR A
RDX5_DAT0:      MOV R7,#08H    ;8bit
RDX5_DAT1:      CLR C
                SETB SCK
                NOP 
                NOP
                NOP
                NOP
                NOP
                CLR SCK         ;产生下降边沿
                NOP 
                NOP
                NOP
                NOP
                NOP
                MOV C,SDO       ;读出数据
                RLC A           ;SO->Cy->ACC.0
                DJNZ R7,RDX5_DAT1
                MOV @R0,A       ;数据暂存在缓冲区
                INC R0
                CLR ACC
                DJNZ R1,RDX5_DAT0 ;未完继续
                CLR SCK
                RET
;********写数据子程序*******************
;********数据长度在 R1,数据在RO指向的地址中
WRITE_CD:       CLR A
                CLR C
WRITE_CD0:      MOV A,@R0
                MOV R7,#08H
WRITE_CD1:      CLR SCK
                RLC A
                MOV SDI,C
                CPL SCK               ;SCK FOR 1 DATA IS valideation
                CLR C
                DJNZ R7,WRITE_CD1
                INC R0                ;NEXT BYTE
                DJNZ R1,WRITE_CD0        
                CLR SDI
                RET
;**************读状态寄存器子程序
READ_STATUS:    CLR A
                CLR C
                CLR CS        
                MOV A,#RDSR      ;Read status register instruction
                MOV R7,#08H     ;
READ_ST1:       CLR SCK
                RLC A           ;FRIST FOR MSB BIT
                MOV SDI,C
                SETB SCK         ;Make the rising edge of clock
                CLR C
                DJNZ R7,READ_ST1
                MOV R7,#08H
READ_ST2:       CLR C
                SETB SCK         ;DATA FROM X5045 TO CPU by the fulling edge
                NOP
                NOP
                NOP 
                NOP
                NOP
                CPL SCK
                NOP
                NOP 
                NOP
                NOP
                NOP
                MOV C,SDO
                RLC A           ;SO->Cy->ACC.0
                DJNZ R7,READ_ST2
                MOV 30H,A     ;DATA SAVE TO "X5045" BUFFER
                CLR SCK
                SETB CS
                RET

另外,如果不用X5045的看门狗的时候,请把它给禁止掉。
;**************STATUS REGISTER INIT*****
ST_INIT:        LCALL READ_STATUS
                MOV A,30H
                JB ACC.0,$-5           ;X5045 IS BUSY THEN TURN CONTIUE TO READ
                MOV R0,#30H
                MOV @R0,#WRSR           ;WRITE STATUS REGISTER INSTRUCTION
                MOV R1,#01H
                CLR CS                  ;X5045 CHIP IS SELECTED
                LCALL WRITE_CD
                MOV R0,#30H
                MOV @R0,#STATUS
                MOV R1,#01H
                LCALL WRITE_CD          ;WRITE DATA TO X5045
                SETB CS
                RET



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
快速学Arm(9)--处理器的状态,模式以及概括了解内部寄存器