12F629のお兄さん12F675はA/D変換が出来ます。
電圧の変化の範囲が多き場合、ADCON0,;ADFM=0:左詰め、
ADRESHのレジスタを利用します、電圧の変化の範囲が小さい
場合、ADCON0,;ADFM=1:右詰め、ADRESLのレジスタを利用します。
そのために練習
プログラム
;PIC12F675 A/D変換,EEPROM書き込み
;VER 1.0
LIST
P=12F675
INCLUDE
P12F675.INC
CB
=
_CPD_OFF
;データ保護しない
CB
&=
_CP_OFF
;コード保護しない
CB
&=
_BODEN_ON
;ブラウンアウトリセット
CB
&=
_MCLRE_OFF
;GP3/MCLR デジタルI/O
CB
&=
_PWRTE_ON
;パワーアップタイマを使用する
CB
&=
_WDT_OFF
;ウォッチドッグタイマをOFF
CB
&=
_INTRC_OSC_NOCLKOUT
;内部クロックを利用、RA4ピンI/Oピン
__CONFIG
CB
;設定
;--
CBLOCK
H'20'
CONT1
;LED点滅カウント
SCONT1
;タイマカウント
ADH
;ADCのADRESHのデータ
ADL
;ADCのADRESLのデータ
EEA
;EEPROM書き込み時のアドレス
EED
;EEPROM書き込み時のデータ
ENDC
;--
ORG
H'0'
GOTO
INIT
;ORG
H'04'
;GOTO
H04
;--
INIT
;デバイス初期化
BCF
STATUS,RP0
;0バンク選択
BSF
CMCON,CM0
;コンパレータOFF
BSF
CMCON,CM1
;コンパレータOFF
BSF
CMCON,CM2
;コンパレータOFF
BCF
INTCON,PEIE
;周辺割り込みOFF
BSF
STATUS,RP0
;1バンク選択
;CALL
0x3FF
;
;MOVWF
OSCCAL
MOVLW
B'00000100'
;RP2入力用設定
MOVWF
TRISIO
;RP2入力用設定
BSF
ANSEL,ADCS0
;ADCA/D変換のクロック選択Fosc/8
BCF
ANSEL,ADCS1
;ADCA/D変換のクロック選択Fosc/8
BCF
ANSEL,ADCS2
;ADCA/D変換のクロック選択Fosc/8
BSF
ANSEL,ANS2
;アナログ入力設定
BCF
STATUS,RP0
;0バンク戻る
;-----------------------------------------------------------
MAIN
;その1、ADC変換したしてデータをEEPROに書き込み
CALL
ADCMAIN
MOVLW
H'0'
;書き込みアドレス
MOVWF
EEA
;書き込みアドレス
MOVF
ADH,W
;書き込みデータ
MOVWF
EED
;書き込みデータ
CALL
EEPROM
;CALL EEPROM書き込み
MOVLW
H'1'
MOVWF
EEA
MOVF
ADL,W
MOVWF
EED
CALL
EEPROM
;その2、ADC変換したデータを利用してLED点滅
BCF
GPIO,GPIO4
MOVF
ADH,W
;AEDデータを読み
MOVWF
CONT1
;カウント値
LEDOFF
NOP
CALL
S1TIME
CALL
S1TIME
CALL
S1TIME
DECFSZ
CONT1,F
GOTO
LEDOFF
BSF
GPIO,GPIO4
MOVF
ADH,W
MOVWF
CONT1
LEDON
NOP
CALL
S1TIME
CALL
S1TIME
CALL
S1TIME
DECFSZ
CONT1,F
GOTO
LEDON
GOTO
MAIN
;------------------------------------------------------------
;---
ADCMAIN
BCF
ADCON0,ADFM
;ADFM=0:左詰め
BCF
ADCON0,VCFG
;基準電圧VDD電源電圧
BSF
ADCON0,CHS1
;ADC対象ANポート,AN2
BCF
ADCON0,CHS0
;ADC対象ANポート,AN2
BSF
ADCON0,ADON
;ADC変換ON
CALL
ADCLK32
;充電時間約30μs
BSF
ADCON0,GO
;ADC変換
ENDAC
BTFSC
ADCON0,GO
;ADC変換完了待ち
GOTO
ENDAC
;ADC変換完了待ち
BCF
ADCON0,ADON
;ADC変換OFF
MOVF
ADRESH,W
;ADC変換後、ADRESHをWレジスタに
MOVWF
ADH
;ADC変換後、ADHファイルレジスタに保存
MOVF
ADH,F
BTFSC
STATUS,Z
;変換したデータが0の場合、ADCMAINへ
GOTO
ADCMAIN
;変換したデータが0の場合、ADCMAINへ
BSF
STATUS,RP0
;1バンク選択
MOVF
ADRESL,W
;ADC変換後、ADRESLをWレジスタに
BCF
STATUS,RP0
;0バング戻る
MOVWF
ADL
;ADC変換後、ADLファイルレジスタに保存
MOVF
ADL,F
BTFSC
STATUS,Z
;変換したデータが0の場合、ADCMAINへ
GOTO
ADCMAIN
;変換したデータが0の場合、ADCMAINへ
RETURN
ADCLK32
MOVLW
D'7'
;1 7x4+4=32μs
MOVWF
SCONT1
;
ADCLK32LOOP
NOP
;1
DECFSZ
SCONT1,F
;1
GOTO
ADCLK32LOOP
;2
RETURN
;2
;---
S1TIME
;1000μS、1mS
MOVLW
D'249'
;1 249X4+4=1000
MOVWF
SCONT1
;1
S1LOP
NOP
;1
DECFSZ SCONT1,F
;1
GOTO
S1LOP
;2
RETURN
;2
;---
EEPROM
BSF
STATUS,RP0
MOVF
EEA,W
;書き込みアドレス
MOVWF
EEADR
MOVF
EED,W
;書き込みデータ
MOVWF
EEDATA
BSF
EECON1,WREN
;書き込み許可
MOVLW
0X55
;書き込み手順
MOVWF
EECON2
MOVLW
0XAA
MOVWF
EECON2
BSF
EECON1,WR
;書き込み
RWC
BTFSC
EECON1,WR
GOTO
RWC
BCF
STATUS,RP0
;書き込み完了後、バイク0に戻る
RETURN
;戻る
;---
EEND
END
VIDEO