- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2026-03-26 16:01:25
已绑定手机
新手上路
- 积分
- 9
|
#include "stc8h.h"
#include "intrins.h"
#define FLASH_ADDR 0x6E00 // STC8H2K361 最后扇区
char write_buf[10] = {1,2,3,4,5,6,7,8,9,5};
char read_buf[10] = {0};
char read_buf1[10] = {0};
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= 0x80;//使能IAP
IAP_TPS= 12;//设置等待参数12MHz
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= 0x80;//使能IAP
IAP_TPS= 12;//设置等待参数12MHz
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= 0x80;//使能IAP
IAP_TPS= 12;//设置等待参数12MHz
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 delay(int ms)
{
while(ms)
{
ms -- ;
}
}
void main()
{
char i ;
P_SW2|= 0x80; //使能访问XFR
EA = 0; // 全局关中断
IapErase(0x6e00);
for(i=0; i<10; i++)
{
IapProgram(0x6e00 +i,write_buf[i]);
read_buf[i]= IapRead(0x6e00+i);
}
for(i=0; i<10; i++)
{
read_buf1[i]= IapRead(0x6e00+i);//
delay(1000);
}
EA = 1;
while(1);
运行结果如下图
请在家帮我看下是什么原因连续读不正确,多谢
|
-
-
|