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