|
;************************************************************* ;* title: X25045 ;*實現2051對X25045的寫入和讀出 , 及看門狗超時周期的設置。 ;* version: 1.0 ;* last date: 01.03.27 ;* target: At89c2051 at 12Mhz ;* design by: Heyuesheng 010-64889568 ;************************************************************* ;**** define register ****
;**** code
ORG 0000H AJMP START
ORG 0040H START: MOV SP,#60H MOV R0,#10H;將狀態寄存器置為00010000(即無寫保護,看門狗超時周期為600毫秒) ACALL WRSR
TEST: MOV R0,#89H;定義R0為寫入的數據(89H) MOV R1,#00H;定義R1為寫入數據的地址(00H) ACALL WRITE
MOV R0,#51H;定義R0為寫入的數據(51H) MOV R1,#01H;定義R1為寫入數據的地址(01H) ACALL WRITE MOV R1,#00H;定義R1為讀出數據的地址(00H) ACALL READ MOV R4,A;將讀出的數據存入R4 MOV R1,#01H;定義R1為讀出數據的地址(01H) ACALL READ MOV R5,A;將讀出的數據存入R5 SJMP TEST
;*******本子程序寫狀態寄存器 ;*入口參數:R0 WRSR: SETB P1.4 MOV R7,#10H ACALL DELAY CLR P1.4
MOV A,#01H;寫狀態寄存器指令 ACALL SIN
MOV A,R0;將狀態寄存器置為R0的值 ACALL SIN
SETB P1.4 RET
;*******寫使能子程序 ;*入口參數:無 WREN: SETB P1.2 ;將WP寫保護管腳置高,打開寫保護。 SETB P1.4 MOV R7,#10H ACALL DELAY CLR P1.4
MOV A,#06H;寫使能指令 ACALL SIN
SETB P1.4 RET
;*******寫入子程序 ;*入口參數: ;*R0 要寫入的數據 ;*R1 要寫入的地址 WRITE: ACALL WREN
SETB P1.4 MOV R7,#10H ACALL DELAY CLR P1.4
MOV A,#02H;寫指令 ACALL SIN
MOV A,R1;寫入數據的開始地址 ACALL SIN
MOV A,R0;將RO的值寫入地址為R1的單元 ACALL SIN
SETB P1.4 RET
;*******讀出子程序 ;*R1 要讀出數據的地址 READ: SETB P1.4 MOV R7,#10H ACALL DELAY CLR P1.4
MOV A,#03H;讀指令 ACALL SIN MOV A,R1;讀以R1為地址的數據 ACALL SIN
ACALL SOUT MOV R0,A
SETB P1.4 RET
;*******串行寫入 SIN: MOV R3,#8 LOOP1: RLC A MOV P1.1,C SETB P1.0 CLR P1.0 DJNZ R3,LOOP1 RET ;*******串行讀出 SOUT: MOV R3,#8 MOV A,#00H LOOP2: CLR C MOV C,P1.3 RLC A SETB P1.0 CLR P1.0 DJNZ R3,LOOP2 RET ;*******延時子程序 ;*入口參數:R7 DELAY: MOV R6,#0FFH DJNZ R6,$ DJNZ R7,DELAY RET
END |