2051對X25045的寫入和讀出匯編程序
;* title: X25045
;*實現(xiàn)2051對 X25045 的寫入和讀出,及看門狗超時周期的設(shè)置。
;* 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;將狀態(tài)寄存器置為 00010000(即無寫保護,看門狗超時周期為 600 毫秒)
ACALL WRSR
TEST:
MOV R0,#89H;定義R0 為寫入的數(shù)據(jù)(89H)
MOV R1,#00H;定義R1 為寫入數(shù)據(jù)的地址(00H)
ACALL WRITE
MOV R0,#51H;定義R0 為寫入的數(shù)據(jù)(51H)
MOV R1,#01H;定義R1 為寫入數(shù)據(jù)的地址(01H)
ACALL WRITE
MOV R1,#00H;定義R1 為讀出數(shù)據(jù)的地址(00H)
ACALL READ
MOV R4,A;將讀出的數(shù)據(jù)存入 R4
MOV R1,#01H;定義R1 為讀出數(shù)據(jù)的地址(01H)
ACALL READ
MOV R5,A;將讀出的數(shù)據(jù)存入 R5
SJMP TEST
;*******本子程序?qū)憼顟B(tài)寄存器
;*入口參數(shù):R0
WRSR: SETB P1.4
MOV R7,#10H
ACALL DELAY
CLR P1.4
MOV A,#01H;寫狀態(tài)寄存器指令
ACALL SIN
MOV A,R0;將狀態(tài)寄存器置為 R0 的值
ACALL SIN
SETB P1.4
RET
;*******寫使能子程序
;*入口參數(shù):無
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
;*******寫入子程序
;*入口參數(shù):
;*R0 要寫入的數(shù)據(jù)
;*R1 要寫入的地址
WRITE: ACALL WREN
SETB P1.4
MOV R7,#10H
ACALL DELAY
CLR P1.4
MOV A,#02H;寫指令
ACALL SIN
MOV A,R1;寫入數(shù)據(jù)的開始地址
ACALL SIN
MOV A,R0;將 RO 的值寫入地址為 R1的單元
ACALL SIN
SETB P1.4
RET
;*******讀出子程序
;*R1 要讀出數(shù)據(jù)的地址
READ: SETB P1.4
MOV R7,#10H
ACALL DELAY
CLR P1.4
MOV A,#03H;讀指令
ACALL SIN
MOV A,R1;讀以 R1 為地址的數(shù)據(jù)
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
;*******延時子程序
;*入口參數(shù):R7
DELAY: MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,DELAY
RET
END
評論