chuxh 发表于 2021-11-5 21:38

调用读写程序没有实现功能

本帖最后由 pzsh 于 2021-11-8 16:57 编辑

使用PIC12F1571作为项目的主控MCU,现需要**功能保存按键档位状态。
我使用了MCC已生成memory的文件,但实际调用读写程序没有实现功能

supernan 发表于 2021-11-5 21:41

使用上有问题

zhenykun 发表于 2021-11-5 21:43

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

chuxh 发表于 2021-11-5 21:45

#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();
    }

dengdc 发表于 2021-11-5 21:46

HEF是程序区的最后128个地址的低字节。你设定#define Addr 0X0010, 这是自杀式的代码啊,把自己写的程序都擦了

dingy 发表于 2021-11-5 21:49

针对1571来说,地址应该是0380h-03FFh

huangchui 发表于 2021-11-5 21:51

应该用Flash编程吧?

songqian17 发表于 2021-11-5 21:54


heweibig 发表于 2021-11-5 21:57

操作flash要特别小心

huangchui 发表于 2021-11-5 22:03

要清楚编译器生成的代码占用的空间是什么范围;

wyjie 发表于 2021-11-5 22:06

要清楚, 你自己要放的数据是什么范围;

dingy 发表于 2021-11-5 22:08

上面这2个范围一定不能重合;

dingy 发表于 2021-11-5 22:11

你需要看一下编译器手册(http://www.microchip.com.cn/newc ... 3/5e65e2ef6e8ab.pdf), 4.8.50 --ROM:调整ROM 范围, 这个章节来熟悉一下怎么实现。。

chuxh 发表于 2021-11-5 22:13

嗯,我再好好缕一缕吧,有了好消息及时通知大家

pzsh 发表于 2021-11-8 16:57

对照一下数据手册的memory部分看看
页: [1]
查看完整版本: 调用读写程序没有实现功能