打印
[PIC®/AVR®/dsPIC®产品]

请教:PIC16F1503保存数据到flash中的程序

[复制链接]
2753|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
现在使用PIC16F1503保存掉电数据到自身flash中:自己参考datasheet写了个程序如下,但是怎么调试都不成功,麻烦大家提示一下哪里的问题。谢谢
代码如下:

写flash函数1:


void flash_write ( U16 ddata_write ,U16 address_write  )
{
PMADRL=(address_write)&0xff;//提取地址数低八位
PMADRH=(address_write>>8)&0x1f;//提取地址数高五位
PMDATL=(ddata_write)&0xff;//提取数据低八位
PMDATH=(ddata_write>>8)&0xff;//提取数据高六位
// EEPGD=1;
WREN=1;
GIE=0;
PMCON2=0x55;
PMCON2=0xaa;
WR=1;
asm("nop");
asm("nop");
WREN=0;
}

写flash函数2:
void Flash_write2(U16 data,U16 addr)   
{
  U8 i;
  CFGS = 0;
  PMADRH = (addr>>8)&0X1F ;
  PMADRL = addr&0XFF ;
  FREE = 0;
  LWLO = 1;
  WREN = 1;
  for(i=0;i<16;i++)
  {
  PMDATL = data&0XFF ;
  PMDATH = (data>>8)&0X1F ;
  PMCON2 = 0X55;
  PMCON2 = 0XAA;
  WR = 1;
  asm("NOP");
  asm("NOP");
  PMDATL++;
  }
  LWLO = 0;
  PMCON2 = 0X55;
  PMCON2 = 0XAA;
  WR = 1;
  asm("NOP");
  asm("NOP");
  WREN = 0;
}


//__CONFIG(0x36A0);
// __CONFIG(0x3eA0);
//  __CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&CLKOUTEN_OFF&BOREN_ON&CP_ON&MCLRE_ON);
  // __CONFIG(LVP_OFF&WRT_OFF);
  // __CONFIG(LVP_OFF&WRT_ALL);
  __CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&CLKOUTEN_OFF&BOREN_ON&CP_OFF&MCLRE_ON);
  __CONFIG(LVP_OFF);


void main (void)
{
   OSCCON |= IRCF ;  // 内部时钟16M
   Delay_us(200);  
  while(1)
  {
  flash_write ( 0x88,0x5ff);//  往flash地址0X5FF处存入0x88这个数据
// void Flash_write2(0x88,0x5ff) ;

  }

}

最开始的配置字也改了很多遍,这个功能就是调不通,以下是编译完程序烧进IC后 通过编译器查看flash的截图:
0X5FF地址处就是没有写入的数据0x88















沙发
yklstudent| | 2014-4-21 08:56 | 只看该作者
MCU是否跑起来,确认了吗?
用的什么编译器,OSCCON |= IRCF;?这个可以编译通过?

使用特权

评论回复
板凳
zwxhehe2012|  楼主 | 2014-4-21 09:48 | 只看该作者
程序肯定跑起来了,OSCCON |= IRCF这个没问题,IRCF这个是我自己定义的,上面代码中没有列出这个宏定义, 主程序中我删了其他任务,原来其他任务都在执行的,程序肯定跑起来了,编译器是mplab 8.90   PICC V9.83

使用特权

评论回复
地板
zwxhehe2012|  楼主 | 2014-4-21 09:50 | 只看该作者
编译环境是MPLAB IDE  V8.92       PICC   V9.83

使用特权

评论回复
5
yklstudent| | 2014-4-21 10:19 | 只看该作者
XC8编译器软件仿真下 试了没问题
没实物所以没法验证 不知道你具体什么情况
自己再找找问题吧

使用特权

评论回复
6
zwxhehe2012|  楼主 | 2014-4-21 14:13 | 只看该作者
yklstudent 发表于 2014-4-21 10:19
XC8编译器软件仿真下 试了没问题
没实物所以没法验证 不知道你具体什么情况
自己再找找问题吧 ...

你在XC8编译器下试了上面的代码没问题吧?
难道编译器的问题或者硬件有什么问题?
硬件什么地方会影响到操作flash呢?  

使用特权

评论回复
7
zwxhehe2012|  楼主 | 2014-4-21 14:15 | 只看该作者
yklstudent 发表于 2014-4-21 10:19
XC8编译器软件仿真下 试了没问题
没实物所以没法验证 不知道你具体什么情况
自己再找找问题吧 ...

还有请教一下,现在编译PIC16F1503都用什么编译器,是不是我原来的编译器版本比较老,有没有什么比较新的合适的编译器推荐,谢谢

使用特权

评论回复
8
yklstudent| | 2014-4-21 16:21 | 只看该作者
PICC 9.80版本看了好像不支持PIC16F1503
PICC 9.81-9.82版本感觉是个坑货
PICC 9.83感觉和XC8比较接近
软件仿真使用XC8,发现代码没什么问题
可以工作,如图见真相

2014-4-21 16-21-20.bmp (2.85 MB )

2014-4-21 16-21-20.bmp

使用特权

评论回复
9
zwxhehe2012|  楼主 | 2014-5-12 22:16 | 只看该作者
yklstudent 发表于 2014-4-21 16:21
PICC 9.80版本看了好像不支持PIC16F1503
PICC 9.81-9.82版本感觉是个坑货
PICC 9.83感觉和XC8比较接近

请教一下,为什么我程序中设定了代码保护(其中的CP_ON),
__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&CLKOUTEN_OFF&BOREN_ON&CP_ON&MCLRE_ON);
__CONFIG(LVP_OFF&WRT_OFF);

但是为什么烧写程序进IC后,用view查看program memory 还是可以看到flash中的数据,不是说使能代码保护之后,查看pragram memory的数据将全部是3FFF吗?

使用特权

评论回复
10
yklstudent| | 2014-5-13 07:26 | 只看该作者
zwxhehe2012 发表于 2014-5-12 22:16
请教一下,为什么我程序中设定了代码保护(其中的CP_ON),
__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&CLK ...

你用编程器读取MCU芯片内的内容了吗?
然后你再观察下

使用特权

评论回复
11
ninicaoyuan| | 2014-9-24 17:14 | 只看该作者
Mark!!!!!!!!

使用特权

评论回复
12
大头BB| | 2014-10-14 15:01 | 只看该作者
我编过24F系列c16编译的,官网有应用笔记,你可以找找

使用特权

评论回复
13
wangtao478552| | 2015-5-14 10:48 | 只看该作者
MARK,正在学习这个

使用特权

评论回复
14
ninicaoyuan| | 2015-6-8 11:03 | 只看该作者
一年多了,又要重写这个模块

使用特权

评论回复
15
wangtao478552| | 2015-6-15 11:56 | 只看该作者
ninicaoyuan 发表于 2015-6-8 11:03
一年多了,又要重写这个模块

我写好了...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

48

帖子

1

粉丝