2051對X25045的寫入和讀出匯編程序
;* 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
評論