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

PIC12F1822的EEPROM问题求助

[复制链接]
872|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dengdc|  楼主 | 2022-2-4 23:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pzsh 于 2022-2-7 17:14 编辑

这个EEPROM我这样写AN2口可以正常输出。
但是为什么第二次烧录的时候,我注释掉了写代码,就读不到第一次写进去的数据了捏。
EEPROM掉电后数据不是不会清除吗?

使用特权

评论回复
沙发
xxrs| | 2022-2-4 23:21 | 只看该作者

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

使用特权

评论回复
板凳
dengdc|  楼主 | 2022-2-4 23:23 | 只看该作者

// PIC12F1822 Configuration Bit Settings

// 'C' source line config statements

// CONFIG1
#pragma config FOSC = INTOSC        // Oscillator Selection (HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins)
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable (PWRT enabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = OFF      // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF       // Internal/External Switchover (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)

// CONFIG2
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF      // PLL Enable (4x PLL disabled)
#pragma config STVREN = OFF     // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF        // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>



void EE_W(unsigned char data,unsigned char addr)//EEPROM写配置
{
    EEDAT=data;
    EEADR=addr;
    EECON2=0x55;
    EECON2=0xAA;
    EECON1bits.WR=1;
   
    EECON1=0x07;
    while(EECON1bits.WR==1);
   
}

unsigned char EE_R(unsigned char addr)//EEPROM读配置
{
    unsigned char rec;
    EEADR=addr;
    EECON1bits.RD=1;
    while(EECON1bits.RD==1);
    rec=EEDATA;
    return rec;
}
void main(void)
{
    OSCCON=0x6A;//内部时钟4MHZ
    TRISA=0x0;
//    ANSELA=0x0;
   
    int num,rec;
    for(;;)
    {
        for(num=10;num>0;num--)
        {
            EE_W(num,num+1);
        }
        if(EE_R(8)==7)PORTA=0x02;//判断第八字节是7否,是则AN2口输出1
        else PORTA=0;
    }
}

使用特权

评论回复
地板
pengf| | 2022-2-4 23:26 | 只看该作者
烧写程序的时候,配置字、EEPROM、程序空间全部重写。

使用特权

评论回复
5
dengdc|  楼主 | 2022-2-4 23:28 | 只看该作者
你没有定义EEPROM初始值,就默认恢复成0xFF。

使用特权

评论回复
6
dengdc|  楼主 | 2022-2-4 23:30 | 只看该作者
EEPROM, 是掉电仍然保持的...RAM才是掉电就丢失数据的

对于PIC内置的EEPROM而言也是如此

使用特权

评论回复
7
dengdc|  楼主 | 2022-2-4 23:42 | 只看该作者
但是, 对于开发的时候, 如果烧录工具使用默认选项, 再次烧录的时候, 它会把所有的都擦掉.

使用特权

评论回复
8
juventus9554| | 2022-2-4 23:47 | 只看该作者
你可以根据自己的需求, 设置烧录工具 擦写/保留的范围,区域的.

使用特权

评论回复
9
houcs| | 2022-2-4 23:49 | 只看该作者
pic 支持 eeprom char data;  用起来简单方便。

使用特权

评论回复
10
wangpe| | 2022-2-4 23:51 | 只看该作者
是的,默认都是会擦除的,你下载一次,就会擦除一次,必须把这个选项勾掉。

使用特权

评论回复
11
dengdc|  楼主 | 2022-2-4 23:53 | 只看该作者

好的,我明天去单位试一下,多谢各位大侠了哈        

使用特权

评论回复
12
dengdc|  楼主 | 2022-2-4 23:55 | 只看该作者

其实还是不大明白,我再琢磨琢磨吧,多谢了哈先

使用特权

评论回复
评论
tripic 2022-2-7 14:30 回复TA
在你的硬件工具属性里,有个编程范围的选择,默认是全区域擦写包括片上的EEPROM,如果你希望硬件调试器不会对你已经初始化好的EEPROM有任何修改,需要手工选择一下让你的硬件调试器(ICD4,pickit4等)不要改动EEPROM。 工程属性,选择工具,Memories to Program,选择Manually select memories and ranges,然后下面灰色的EEPROM会高亮,把这项的√去掉,这时候就不会擦写EEPROM区域了。 
13
wolfe_yu| | 2022-2-7 16:20 | 只看该作者
重新烧写程序的时候,一般都会执行一次整体擦除操作,你在做整体擦除的时候,把模拟EEPROM的数据也擦掉了。Tripic的说法是对的。你也可以试试Bootloader的方法来加载,这样可能更好理解。

使用特权

评论回复
14
drer| | 2022-3-1 20:32 | 只看该作者
芯片发热吗当时

使用特权

评论回复
15
qcliu| | 2022-3-1 20:37 | 只看该作者
支持 eeprom char data

使用特权

评论回复
16
coshi| | 2022-3-1 20:50 | 只看该作者
重新烧写就是会整体擦除的

使用特权

评论回复
17
kxsi| | 2022-3-1 21:00 | 只看该作者
掉电是不清除的

使用特权

评论回复
18
wiba| | 2022-3-1 21:10 | 只看该作者
第二次烧写完全擦除第一次数据的啊

使用特权

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

本版积分规则

892

主题

13885

帖子

7

粉丝