PIC 22:EEPROM に書き込む!


ロータリエンコーダの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

inserted by FC2 system