加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > 单片机学习

2051对X25045的写入和读出汇编程序

时间:2013-11-23  来源:123485.com  作者:9stone

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

分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->单片机学习
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门