kuroの覚え書き

96の個人的覚え書き

PIC温度計プログラム続き AD変換編



AD変換ができるようになった。

プログラムは

http://www.geocities.jp/maxvxam/diy/PIC/lcd2.txt



;水温測定(AD変換)
;RB2で充電、RB3でカウントする
;RB2は出力に設定
BSF PORTB,2 ;充電しておく
CALL TIME50M
WATER_TEMP
MOVLW 0BDH ;LCD表示位置固定
CALL LCD_CMD ;
CALL ADCNV
CALL DISP_DIGIT
CALL TIME1S
CALL TIME1S
CALL TIME1S
GOTO WATER_TEMP
;************************************
;数字表示サブルーチン
;************************************
DISP_DIGIT ;3桁に分けて各桁をカウント
CLRF FIGCNT ;FIGCNTをリセット
FIGLOOP100
MOVLW 064H ;100をロードして
SUBWF WIDTH,F ;元のデータから100を引く
BTFSC STATUS,C ;マイナスになるまで繰り返す
GOTO CNTPLUS100
GOTO ENDFIG100
CNTPLUS100
INCF FIGCNT,F ;100の位の数を数える
GOTO FIGLOOP100
ENDFIG100
MOVF FIGCNT,W
CALL DISP_NUM ;100の位の表示
MOVLW 064H ;100をロード
ADDWF WIDTH,F ;マイナスになったWIDTHをプラスに戻す
CLRF FIGCNT ;FIGCNTをリセット
FIGLOOP10
MOVLW 0AH ;10をロードして
SUBWF WIDTH,F ;データから10を引く
BTFSC STATUS,C ;マイナスになるまで繰り返す
GOTO CNTPLUS10
GOTO ENDFIG10
CNTPLUS10
INCF FIGCNT,F ;10の位の数を数える
GOTO FIGLOOP10
ENDFIG10
MOVF FIGCNT,W
CALL DISP_NUM ;10の位の表示
MOVLW 0AH ;10をロード
ADDWF WIDTH,W ;マイナスになったWIDTHをプラスに戻し、Wレジスタにロード
CALL DISP_NUM ;1の位の表示
RETURN
DISP_NUM ADDLW '0' ;ASCIIコードに変換
CALL LCD_DATA ;数字の表示
RETURN
;************************************
;A/D変換サブルーチン
;************************************
ADCNV ;A/Dconvert
CLRF WIDTH ;カウンタリセット
BSF STATUS,RP0 ;バンク1へ切替
MOVLW 08H ;PORTBRB3を入力モードにセット
MOVWF TRISB
BCF STATUS,RP0 ;Bank 0へ戻す
BCF PORTB,2 ;放電開始
LOOPT1 BTFSS PORTB,3 ;0か?
GOTO LOOPT2 ;0で変換終了
NOP
NOP
NOP ;時間カウント調整用ダミー
NOP
INCF WIDTH,F ;カウントアップ
GOTO LOOPT1 ;繰り返し
LOOPT2 BSF PORTB,2
CALL TIME50M
RETURN

カウントアップのところが参考にしたプログラムではINCFSZだったがそれではうまくいかなかったのでINCFにしたところうまくいった。

次の課題はキャリブレーションとAD→温度への計算についてか。