;************************************************************* ;* 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