ロータリエンコーダのDATAをEEPROMに書き入れる!
実験は前回[PIC-21]の続きです。
DATAを取り入れたものをEEPROMに書き込んでDATAの保存をしようというものです。CPUは16F819を使っています。始め参考にしたプログラムは作動しませんでした、その時は理由不明でだいぶ無駄な時間が過ぎました(1週間ほど)。
結局、16F84Aなどとは少し書き込みの手順が異なるのです、それを無視していました。16F84AのBankは0/1しかありませんが、16F819のBankは1/2/3/4を切替えなければなりません。
この辺をしなかったので動作しなかったのです[1:Bank切り替えのミス]。マニアルを何度も見ました、Bank切り替えが正しくやっているにもかかわらず何故か書き込みが出来ません。ここもだいぶ時間が掛かりましたが、レジスタの指定をまちがえたのです、つまりアクセス出来ないのを知らずにアクセスしたので、不明の動作となっていました。
[2:Accesses Register =70h-7Fh]の変更をしました。また、16F84Aには無かったEECON1のEEPGDのクリヤーセット等が必要です。これって面倒で、16F84Aとの互換性もありません。また、16F648もBank設定が少し異なり移植して使うには再検討が必要で、色々と面倒な事が分かりました。
プログラムをスタートさせ、DATAを画面上に出しその度にEEPROMに書き込みをさせました。結果はそのままでは分かりません。
書き込んだICを取り出し書き込み器に挿し、DATAをREADさせるとEEPROMの所に書き込んであるのが確認出来ました。やっと画面に出てホッ!としています。今回の収穫は何処からでも呼び出せる[Accesses Register]があるのを知りました。
2007/APR/25
EE_WR banksel EEADR ;bank 2 movwf EEADR movf TEMP2,W ;write data movwf EEDATA banksel EECON1 ;bank 3 bcf EECON1,EEPGD ;0=Accesses data memory bsf EECON1,WREN ;write step 1 movlw 0x55 movwf EECON2 ;step 2 movlw 0xAA movwf EECON2 ;step 3 bsf EECON1,WR ;start step 4 bcf EECON1,WREN btfsc EECON1,WR ;WR clr? step 5 goto $-1 ;no to loop banksel TEMP ;bank 0 return ;--------------------------------
W > EEADR + TEMP2(EEDATA) + EE_WR
Wにアドレスを入れ、TEMP2のDATAを入れると書き込まれて戻る。
当初の不動作はレジスタが読み出せなかったようで、[TEMP2を70hに変更]これで書き込めるようになった。 Bank1/2にはPurpose Register 80 Bytesあり、共通に使えるAccesses Register =70h-7Fhがある。
;--------------------------------
もどる [MAIN MENU]