⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x5045_new.asm

📁 硬件看门狗X5045的汇编程序
💻 ASM
字号:
;============================================================
CS_5045    EQU    P3.3
SO_5045    EQU    P3.7
SI_5045    EQU    P1.2
SCK_5045   EQU    P1.3
WP_5045    EQU    P1.6
;------------------------------------------------------------
WX5045_DATA EQU    30H;写入数据的地址缓冲区
WX5045_ADDR EQU    31H;写人数据缓冲区
RX5045_DATA EQU    32H;读出数据的地址缓冲区
RX5045_ADDR EQU    33H;读出数据缓冲区
;------------------------------------------------------------
WREN_5045  EQU    00000110B;设置写使能锁存器,允许写操作
WRDI_5045  EQU    00000100B;复位写使能锁存器,禁止写操作
RDSR_5045  EQU    00000101B;读状态寄存器
WRSR_5045  EQU    00000001B;写状态寄存器
STATUS_REG EQU    00000000B;设置DOG时间设置为1.4秒,无写保护
READ_5045 EQU     00000011B;把开始于所选地址的存储器中的数据读出
WRITE_5045 EQU    00000010B;把数据写入开始于所选地址的存储器
; READ_5045,  WRITE_5045 第三位为1的时候是下半页
;-------------------------------------------------------------;
;看门狗定时器的预置时间是通过X25045的状态寄存器的相应位来设定的。
;如表2所示,X25045状态寄存器共有6位有含义,其中WD1、WD0和看门狗电路有关,
;其余位和EEPROM的工作设置有关。
; D7  D6  D5  D4   D3   D2   D1    D0
; X   X   WD1 WD0  BL1  BL0  WEL   WIP
;表2 X25045状态寄存器
;WD1=0,WD0=0,预置时间为1.4s。
;WD1=0,WD0=1,预置时间为0.6s。
;WD1=1,WD0=0,预置时间为0.2s。
;WD1=1,WD0=1,禁止看门狗工作。
;/第3位和第2位为BL1,BL0,是写保护设置位,
;00为无保护,01为保护180-1FF,10为保护100-1FF,11为保护000-1FF.
;第1位为WEL, 当他为1时代表已经"写使能"设置了,现在可以写了,只读位.
;第0位为WIP,当他为1时代表正在进行写操作,是只读*/
;==============================================================
;==============================================================
           ORG    0000H
           AJMP   MAIN
;==============================================================        
   
;向X5045写入一字节数据
X5045_IN:  MOV    R7,#8
X5045_IN0:
           ;CLR    SCK_5045
           RLC    A
           MOV    SI_5045,C
           CLR    SCK_5045
           NOP
           NOP
           SETB   SCK_5045
           DJNZ   R7,X5045_IN0
           
           RET
;--------------------------------------------------------------
;READ ONE BYTE FROM X5045
X5045_OUT: MOV    R7,#8
           ;CLR    A
X5045_OUT0:;CLR    C
           SETB   SCK_5045
           CLR    SCK_5045
           MOV    C,SO_5045
           ;SETB   SCK_5045
           RLC    A
           DJNZ   R7,X5045_OUT0
           RET
;--------------------------------------------------------------
;允许写操作
W_Enable:  CLR    SCK_5045
           CLR    CS_5045
           MOV    A,#WREN_5045
           ACALL  X5045_IN
           CLR    SCK_5045
           SETB   CS_5045
           
           RET
;--------------------------------------------------------------
;复位时间位和数据保护位写入状态寄存器
;---------------------------------------------------------------
WRSR_CMD:  ACALL  W_Enable  ;允许写操作
           CLR    SCK_5045
           CLR    CS_5045
           MOV    A,#WRSR_5045;写状态寄存器 命令
           ACALL  X5045_IN
           MOV    A,#STATUS_REG;设置看门狗
           ACALL  X5045_IN

           CLR    SCK_5045
           SETB   CS_5045
;--------------------------------------------------------------
Check_Write:;等待X25045结束内部写周期
           MOV    R6,#100
WRSR_CMD0: ACALL  RDSR_CMD
  ;*判断是否WIP=0,即判断是否写入过程已经结束,若结束就跳出
           JNB    ACC.0,WRSR_CMDQ ;否则继续等待直到达到最大记数值
           ACALL  RST_DOG
           DJNZ   R6,WRSR_CMD0
WRSR_CMDQ: RET

;--------------------------------------------------------------
;读状态寄存器
RDSR_CMD:  CLR    SCK_5045
           CLR    CS_5045
           MOV    A,#RDSR_5045;读状态寄存器 命令
           ACALL  X5045_IN
           ACALL  X5045_OUT
           CLR    SCK_5045
           SETB   CS_5045
           RET
;--------------------------------------------------------------
;喂狗程序
RST_DOG:   SETB   P3.3      ;*** 在TEACHER WU的板上需加上这三句,因其有X5045
           NOP              ;*** X5045复位功能,产生复位,使程序从头走,
           CLR    P3.3   
           RET
;---------------------------------------------------------------
;向X5045 写入一个相应地址的一个数据
;地址在:WX5045_ADDR
;数据:WX5045_DATA
;----------------------------------------------------------------
Write_X5045:ACALL  W_Enable
           CLR    SCK_5045
           CLR    CS_5045
           MOV    A,#Write_5045;写入数据的命令
           ACALL  X5045_IN
           MOV    A,WX5045_ADDR;写入地址
           ACALL  X5045_IN
           MOV    A,WX5045_DATA;写入数据
           ACALL  X5045_IN
           CLR    SCK_5045
           SETB   CS_5045
           ACALL   Check_Write
           RET
;------------------------------------------------------------------
;从X5045读出一个相应地址的一个数据
;地址:RX5045_ADDR
;数据:RX5045_DATA
;------------------------------------------------------------------
Read_X5045:CLR    CS_5045
           CLR    SCK_5045
           MOV    A,#READ_5045
           ACALL  X5045_IN
           MOV    A,RX5045_ADDR
           ACALL  X5045_IN
           ACALL  X5045_OUT
           MOV    RX5045_DATA,A
           SETB   CS_5045
           RET
;-------------------------------------------------------------------
DELAY:     MOV    R6,#0
DELAY0:    MOV    R7,#0
           DJNZ   R7,$
           DJNZ   R6,DELAY0
           RET
;==============================================================
MAIN:      MOV    SP,#07H
           MOV    WX5045_ADDR,#1
           MOV    WX5045_DATA,#55H
           ACALL  Write_X5045
           
          
           MOV    WX5045_ADDR,#3
           MOV    WX5045_DATA,#51H
           ACALL  Write_X5045
           ;-----------------
            MOV    RX5045_ADDR,#1
           ACALL  Read_X5045
           CJNE   A,#55H,MAINL
           CLR    P1.7
           ACALL  DELAY
           
           MOV    RX5045_ADDR,#3
           ACALL  Read_X5045
           CJNE   A,#51H,MAINL           
           CLR    P1.6
           ;MOV    WX5045_ADDR,#2
           ;ACALL  Read_X5045
           ;CJNE   A,#51h,MAINL
           ;CLR    P1.5
MAINL:     SETB   P3.3                    ;*** 在TEACHER WU的板上需加上这三句,因其有X5045
           NOP                            ;***  X5045复位功能,产生复位,使程序从头走,
           CLR    P3.3              
           SJMP   MAINL

;==============================================================
           END

        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -