📄 14-6.asm
字号:
;***********************************************************************
; 功能 :X25045读写子程序
; 作者 :LIHJ
; 创建日期 :04-04-04
; 版本 :V1.0
; 修改日期 :
;************************************************************************
;公共函数声明,这些函数可以被外部程序所使用
PUBLIC WDTINI,KILLDOG,_WrtEEP,_RdEEP
;串行输入、输出、时钟、片选等引脚定义
EECS EQU P1.2 ;X25045片选线
EESIO EQU P1.1 ;输入、输出信号线
CLK EQU P1.0 ;时钟
;命令码定义
WREN_INST EQU 06H ;写使能命令
WRDI_INST EQU 04H ;写禁止命令
RDSR_INST EQU 05H ;读状态寄存器命令
WRSR_INST EQU 01H ;写状态寄存器命令
READ_INST EQU 03H ;读X25045命令
WRITE_INST EQU 02H ;写X25045命令
;看门狗复位时间定义
WDT_2HMS EQU 20H ;200 ms复位时间
WDT_6HMS EQU 10H ;600 ms复位时间
WDT_14HMS EQU 00H ;1.4s复位时间
;子程序
;X25045初始化
WDTINI:
LCALL WREN ;写操作使能
CLR EECS ;选中X25045
MOV A,#WRSR_INST ;参数准备
LCALL EEP_TXD ;写状态寄存器
MOV A,#WDT_6HMS ;
LCALL EEP_TXD ;设置复位时间
SETB EECS
RET
;喂X25045看门狗,选中一次X25045即可
KILLDOG:
CLR EECS
SETB EECS
RET
;CPU向存储器X25045写数据
;入口:R7(数据读写个数),R5(待写存储器地址),R3(数据区指针)
;R7(修改),R5(不变),R3(不变)
_WRTEEP:
LCALL WREN ;写操作使能
CLR EECS ;选中X25045
MOV A,#WRITE_INST
LCALL EEP_TXD ;写操作命令
MOV A,R5 ;获取写存储区基地址
LCALL EEP_TXD ;发送存储区基地址
MOV A,R3
MOV R0,A
;循环写操作,直到完成写操作
wrteep?LP:
MOV A,@R0 ;从发送缓冲区中取出数据
LCALL EEP_TXD ;写1byte
INC R0 ;更新写计数
DJNZ R7,wrteep?LP ;写操作完成判断
SETB EECS ;完成写操作,取消选中X25045
RET
;CPU读存储器X25045数据
;入口:R7(数据读写个数),R5(待写存储器地址),R3(数据区指针)
;R7(修改),R5(不变),R3(不变)
_RDEEP:
CLR EECS ;选中X25045
MOV A,#READ_INST ;准备参数
LCALL EEP_TXD ;发送读命令
MOV A,R5
LCALL EEP_TXD ;发送读数据区的基地址
MOV A,R3
MOV R0,A
rdeep?LP:
MOV A,#0FFH
LCALL EEP_RXD ;读1byte
MOV @R0,A ;将读取的数据写到缓冲区
INC R0
DJNZ R7,rdeep?LP ;判断读操作是否完成
SETB EECS
RET
;CPU与X25045通信,发送数据到X25045
;SCK上升沿锁存,下降沿移位
EEP_TXD:
MOV B,#8 ;发送一个字节,8bits
EEP_TXD?LP:
RLC A ;A的最高位移到C
MOV EESIO,C ;发送一位
SETB CLK ;产生一个时钟上升沿
NOP ;保持时钟信号高电平状态
NOP
NOP
NOP
CLR CLK
DJNZ B,EEP_TXD?LP ;判断发送是否完成
RLC A ;恢复C状态
RET
;CPU与X25045通信,接收X25045发送的数据
;SCK上升沿锁存,下降沿移位
EEP_RXD:
MOV B,#8 ;接收一个字节,8bits
EEP_RXD?LP:
SETB CLK
SETB EESIO ;读数据之前,先拉高信号线
NOP
MOV C,EESIO
RLC A ;A带C循环左移一位
CLR CLK
DJNZ B,EEP_RXD?LP ;判断一个字节数据是否接收完毕
RET
;写使能命令
wren:
MOV A,#WREN_INST
CLR EECS
LCALL EEP_TXD ;发送写使能命令
SETB EECS
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -