PIC 23:EEPROM から読み出す!


EEPROMのDATAを読み出してLCDに表示する。

 実験の続きです、前回のロータリエンコーダで書き込んだDATAを読み出して、LCDに表示させてみました。
 これは楽勝と思っていましたが、やってみるとくせ玉と言うか一癖あってつまづきました。でも何とか表示出来るようになりました。
 読み出しだけなら簡単ですが、連続読み出しとLCD表示の処理で少しプログラムは増えています。

 今回もBank切替えの思い違いがあって一度では作動しませんでした(まあ!一度で動くのはめったにありませんけど)。
 さすがEEPROMに書き込むと電源を切っても記憶に残っており、毎回電源を入れる度に表示されます。これも実用化出来使えそうです。

 プログラムは、毎回MY CALL(=アマチュア無線用)を表示してましたが、これを消して画面に毎回出ます。
 画面に0xffとすればそれをチエックし「MY CALLが生きてそれが表示される」ようにしました。何か書き込めばそれがスタート画面で表示されます。
 LCDのアドレスと同じ0x80の所(EEPROM)に書き込んでいました、これをLCDの0xC0アドレス画面に移動して表示しています。

 コンフイグのBOD(Broun Out Detect=ON)設定で不安なく快調に表示させています。16F84AはリセットICが必要ですから819は便利になりました。

2007/MAY/2

EE_RB
	movlw	0xc0		;LCD address
	call	LCD_CMD		;command
	movlw	0x80		;start
	movwf	EE_RST		;register	
	movlw	0x88		;end
	movwf	EE_REND		;register
EE_RM
	movf	EE_RST,W		;EE address set
	call	EE_READ		;read
	movwf	TEMP		;keep
	sublw	0xff		;no data
	btfsc	STATUS,Z		;=?
	goto	EE_EX		;yes to
	movf	TEMP,W		;retrun
	call	LCD_DATA		;display
	incf	EE_RST,F		;+1
	movf	EE_RST,W		;to W
	subwf	EE_REND,W		;end of datas
	btfss	STATUS,Z		;=
	goto	EE_RM		;again
EE_EX
	return
;-----------------------------------------------
EE_READ
	banksel	EEADR		;bank 2
	movwf	EEADR		;set
	banksel	EECON1		;bank 3
	bcf	EECON1,EEPGD	;EEPROM
	bsf	EECON1,RD		;read
	banksel	EEDATA		;bank 2
	movf	EEDATA,W		;data read
	banksel	TEMP		;bank 0
	return
;--------------------------------
 追加したプログラムは左の通りです。

 読み出しのメインのプログラムは「EE_READ」でBank切り替えをチョコチョコやっています。
 始めの「EE_RB」は全体のコントロール用です、EEPROMに何か書き込まれていれば、それを読み出してLCDに表示しています。
 もし書き込みが無ければ、予め用意してある「MY CALL」を表示するようにしたものです。

[16F819用のプログラムです、読み込みは16F648A/16F84Aにはそれぞれ少しづつ変更が必要です。]
;--------------------------------
以下メインプログラムの中で!(EE_RBの下に入れても同じです。)

	call	EE_RB		;EEPROM check
	movlw	80H		;
	subwf	EE_RST,W		;write ?
	btfsc	STATUS,Z
	CALL	MY_CALL		;LCD MY call

[もどる]もどる  [MAIN MENU

inserted by FC2 system