;********************************************************************** ;A/D CONV TEST1 RIKIYA 2001.11.08 ;DEVICE : PIC16F873 ;CLOCK : 20MHz ; ;********************************************************************** list p=16F873 #include __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF TCNT EQU 20H ;********************************************************************** ORG 0x000 ; processor reset vector GOTO MAIN ; go to beginning of program MAIN BSF STATUS,RP0 ;メモリーバンクを1にセット CLRF TRISB ;TRISBをクリア PORT-Bを出力にセット MOVLW 081H ;Wレジスタに81Hをセット MOVWF OPTION_REG ;OPTION_REGに81Hをセット PORT-B PULL UPなし MOVLW 00EH ;Wレジスタに0EHをセット MOVWF ADCON1 ;CH0のみAIN REF = VDD MOVLW 001H ;Wレジスタに01Hをセット MOVWF TRISA ;TRISAに01Hをセット PORT-A0だけを入力 BCF STATUS,RP0 ;メモリーバンクを0にセット ;*********************************************************************** ;A/D変換処理を繰り返す ;*********************************************************************** LOOP MOVLW 081H ;Wレジスタに81Hをセット MOVWF ADCON0 ;ADCON0に81Hをセット A/D CH0,Fosc/32,CHARGE CALL ADWAIT ;20uSの待機 BSF ADCON0,GO ;ADCON GOビットを1にセット 変換開始 WAIT BTFSC ADCON0,GO ;GOビットが0なら、次の命令をジャンプ GOTO WAIT ;ラベルWAITに戻る MOVF ADRESH,W ;AD変換データを取り込む MOVWF PORTB ;データをPORT-Bに出力 CALL ADWAIT ;1アクイジション待機 GOTO LOOP ;ラベルLOOPに戻る ;*********************************************************************** ;20uSのタイマ ;20MHz 1サイクル 0.2uS ;100サイクルx0.2uS = 20uS ;*********************************************************************** ADWAIT MOVLW 020H ;1 Wレジスタに20H(32)をセット MOVWF TCNT ;1 TCNT変数に1AHをセット NOP ;1 TLOOP DECFSZ TCNT ;1x31+2 TCNT-1を行い0になったら次の命令ジャンプ GOTO TLOOP ;2x31 ラベルTLOOPに戻る RETURN ;2 戻る END