sfr IAP_DATA = 0xE2;
sfr IAP_ADDRH = 0xE3;
sfr IAP_ADDRL = 0xE4;
sfr IAP_CMD = 0xE5;
sfr IAP_TRIG = 0xE6;
sfr IAP_CONTR = 0xE7;
#define CMD_IDLE 0
#define CMD_READ 1
#define CMD_PROGRAM 2
#define CMD_ERASE 3
#define ENABLE_IAP0x80
#define ENABLE_IAP0x81
#define ENABLE_IAP0x82
#define ENABLE_IAP0x83
IAP_ADDRESS 0x2000 //STC90C52ϵÁÐEEPROM²âÊÔÆðʼµØÖ·
void IapIdle(void)
{
IAP_CONTR=0;
IAP_CMD =0;
IAP_TRIG =0;
IAP_ADDRH=0x80;
IAP_ADDRL =0;
}
unsigned char IapReadByte(unsigned int addt)
{
unsigned char dat;
IAP_CONTR=ENABLE_IAP;
IAP_CMD =CMD_READ;
IAP_ADDRL=addr;
IAP_ADDRL=addr>>8
IAP_TRIG =0x46;
IAP_TRIG =0xb9;
dat = IAP_DATA;
IapIdle();
return dat;
}
void Iap ProgramByte(unsigned int addr,unsigned char dat )
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD =CMD_REOGRAM;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8
IAP_DATA=date;
IAP_TRIG =0x46;
IAP_TRIG =0xb9;
IapIdle();
}
void Iap EraseSector(unsigned int addr )
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD =CMD_ERASE;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8
IAP_TRIG =0x46;
IAP_TRIG =0xb9;
IapIdle();
}
unsigned char Num=0;
void main(void)
{
unsigned long i=0;
Num = Iap ReadByte(IAP_ADDRESS+20);
Num++;
Iap EraseSector(IAP_ADDRESS);
Iap ProgramByte(IAP_ADDRESS+20,Num);
for(i=0;i
{
LED0=0;
DelayMs(100);
LED0=1;
DelayMs(100);
}
while(1);
}
打赏帖 | |
---|---|
【STM32F769】AI之与本地deepseek对接被打赏50分 | |
Buck电路工作在CCM模式下电感电流的计算公式是什么?被打赏5分 | |
buck电路工作原理被打赏5分 | |
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏100分 | |
我想要一部加热台+多合一调试工具被打赏18分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 | |
【换取手持数字示波器】树莓派PICO调试器官方固件本地化部署实践被打赏24分 | |
【换取手持数字示波器】分享一个KEIL无法识别CMSIS-DAP调试器的解决办法被打赏20分 | |
【换取手持数字示波器】分享一个自制的ArduinoNano扩展板底板被打赏23分 | |
【换取手持示波器】树莓派PICOW网页烟花被打赏18分 |