打印

PIC18F25K80

[复制链接]
724|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
北辰极界|  楼主 | 2020-7-29 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PIC18F25K80写EEPROM  写之前关闭全局中断  写好后开启全局中断   每次写完EEPROM后串口中断就无法进入  有没有大神可以指点一下
void W_EEPROM(void)
{
unsigned char i = 0;


//INTCONbits.GIEH = 0;           //关闭全局中断
      
   
EECON1bits.WREN = 1;
ui_EEPROM_Addr = 0;
for(i=0;i<110;i++)
{
ui_EEPROM_Addr = EEPROM_Start_Addr + i;   
EEADRH = ui_EEPROM_Addr>>8;
EEADR = ui_EEPROM_Addr;
EEDATA = EEPROM_Data[i];
EECON2 = 0x55;
EECON2 = 0x0AA;
EECON1bits.WR = 1;
while(EECON1bits.WRERR);
}
EECON1bits.WREN = 0;
        
//INTCONbits.GIEH = 1;           //使能全局中断  

}

使用特权

评论回复
沙发
Latin_newday| | 2020-7-30 09:49 | 只看该作者
使用编译器自带写函数试试,Write_b_eep之类

使用特权

评论回复
板凳
CoolSilicon| | 2020-7-31 14:47 | 只看该作者
"每次写完EEPROM后串口中断就无法进入"
这个是指发送中断? 还是接收中断??

使用特权

评论回复
地板
morley116| | 2020-8-4 15:45 | 只看该作者
这个芯片,尤其是QFN28的封装,用的人很少!     我司可以代工烧录该芯片,价格便宜15817618003

使用特权

评论回复
5
yqdeso| | 2020-8-4 18:53 | 只看该作者
while(EECON1bits.WRERR);   这一行不正确吧?

要等待写完成,应该是等待EECON1bits.WR清0,EECON1bits.WR位是软置1  硬清0的。

如果不放心,可以在EECON1bits.WR清0后,再来查看EECON1bits.WRERR是否为1。

还有更严重的,CFGS和EEPGD,这两个也要设置为EEPROM操作。且必须设置,因为这两位是复位后不确定状态。

使用特权

评论回复
6
北辰极界|  楼主 | 2020-8-9 16:20 | 只看该作者
CoolSilicon 发表于 2020-7-31 14:47
"每次写完EEPROM后串口中断就无法进入"
这个是指发送中断? 还是接收中断??
...

接收中断

使用特权

评论回复
7
北辰极界|  楼主 | 2020-8-9 16:25 | 只看该作者
bellstudio 发表于 2020-7-31 13:29
你的两个K80的帖子是不是有关联?

一个工程里面的

使用特权

评论回复
8
北辰极界|  楼主 | 2020-8-9 16:26 | 只看该作者
Latin_newday 发表于 2020-7-30 09:49
使用编译器自带写函数试试,Write_b_eep之类

我试试看

使用特权

评论回复
9
北辰极界|  楼主 | 2020-8-9 16:27 | 只看该作者
yqdeso 发表于 2020-8-4 18:53
while(EECON1bits.WRERR);   这一行不正确吧?

要等待写完成,应该是等待EECON1bits.WR清0,EECON1bits.WR ...

如果不禁止中断直接写会有什么问题吗

使用特权

评论回复
10
北辰极界|  楼主 | 2020-8-9 16:33 | 只看该作者
yqdeso 发表于 2020-8-4 18:53
while(EECON1bits.WRERR);   这一行不正确吧?

要等待写完成,应该是等待EECON1bits.WR清0,EECON1bits.WR ...

EECON1bits.WRERR写入完成后会清零啊 这样就可以继续写入了啊

使用特权

评论回复
11
北辰极界|  楼主 | 2020-8-9 16:35 | 只看该作者
yqdeso 发表于 2020-8-4 18:53
while(EECON1bits.WRERR);   这一行不正确吧?

要等待写完成,应该是等待EECON1bits.WR清0,EECON1bits.WR ...

CFGS和EEPGD初始化已经配置为0了

使用特权

评论回复
12
北辰极界|  楼主 | 2020-8-9 16:38 | 只看该作者
yqdeso 发表于 2020-8-4 18:53
while(EECON1bits.WRERR);   这一行不正确吧?

要等待写完成,应该是等待EECON1bits.WR清0,EECON1bits.WR ...

可以在EECON1bits.WR清0后,再来查看EECON1bits.WRERR是否为1   这个和中断出现异常有影响吗  这个也可以判断写操作是否完成   两个都判断会更好一些

使用特权

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

本版积分规则

31

主题

141

帖子

0

粉丝