楽天市場
[無料でホームページを作成] [通報・削除依頼]

PIC10F322 フラッシュメモリの操作

 PIC10F322 フラッシュプログラムメモリの操作

フラッシュプログラムメモリの消去・書き込み・読み出しのサブルーチンとして
従来以下のコードを使用していました。(フラッシュメモリのアドレス/データをセットして呼び出す)

rd:                                                        ;フラッシュメモリーの読み出し
             movlw        b'00000001'            ;CFGS=0 LWLO=0 FREE=0 WREN=0 RD=1
             movwf        PMCON1
             nop
             nop
             return
wr_e:                                                      ;フラッシュメモリーのバルク消去
             movlw        b'00010100'             ;CFGS=0 LWLO=0 FREE=1 WREN=1
             goto           $+2
wr_w:                                                     ;フラッシュメモリーの書き込み
             movlw        b'00000100'             ;CFGS=0 LWLO=0 FREE=0 WREN=1
             movwf        PMCON1
             movlw        0x55
             movwf        PMCON2
             movlw        0xaa
             movwf        PMCON2
             bsf             PMCON1,WR            ;WR=1
             nop
             nop
             clrf             PMCON1                  ;CFGS=0 LWLO=0 FREE=0 WREN=0
             return



このコードの短縮を検討したところ、以下のコードで同様の動作を確認できましたのでご紹介します。

wr_e:                                                       ;フラッシュメモリーのバルク消去
              bsf            PMCON1,FREE
wr_w:                                                      ;フラッシュメモリーの書き込み
              bsf            PMCON1,WREN
              movlw       0x55
              movwf       PMCON2
              movlw       0xaa
              movwf       PMCON2
              bsf            PMCON1,WR
rd:                                                          ;フラッシュメモリーの読み出し
              bsf            PMCON1,RD
              nop
              nop
              clrf            PMCON1
              return


上記サブルーチンを使用する前提条件として、PMCON1のbit6~bit0が事前にクリアされている必要がありますが、
リセットでPMCON1のbit6~bit0がクリアされるのと、このサブルーチンを使用すると読み出し・書き込み・消去に関わらず
PMCON1が必ずクリアされますので、PMCON1を意図的に書き換えない限り問題なく使用可能です。

このサブルーチンの肝はbsf PMCON1,WR 命令の後のbsf PMCON1,RD 命令でダメモトでやったところうまくいきました。
今のところ読み出し・書き込みとも正常に行えます。