2051对X25045的写入和读出汇编程序
2012-06-30
标签: 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
        
        
        


可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号