;16F877のAD変換 ;AN0 = A ;AN1 = D ;AN2 = D ;AN3 = D ;AN4 = D ;********************************************* ;AD変換の説明 ;********************************************* ;1.ADモジュールの構成を設定 (初期化処理) ; どのピンでAD変換するか決める。→ADCON1 ; AD変換のスイッチをオンにする。→ADCON0 ;2.AD変換の準備のため待つ。 ; 入力取得時間経過を待つ 20μ秒 ;3.変換をはじめる。 ; ADCON0のGOを1にするとAD変換が始まる。 ;4.変換が終わったか調べる。 ; AD変換が終わるとADCON0のGOが0になるので比較演算等の処理をするのはそれからにする。 ;5.変換結果を読み込む。 ; 変換結果がADRESHとADRESLに入っているので、どこか他の場所に移す。 ;********************************************* LIST P=PIC16F877 INCLUDE "P16f877.inc" __CONFIG _HS_OSC & _PWRTE_ON & _WDT_OFF & _LVP_OFF ;********************************************* CBLOCK 024h TIMCNT ;タイマ用カウンタ TIM2CNT TIM5CNT TIM1CNT ADHK_H ;AD変換の値(上の8ビット) ADHK_L ;AD変換の値(下の8ビット) PORTB_OUT ENDC ;********************************************************* ORG 0 ;********************************************************* ;<ここで1番> SET_IO ;初期処理 BSF STATUS,RP0 ;これからピンの設定をする。 BCF INTCON,GIE ;(割り込み禁止) MOVLW 0EH MOVWF ADCON1 ;RA0のみアナログ、(ADFM=0(結果左詰)) MOVLW 07H MOVWF OPTION_REG ;(内部クロック、プリスケーラ1:256) MOVLW 01H MOVWF TRISA ;ポートAのRA0は入力、他は出力 CLRF TRISB ;ポートBを出力モードに設定 CLRF TRISC ;ポートCを出力モードに設定 CLRF TRISD ;ポートDを出力モードに設定 CLRF TRISE ;ポートEを出力モードに設定 BCF STATUS,RP0 ;これでピンの設定は終わり。 MOVLW 080H ;A/Dコンバータをオフにする。 MOVWF ADCON0 ;ADCON0に080hを書き込むとオフになる。 ADSTART ;A/D変換をはじめる。 MOVLW 081H ;(Fosc/32,ch0,A/D on) MOVWF ADCON0 ;ADCON0に081hを書き込むとオンになる。 ;<ここで2番> CALL TIM20 ;20μsec待ち = AD変換には時間が必要。 ;<ここで3番> BSF ADCON0,GO ;AD変換スタート WAITE ;AD変換結果待ち ;<ここで4番> BTFSC ADCON0,GO ;AD変換が終わるとADCON0のGOが0になるので調べている。 GOTO WAITE ;終わっていないなら前に戻る。 ;<ここで5番> ;AD変換された値を読み込む。 MOVF ADRESH,W ;(AD上位ビット(左詰め)) MOVWF ADHK_H BSF STATUS,RP0 ;(バンク1へ切替) MOVF ADRESL,W BCF STATUS,RP0 ;(バンク0に戻す) MOVWF ADHK_L ;************************************************************ ;AD変換の結果はADHK_HとADHK_Lに入ってる。 ;ここからメインの処理を書く。 MOVF ADHK_L,W MOVWF PORTB GOTO ADSTART ;************************************************************ TIM20 ;約20μSECタイマ MOVLW 012H MOVWF TIMCNT TIMLP DECFSZ TIMCNT,F GOTO TIMLP RETURN TIM02 ;約0.2mSECタイマ MOVLW 0FFH MOVWF TIM2CNT TIM2LP NOP DECFSZ TIM2CNT,F GOTO TIM2LP RETURN ;********************************************************* END