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

📄 x5045.asm

📁 X5045全部功能均有体现的应用C程序源代码
💻 ASM
字号:
SO BIT P3.7
WP BIT P2.0
SI BIT P3.7
SCK BIT P3.6
CS BIT P2.1
ORG 0000H 
AJMP START 
ORG 0040H 
START:  MOV SP,#60H
SETB WP            ;写操作不保护
TEST:   MOV R4,#89H       ;定义R4为写入的数据(89H) 
MOV R3,#00H       ;定义R3为写入数据的地址(00H) 
ACALL  WRITE_B 
ACALL  READ_B 
SJMP TEST

;读状态寄存器子程序,将读出的X5045的状态存在A累加器中
READ_SR :LCALL STAX          ;调"启动X5045"指令
MOV A,#00000101B   ;将读状态寄存器指令送A累加器
      LCALL WRITE            ;调"写指令子程序"
LCALL READ            ;调"读数据子程序"
LCALL ENDX           ;调"结束X5045"指令
RET
;写状态寄存器子程序
WRITE_SR: LCALL STAX          ;调"启动X5045"指令
LCALL READ_SR         ;调"读状态寄存器"子程序
JB ACC.0,WRITE_SR     ;ACC.0(WIP)等于1,转WRITE_SR
WRITE_SR1:LCALL STAX          ;调"启动X5045"指令
MOV A,#00000110B   ;打开写使能开关
LCALL WRITE            ;将指令写入
LCALL STAX          ;调"启动X5045"指令
MOV A,#00000001B   ;送写状态寄存器指令
LCALL WRITE            ;将指令写入
MOV A,#00011000B    ;设看门狗定时时间为600ms,块保护地址为100H~1FFH
LCALL WRITE             ;将数据写入
LCALL ENDX           ;调"结束X5045"指令
RET
;读X5045存储器1个字节数据子程序,待读出的地址在R3中,读出后数据存R4
READ_B:LCALL READ_SR           ;调"读状态寄存器"子程序
JB ACC.0,READ_B        ;ACC.0(WIP)等于1,转READ_B等待
LCALL STAX            ;调"启动X5045"指令
MOV A,#03H           ;送"读EEPROM"指令,地址在00H~FFH间
LCALL WRITE              ;将指令写入
MOV A,R3             ;将R3中的地址送A
LCALL WRITE              ;将地址写入X5045
LCALL READ              ;读出X5045中的内容
MOV R4,A             ;将读出的内容送R4
LCALL ENDX             ;调"结束X5045"指令
RET
;写一个字节数据子程序,写入地址在R3中,数据在R4中
WRITE_B:LCALL READ_SR           ;调"读状态寄存器"子程序
JB ACC.0,WRITE_B        ; ACC.0(WIP)等于1,转WRITE_B等待
LCALL STAX            ;调"启动X5045" 子程序
MOV A,#06H           ;打开写使能开关
LCALL WRITE              ;将指令写入
LCALL STAX            ;调"启动X5045" 子程序
MOV A,#02H           ;送写EEPROM指令,地址在00H~FFH间
LCALL WRITE              ;将指令写入
MOV A,R3             ;将R3中的地址送A
LCALL WRITE              ;将地址写入X5045
MOV A,R4               ;送待写数据
LCALL WRITE            ;将数据写入
LCALL ENDX             ;调"结束X5045"子程序
RET
;以下是启动X5045子程序
STAX:SETB CS              ;启动X5045指令
NOP                ;先拉高CS,再拉低SCK,最后拉低CS
CLR SCK
NOP
CLR CS
NOP
RET
;以下是结束X5045子程序
ENDX:CLR SCK              ;结束X5045指令
SETB CS            ;先拉低SCK后拉高CS
NOP
NOP
RET
;以下是写X5045子程序
WRITE: MOV R0,#08H         ;写8位数据
WRITE1:RLC A                ;将A中的指令数据循环左移
MOV SI,C           ;将C中的第1位(最高位)送X5045的SI
CLR SCK
SETB SCK           ;将SCK设置为上升沿,以便通过SI脚进行数据的输入
DJNZ R0,WRITE1       ;R0不等0则转WRITE1,以便将A中的8位数据写完
RET
;以下是读X5045子程序
READ: MOV R0,#08H        ;读8位数据
READ1: SETB SCK
CLR SCK            ;将SCK设置为下降沿,以便通过SO脚进行数据的输出
MOV C,SO          ;将X5045中的数据通过SO脚输出到C
RLC A              ;将A中的数据循环左移
DJNZ R0,READ1       ;若R0不等0转READ1,以便将X5045中8位数据读完
RET
END

⌨️ 快捷键说明

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