本帖最后由 fengleigood 于 2021-2-26 22:24 编辑
小弟因为需要用到CAN 所以从目前用的16f 改换并学习了18f
目前使用18f25k80 的can模块工作良好
不过倒出现一个意想不到的事 就是EEPROM存储不住的问题? 我想大多应该是自己这个新手的问题
按理说EEPROM的使用再简单不过了 我放上来一段汇编大家帮我看看毛病可能出现在哪里
写:
movlw 000h
movwf eeadrh,0
movlw 000h ;写入存储地址和待写入数据
movwf eeadr,0
movlw 034h
movwf eedata,0
bcf eecon1,7,0 ;选择EEPROM
bcf eecon1,6,0 ;选择对ROM操作
bsf eecon1,2,0 ;打开写允许
bcf gie
movlw 55h
movwf eecon2,0 ;关闭中断并输入写序列 55 aa
movlw 0aah
movwf eecon2,0
bsf eecon1,1,0 ;启动写操作
loop_wr
btfsc eecon1,1,0
goto loop_wr
bcf eecon1,2,0 ;等待写启动位清零 然后关闭写允许 开启中断 清零写完成中断标志位
bsf gie
bcf eeif
读:
movlw 000h
movwf eeadrh,0
movlw 000h ;输入要读的地址
movwf eeadr,0
bcf eecon1,7,0 ;选择EEPROM
bcf eecon1,6,0 ;选择对ROM操作
bsf eecon1,0,0 ;开启读操作
nop
nop ;多等待两个周期
movff eedata,txreg1 ;将读出数据直接串口发送
一开始我只是单独放入写程序 烧写过后 再删除写程序 单独放入一段读程序 以为上次烧录之后就写好了
这次再让读程序一遍遍的读出并送到串口 结果输出的都是0XFF 没有数据的感觉
之后 我把写程序放在上电初始化程序的末尾 不在程序循环中 只上电运行一次
然后在频率最低的定时循环中(每秒运行31次 )放入读程序 结果输出了0X34
就是前面写入的数据 后来又改为 对00写入34 对01写入56 读出程序 也循环输出0X34 0X56
我挺高兴 以为那里弄错了 自己改好了 结果删除了上电初始化那里的写入程序 后面的读出程序
就又继续发送0XFF了
按我的能力 当前只能分析出 这25k80的EEPROM 居然断电之后无法保持?存储不住?
重新上电之后就都没有了? 只有上电初始化的时候先写一遍 然后在不掉电之前 才可以正常读出数据?
我只是想这么问问 有点恼火。。。 但一定还是自己的问题 上次我问的那个16f883的2K程序的事
其实那个项目里也有用到EEPROM 但一切正常。。 不知道这次自己的程序又出了什么鬼火
望大家不吝赐教。。。这事挺挠头的 还着急出样品。。。 先谢谢大家了
|