|
想保存一點數據,可是這個官網例子完全看不懂寫的什么,有沒有可以簡單的寫一下,保存一個數,開機時讀取出這個數。
以下是STC軟件的源例子:
#include "reg51.h"
#include "intrins.h"
//測試工作頻率為11.0592MHz
sfr IAP_DATA = 0xC2;
sfr IAP_ADDRH = 0xC3;
sfr IAP_ADDRL = 0xC4;
sfr IAP_CMD = 0xC5;
sfr IAP_TRIG = 0xC6;
sfr IAP_CONTR = 0xC7;
#define WT_30M 0x80
#define WT_24M 0x81
#define WT_20M 0x82
#define WT_12M 0x83
#define WT_6M 0x84
#define WT_3M 0x85
#define WT_2M 0x86
#define WT_1M 0x87
void IapIdle()
{
IAP_CONTR = 0; //關閉IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除觸發寄存器
IAP_ADDRH = 0x80; //將地址設置到非IAP區域
IAP_ADDRL = 0;
}
char IapRead(int addr)
{
char dat;
IAP_CONTR = WT_12M; //使能IAP
IAP_CMD = 1; //設置IAP讀命令
IAP_ADDRL = addr; //設置IAP低地址
IAP_ADDRH = addr >> 8; //設置IAP高地址
IAP_TRIG = 0x5a; //寫觸發命令(0x5a)
IAP_TRIG = 0xa5; //寫觸發命令(0xa5)
_nop_();
dat = IAP_DATA; //讀IAP數據
IapIdle(); //關閉IAP功能
return dat;
}
void IapProgram(int addr, char dat)
{
IAP_CONTR = WT_12M; //使能IAP
IAP_CMD = 2; //設置IAP寫命令
IAP_ADDRL = addr; //設置IAP低地址
IAP_ADDRH = addr >> 8; //設置IAP高地址
IAP_DATA = dat; //寫IAP數據
IAP_TRIG = 0x5a; //寫觸發命令(0x5a)
IAP_TRIG = 0xa5; //寫觸發命令(0xa5)
_nop_();
IapIdle(); //關閉IAP功能
}
void IapErase(int addr)
{
IAP_CONTR = WT_12M; //使能IAP
IAP_CMD = 3; //設置IAP擦除命令
IAP_ADDRL = addr; //設置IAP低地址
IAP_ADDRH = addr >> 8; //設置IAP高地址
IAP_TRIG = 0x5a; //寫觸發命令(0x5a)
IAP_TRIG = 0xa5; //寫觸發命令(0xa5)
_nop_(); //
IapIdle(); //關閉IAP功能
}
void main()
{
IapErase(0x0400);
P0 = IapRead(0x0400); //P0=0xff
IapProgram(0x0400, 0x12);
P1 = IapRead(0x0400); //P1=0x12
while (1);
}
|
-
11.png
(19.99 KB, 下載次數: 21)
下載附件
2021-8-14 14:06 上傳
官方例子
|