调用读写程序没有实现功能
本帖最后由 pzsh 于 2021-11-8 16:57 编辑使用PIC12F1571作为项目的主控MCU,现需要**功能保存按键档位状态。
我使用了MCC已生成memory的文件,但实际调用读写程序没有实现功能 使用上有问题
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
#define Addr 0X0010 //memory地址
#define savevalue0X00AA //memory测试数据
unsigned int keysaveaddr; //存储地址定义
unsigned int Buf; //定义指向擦除flash块大小的指针
unsigned int Writedata; //写入数据
unsigned int readword; //读取数据
void Lowlight()
{
Highflag = 0;
Lowflag = 1;
if(keyvalue == 1) //低亮档a
{ //输出1:5% 其他:0
light_timer = 0; //5%使用PWM产生,20ms
PWM_EN = 1;
PWMduty = Lowlight1;
output2_SetLow();
output3_SetLow();
output4_SetLow();
//memory 数据存储
Writedata = savevalue;
keysaveaddr = Addr;
FLASH_EraseBlock(keysaveaddr); //memory 擦除
delay(10);
FLASH_WriteWord(keysaveaddr, Buf, Writedata); //memory 写数据
delay(10);
}
else if(keyvalue == 2) //低亮档b
{ //输出2:100% 其他:0
output2_SetHigh();
PWM_EN = 0;
light_timer = 0;
output1_SetLow();
output3_SetLow();
output4_SetLow();
}
else if(keyvalue == 3) //低亮档c
{ //输出3:100% 其他:0
output3_SetHigh();
output1_SetLow();
output2_SetLow();
output4_SetLow();
}
else if(keyvalue == 4) //低亮档d
{ //输出4:100% 其他:0
output4_SetHigh();
output1_SetLow();
output2_SetLow();
output3_SetLow();
}
if(keyvalue == 5) //低亮档e
{ //输出1:爆闪8Hz(占空80%) 其他0
light_timer = 0; //100ms输出high,25ms输出low
//Pwm_timer = 0; //
//T0125ms = 0;
//PWM_EN = 1;
//PWMduty = Lowlight5;
// PWM8Hz = 1;
P8Hz_EN = 1;
output2_SetLow();
output3_SetLow();
output4_SetLow();
}
}
void main(void)
{
// initialize the device
SYSTEM_Initialize();
keyvalue = 1;
keysaveaddr == Addr;
readword = FLASH_ReadWord(keysaveaddr); //memory读
if(readword == savevalue)
{
output2_SetHigh();
output1_SetLow();
output3_SetLow();
output4_SetLow();
}
else
{
Highlight();
} HEF是程序区的最后128个地址的低字节。你设定#define Addr 0X0010, 这是自杀式的代码啊,把自己写的程序都擦了
针对1571来说,地址应该是0380h-03FFh
应该用Flash编程吧?
操作flash要特别小心
要清楚编译器生成的代码占用的空间是什么范围; 要清楚, 你自己要放的数据是什么范围; 上面这2个范围一定不能重合; 你需要看一下编译器手册(http://www.microchip.com.cn/newc ... 3/5e65e2ef6e8ab.pdf), 4.8.50 --ROM:调整ROM 范围, 这个章节来熟悉一下怎么实现。。 嗯,我再好好缕一缕吧,有了好消息及时通知大家
对照一下数据手册的memory部分看看
页:
[1]