打印

PIC16F1508闪存程序存储器的读写问题

[复制链接]
634|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juventus9554|  楼主 | 2021-3-4 15:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
选用了PIC1508芯片,因该芯片没有EEPROM,所以用闪存程序存储器作为数据存储,可调试了两天没成功

使用特权

评论回复
沙发
liuzaiy| | 2021-3-4 15:51 | 只看该作者

还有什么现象?能再详细描述下吗?

使用特权

评论回复
板凳
guoyt| | 2021-3-4 15:54 | 只看该作者
能读能写,可断电后再读,就没有了原保存的数据,读和擦除功能都正常

使用特权

评论回复
地板
zyf部长| | 2021-3-4 15:57 | 只看该作者

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

使用特权

评论回复
5
juventus9554|  楼主 | 2021-3-4 16:00 | 只看该作者

WRITE        
                CALL                            ERASURE_A                                ;先擦除再写入
                BCF                             INTCON,GIE                                ; Disable ints so required sequences will execute properly
                BANKSEL                      PMADRH                                        ; Bank 3
                MOVLW                        0X0B                                        ; Load initial address
                MOVWF                        PMADRH
                MOVLW                        0X00
                MOVWF                        PMADRL
                MOVLW                        0X60                                        ; Load initial data address
                MOVWF                        FSR0L
                MOVLW                        0X00                                        ; Load initial data address
                MOVWF                        FSR0H
                BCF                              PMCON1,CFGS                                ; Not configuration space
                BSF                              PMCON1,WREN                                ; Enable writes
                BSF                              PMCON1,LWLO                                ; Only Load Write Latches
WRITE_LOOP
                MOVIW                        FSR0++                                        ; Load first data byte into lower
                MOVWF                        PMDATL
                MOVIW                        FSR0++                                        ; Load second data byte into upper
                MOVWF                        PMDATH
                MOVF                          PMADRL,W                                ; Check if lower bits of address are '00000'
                XORLW                        0x17                                        ; Check if we're on the last of 32 addresses
                ANDLW                        0x17
                BTFSC                         STATUS,Z                                ; Exit if last of 32 words,
                GOTO                          START_WRITE
                MOVLW                       55h                                        ; Start of required write sequence:
                MOVWF                       PMCON2                                        ; Write 55h
                MOVLW                       0AAh
                MOVWF                       PMCON2                                        ; Write AAh
                BSF                             PMCON1,WR                                ; Set WR bit to begin write
                NOP                                                                  ; NOP instructions are forced as processor loads program memory write latches
                NOP
                INCF                           PMADRL                                        ; Still loading latches Increment address
                GOTO                          WRITE_LOOP                                ; Write next latches
START_WRITE
                BCF                             PMCON1,LWLO                                ; No more loading latches - Actually start Flash program memory write                                                                                
                MOVLW                        55h                                        ; Start of required write sequence:
                MOVWF                        PMCON2                                        ; Write 55h
                MOVLW                        0AAh
                MOVWF                        PMCON2                                        ; Write AAh
                BSF                              PMCON1,WR                                ; Set WR bit to begin write
                NOP                                                               
                NOP
                BCF                              PMCON1,WREN                                ; Disable writes
                BANKSEL                      W_TEMP
                CALL                            DELAY_RC
                BSF                             INTCON,GIE                                ; Enable interrupts
                RETURN

使用特权

评论回复
6
jiahy| | 2021-3-4 16:04 | 只看该作者
用MCC生成代码试试看, 还是C的..易读好调试...

使用特权

评论回复
7
juventus9554|  楼主 | 2021-3-4 16:07 | 只看该作者
好的,谢谢!

使用特权

评论回复
8
liliang9554| | 2021-3-4 16:10 | 只看该作者
汇编,我去,不懂啊。

使用特权

评论回复
9
jiajs| | 2021-3-4 16:13 | 只看该作者
汇编看不懂啊,是不是每次上电都运行了擦除程序

使用特权

评论回复
10
juventus9554|  楼主 | 2021-3-4 16:16 | 只看该作者

嗯,那我按大家的说法挨个排查一下,谢谢哈

使用特权

评论回复
11
名字是啥样| | 2021-3-4 16:26 | 只看该作者
现在还是感觉C语言是最强大的语言。

使用特权

评论回复
12
观海| | 2021-4-1 13:55 | 只看该作者
有什么具体的问题吗

使用特权

评论回复
13
guanjiaer| | 2021-4-1 13:57 | 只看该作者

汇编看不懂啊

使用特权

评论回复
14
heimaojingzhang| | 2021-4-1 13:57 | 只看该作者
用MCC生成代码试试

使用特权

评论回复
15
keaibukelian| | 2021-4-1 14:01 | 只看该作者
汇编代码很头疼啊

使用特权

评论回复
16
labasi| | 2021-4-1 14:02 | 只看该作者
楼主问题解决了没有呀

使用特权

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

本版积分规则

900

主题

12190

帖子

3

粉丝