//A/D変換 #include #include #include void main(void) { //PORTAを全部入力に TRISA=0xFF; //PORTBを全部出力に TRISB=0x00; //A/D変換の設定 //ANxピンすべてアナログ入力に ADCON1のbit0からbit3で指定できる //A/D変換の結果の格納方法指定 左寄せにする ADCON1のbit7で指定できる 1なら左寄せ。0なら右寄せ ADCON1=0x00; //A/D変換クロック指定 Fosc/32 ADCON0のbit7とbit6で指定できる ADCON0=0x80; //チャンネルの指定 ch0(RA0)にする ADCON0のbit3,bit4,bit5で指定できる ADCON0&=0xC7; int i; while(1) { //A/D変換開始(蓄積開始) ADCON0のbit0を1にすることでA/D変換が開始される ADCON0|=0x01; //入力電圧をコンデンサに蓄積中 約20μ秒待てば良い i<10はてきとうに決めた for(i=0;i<10;i++); //蓄積が終わったので変換開始 ADCON0のbit2を1にすることで変換が開始される ADCON0|=0x04; //変換が終わるまで待つ 変換が終わるとADCON0のbit2が自動で0になる while((ADCON0&0x04)==0x04); //PORTBに結果を出力 //変換結果がADRESH ADRESLというレジスタに入っている。ADRESLに入っているのは10bitの内下位2bitなので無視した PORTB=ADRESH; } }