51单片机如何往EEPROM 如何写掉电存储汇编程序。
比如当数码管从0到9变化,变化到5时,突然断电,上电之后仍然从5开始变化。。不要说什么掉电检测电路,就是变化一次写一次,无论是否掉电,再次上电先读eeprom我想知道如何...
比如当数码管从0到9变化,变化到5时,突然断电,上电之后仍然从5开始变化。。
不要说什么掉电检测电路,就是 变化一次写一次,无论是否掉电,再次上电先读eeprom
我想知道 如何往EEPROM ,写一个数值, MOV指令可不可以,如果可以 那么 EEPROM 的地址应该是多少? 展开
不要说什么掉电检测电路,就是 变化一次写一次,无论是否掉电,再次上电先读eeprom
我想知道 如何往EEPROM ,写一个数值, MOV指令可不可以,如果可以 那么 EEPROM 的地址应该是多少? 展开
展开全部
51单片机如何往EEPROM ,不同品牌的有点不一样,如 STC 系列的 读写方法 汇编
; / *** *** *** *** *** / 读写 STC12C5204 EEPROM
; / *** *** *** *** *** / 2K 字节 写 100,000 次
; 0000-01FFH 0200-03FFH
ISPRH EQU 7AH
ISPRL EQU 7BH
ISPWH EQU 7CH
ISPWL EQU 7DH
; / *** *** *** *** *** / 1 字节读
ISP000: MOV ISP_CONTR, #83H ; 打开 IAP 功能 设置等待时间
MOV ISP_CMD, #01H ; 送字节读命令
MOV ISP_ADDRH, ISPRH ; 送地址高字节
MOV ISP_ADDRL, ISPRL ; 送地址低字节
CLR EA ; 关中断
MOV ISP_TRIG, #46H ; 起动 ISP/IAP 触发寄存器
MOV ISP_TRIG, #0B9H
NOP
MOV A, ISP_DATA ; 将读出的数据送往Acc
; JB LVDBZ, $+5
SETB EA
ACALL ISP30 ; 关闭 IAP 功能
RET
; / *** *** *** *** *** / 1 字节编程
ISP010: MOV ISP_CONTR, #83H ; 打开 IAP 功能 设置等待时间
MOV ISP_CMD, #02H ; 送字节编程命令
MOV ISP_ADDRH, ISPWH ; 送地址高字节
MOV ISP_ADDRL, ISPWL ; 送地址低字节
MOV ISP_DATA, A ; 数据进ISP_DATA
CLR EA ; 关中断
MOV ISP_TRIG, #46H ; 起动 ISP/IAP 触发寄存器
MOV ISP_TRIG, #0B9H
NOP
; JB LVDBZ, $+5
SETB EA
ACALL ISP30 ; 关闭 IAP 功能
RET
; / *** *** *** *** *** / 擦除扇区
ISP020: MOV ISP_CONTR, #83H ; 打开 IAP 功能 设置等待时间
MOV ISP_CMD, #03H ; 送擦除扇区命令
MOV ISP_ADDRH, ISPWH ; 送地址高字节
MOV ISP_ADDRL, ISPWL ; 送地址低字节
CLR EA ; 关中断
MOV ISP_TRIG, #46H ; 起动 ISP/IAP 触发寄存器
MOV ISP_TRIG, #0B9H
NOP
; JB LVDBZ, $+5
SETB EA
ACALL ISP30 ; 关闭 IAP 功能
RET
; / *** *** *** *** *** / 关闭 IAP 功能
ISP30: MOV ISP_CONTR, #00H
MOV ISP_CMD, #00H
MOV ISP_TRIG, #00H
MOV ISP_ADDRH, #0FFH ; 地址H=FF,指向非EEPROM 区
MOV ISP_ADDRL, #0FFH ; 地址L=FF,防止误操作
RET
; / *** *** *** *** *** / 读写 STC12C5204 EEPROM
; / *** *** *** *** *** / 2K 字节 写 100,000 次
; 0000-01FFH 0200-03FFH
ISPRH EQU 7AH
ISPRL EQU 7BH
ISPWH EQU 7CH
ISPWL EQU 7DH
; / *** *** *** *** *** / 1 字节读
ISP000: MOV ISP_CONTR, #83H ; 打开 IAP 功能 设置等待时间
MOV ISP_CMD, #01H ; 送字节读命令
MOV ISP_ADDRH, ISPRH ; 送地址高字节
MOV ISP_ADDRL, ISPRL ; 送地址低字节
CLR EA ; 关中断
MOV ISP_TRIG, #46H ; 起动 ISP/IAP 触发寄存器
MOV ISP_TRIG, #0B9H
NOP
MOV A, ISP_DATA ; 将读出的数据送往Acc
; JB LVDBZ, $+5
SETB EA
ACALL ISP30 ; 关闭 IAP 功能
RET
; / *** *** *** *** *** / 1 字节编程
ISP010: MOV ISP_CONTR, #83H ; 打开 IAP 功能 设置等待时间
MOV ISP_CMD, #02H ; 送字节编程命令
MOV ISP_ADDRH, ISPWH ; 送地址高字节
MOV ISP_ADDRL, ISPWL ; 送地址低字节
MOV ISP_DATA, A ; 数据进ISP_DATA
CLR EA ; 关中断
MOV ISP_TRIG, #46H ; 起动 ISP/IAP 触发寄存器
MOV ISP_TRIG, #0B9H
NOP
; JB LVDBZ, $+5
SETB EA
ACALL ISP30 ; 关闭 IAP 功能
RET
; / *** *** *** *** *** / 擦除扇区
ISP020: MOV ISP_CONTR, #83H ; 打开 IAP 功能 设置等待时间
MOV ISP_CMD, #03H ; 送擦除扇区命令
MOV ISP_ADDRH, ISPWH ; 送地址高字节
MOV ISP_ADDRL, ISPWL ; 送地址低字节
CLR EA ; 关中断
MOV ISP_TRIG, #46H ; 起动 ISP/IAP 触发寄存器
MOV ISP_TRIG, #0B9H
NOP
; JB LVDBZ, $+5
SETB EA
ACALL ISP30 ; 关闭 IAP 功能
RET
; / *** *** *** *** *** / 关闭 IAP 功能
ISP30: MOV ISP_CONTR, #00H
MOV ISP_CMD, #00H
MOV ISP_TRIG, #00H
MOV ISP_ADDRH, #0FFH ; 地址H=FF,指向非EEPROM 区
MOV ISP_ADDRL, #0FFH ; 地址L=FF,防止误操作
RET
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询