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

📄 5045.asm

📁 这是5045的程序
💻 ASM
字号:
      ORG     0000H
   SHU   EQU   38H     ;数字存放首址
   A1    EQU   37H     ;数字存放开始,结束判断
   A2    EQU   36H     ;数字存放长度记录
   A3    EQU   35H     ;数字存放地址预存位
   E5DZ  EQU   40H     ;读出5045数据的储存首址
   FMQ   BIT   P3.7    ;蜂鸣器控制
   JSD   BIT   P3.6    ;键盘指示灯控制
   SUO   BIT   P3.5    ;布撤防控制
   SO    BIT   P3.4    ;5045串行输出
   SI    BIT   P3.2    ;5045串行输入
   SCK   BIT   P3.1    ;5045串行时钟
   CS    BIT   P3.0    ;5045片选
 
 ;********************************

   ;*****恢复出厂值**
       
HFCC:  MOV   A,#32H
       CLR    JSD
        ACALL WRSR
      
       MOV   SP,#70H
       MOV   R1,#SHU
       MOV   @R1,#01H
       INC   R1
       MOV   @R1,#01H
       INC   R1
       MOV   @R1,#01H
       INC   R1
       MOV   @R1,#01H
       INC   R1
       SETB   JSD
       ACALL XR55          ;(写入5045)
       CLR   SUO
       ACALL D55B
       CLR   FMQ
JS:    SJMP   JS
   
;********读5045比较密码************
D55B:   MOV   R3,#08H    ;5045的首址
        MOV   R0,#E5DZ   ;读出5045的内容的储存首址
        MOV   R2,#04H    ;储存长度
        ACALL READX
         
         RET

;****  写入5045   ********
XR55:   MOV   R3,#08H    ;5045的首址
        MOV   R0,#SHU   ;读出5045的内容的储存首址
        MOV   R2,#04H    ;储存长度
        ACALL WRITEX
        RET

;*************************************************************************
;                  5045程序
;*************************************************************************
;(1)功能:将缓冲区数据写入指定地址开始的单元。
;入口:JHW是E2PROM单元地位低八位。
WRITEX:  LCALL   STAX        ;指令启动
         MOV     A,#06H      ;输入WREN
         LCALL   BYTE_OUT
         LCALL   STAX       ;下一指令启动
         MOV     A,#02H      ;输入WRITE
         LCALL   BYTE_OUT
         MOV     A,R3        ;输入单元地址低八位
         LCALL   BYTE_OUT
BYWR:    MOV     A,@R0         ;从ESJ取数输入5045
         LCALL   BYTE_OUT
         INC     R0
         DJNZ    R2,BYWR
         LCALL   ENDX         ;指令结束
         LCALL   WIP_CHK      ;等待WIP=0
          RET
;(2)X25045数据读出程序
;功能:把指定地址开始的单元数据读出并放入缓冲区
;入口:与写入程序相同。
READX:   LCALL  STAX
         MOV    A,#03H       ;输入READ
         LCALL  BYTE_OUT
         MOV    A,R3        ;输入低八位地址
         LCALL  BYTE_OUT
BYRD:    LCALL  BYTE_IN      ;输出数据
         MOV    @R0,A
         INC     R0
         DJNZ    R2,BYRD
         LCALL  ENDX
          RET
;(3)X25045状态寄存器写入程序
;功能:对状态寄存器进行设置。
;入口:ACC是修改值。
WRSR:    LCALL   STAX
         PUSH    ACC
         MOV     A,#06H       ;输出WREN
         LCALL   BYTE_OUT
         LCALL   STAX
         MOV     A,#01H       ;输出WRSR
         LCALL   BYTE_OUT
         POP     ACC           ;输出设置值
         LCALL   BYTE_OUT
         LCALL   ENDX
         LCALL   WIP_CHK     ;等待WIP=0
          RET
;(4)X25045状态寄存器读出程序
;功能:读出状态寄存器当前值。
;出口:ACC是当前值。
RDSR:    LCALL   STAX
         MOV     A,#05H
         LCALL   BYTE_OUT
         LCALL   BYTE_IN
         LCALL   ENDX
          RET
;(5)其他子程序
WIP_CHK: LCALL   RDSR     ;等待X25045结束内部写周期
         JB      ACC.0,WIP_CHK
         RET
STAX:    SETB    CS          ;启动X25045指令
         NOP              ;先拉高CS,再拉你SCK,最后拉低CS
         CLR     SCK
         NOP
         CLR     CS
         NOP
         RET
ENDX:    CLR     SCK           ;结束X25045指令
         SETB    CS           ;先拉低SCK后拉高CS
         NOP
         NOP
         RET
BYTE_OUT: MOV    R4,#08H   ;向X25045写入一字节数据
BOUT1:    CLR    SCK
          RLC    A
          MOV    SI,C
          SETB   SCK
          NOP
          NOP
          DJNZ   R4,BOUT1
          RET
BYTE_IN:  MOV    R4, #08H     ;从X25045读出一字节数据
BIN1:     CLR    SCK
          MOV    C,SO
          RLC    A
          SETB   SCK
          NOP
          NOP
          DJNZ    R4,BIN1
          RET
RST_DOG:  SETB    CS         ;复位看门狗定时器
          NOP
          CLR     CS
          NOP
          SETB    CS
          RET
           END

⌨️ 快捷键说明

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