📄 x5045_new.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 + -