PIC18F25K80

[复制链接]
980|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
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操作。且必须设置,因为这两位是复位后不确定状态。
 楼主| 北辰极界 发表于 2020-8-9 16:20 | 显示全部楼层
CoolSilicon 发表于 2020-7-31 14:47
"每次写完EEPROM后串口中断就无法进入"
这个是指发送中断? 还是接收中断??
...

接收中断
 楼主| 北辰极界 发表于 2020-8-9 16:25 | 显示全部楼层
bellstudio 发表于 2020-7-31 13:29
你的两个K80的帖子是不是有关联?

一个工程里面的
 楼主| 北辰极界 发表于 2020-8-9 16:26 | 显示全部楼层
Latin_newday 发表于 2020-7-30 09:49
使用编译器自带写函数试试,Write_b_eep之类

我试试看
 楼主| 北辰极界 发表于 2020-8-9 16:27 | 显示全部楼层
yqdeso 发表于 2020-8-4 18:53
while(EECON1bits.WRERR);   这一行不正确吧?

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

如果不禁止中断直接写会有什么问题吗
 楼主| 北辰极界 发表于 2020-8-9 16:33 | 显示全部楼层
yqdeso 发表于 2020-8-4 18:53
while(EECON1bits.WRERR);   这一行不正确吧?

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

EECON1bits.WRERR写入完成后会清零啊 这样就可以继续写入了啊
 楼主| 北辰极界 发表于 2020-8-9 16:35 | 显示全部楼层
yqdeso 发表于 2020-8-4 18:53
while(EECON1bits.WRERR);   这一行不正确吧?

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

CFGS和EEPGD初始化已经配置为0了
 楼主| 北辰极界 发表于 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

粉丝
快速回复 在线客服 返回列表 返回顶部