MPLAB X IDE v3.05 XC8 16F88 AD変換された10bitデータをLEDで表示(右詰) ADRESH/ADRESL |
// ***************************************************************************** // < コンパイラ MPLAB X XC8 > 怪答PIC 2015/07/012 // // 16F88 AD変換 取得データ(右詰データ) // ADRESH PORTB RB7 2^9 RB6 2^8 RB5 2^7 RB4 2^6 RB3 2^5 RB2 2^4 RB1 2^3 RB0 2^2 // ADRES PORTA RA6 2^0 RA7 2^1 に表示 (^^; // ***************************************************************************** // 1 RA2 AN2 電圧入力 // 2 RA3 AN3 // 3 RA4 AN4 // 4 RA5 // 5 Vss E // 6 RB0 LED 2^0 1桁 // 7 RB1 LED 2^1 2桁 // 8 RB2 LED 2^2 3桁 // 9 RB3 LED 2^3 4桁 // 10 RB4 LED 2^4 5桁 // 11 RB5 LED 2^5 6桁 // 12 RB6 AN5 LED 2^6 7桁 // 13 RB7 AN6 LED 2^7 8桁 // 14 Vdd + 5V // 15 RA6 LED 2^8 9桁 // 16 RA7 LED 2^9 10桁 // 17 RA0 AN0 // 18 RA1 AN1 // ***************************************************************************** #include <xc.h> #define _XTAL_FREQ 4000000 // 4MHz // 16F88 // CONFIG1 #pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off) #pragma config CCPMX = RB3 // CCP1 Pin Selection bit (CCP1 function on RB3) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) // CONFIG2 #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled) #pragma config IESO = OFF // Internal External Switchover bit (Internal External Switchover mode disabled) void main() { OSCCON = 0b01100000; // 内蔵クロックの周波数を4MHzに設定 PORTA = 0x00; // PORTAを初期化 PORTB = 0x00; // PORTBを初期化 TRISA = 0b00000100; // PORTAの入出力設定 TRISB = 0b00000000; // PORTBの入出力設定 ANSEL = 0b00000100; // AN2を有効化 ADCON0 = 0b01010001; // Fosc/8, ADON ADCON1 = 0b11000000; // 右詰め, AVdd, AVss while(1) { __delay_us(20); // 待ち時間 GO_DONE = 0b1; while(GO_DONE); PORTB = (ADRESL >> 0); // PORTB RB1 2^0 RB2 2^1 RB3 2^2 RB3 2^3 RB4 2^4 RB5 2^5 RB6 2^6 RB7 2^7 PORTA = (ADRESH << 6); // PORTA RA6 2^8 RA7 2^9 } 覚書 PORTB = (ADRESL >> 0); >>0 はシフトしませんでした。 >> の動作が???でしたので(^^; 右詰めでAD変換なので、(ADRESH )だけでOKです。実験済 ADRESH 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 PORTA = (ADRESL << 6); 右詰めなのでADデータはBit1 Bit0に入っています。 PORTAのbit7 bit6 にデータを出力する為に Bit1 Bit0 データを左に6回移動しなければ ならないので (ADRESL << 6) として左にシフトします。 ADRESL 2^9 2^8 0 0 0 0 0 0 16F88_010.c |