现在使用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
|