De nada.
La manera de cambiar la justificación es simple. Se puede hacer en C, sin ASM.
...............
#byte ADCON1=0x9F
...............
ADCON1=0b10000000; //Puerta A entradas analógicas
...............
1 = Pone en el registro ARDESH los seis bit de mayor peso a “0” (alineación a la derecha).
0 = pone los 6 bit de menor peso del registro ADRESL a “0” (alineación a la izquierda).
Por lo tanto los 16 bits que forman el registro ARDESH-ARDESL con ADFM=1 tiene los 6 bit de mayor peso a cero y con ADFM=0 los 6 bit de menor peso están a cero.
El programa completo es:
#device PIC16F876 ADC=10
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=62, rcv=63) // PIN_C6=62 y PIN_C7=63
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT
#define ADC_CLOCK_DIV_32 0x81
#define ALL_ANALOG 0x80 // A0 A1 A3 Ref=Vdd
#define ADC_CLOCK_INTERNAL 0xC1 // Internal 2-6us
#define ADC_START_AND_READ 7 // This is the default if nothing is specified
#define ADC_START_ONLY 1
#define ADC_READ_ONLY 6
#define GO 2
#define ADIF 6
#define ADON 0
#byte PIR1=0x0C
#byte TRISA=0x85
#byte ADCON1=0x9F
#byte ADCON0=0x1F
#byte ADRESL=0x9E
#byte ADRESH=0x1E
void main()
{
//Se activa el ADC y se selecciona el canal RA3/AN3. Frecuencia de trabajo Fosc/32
int h, l;
float const resol = 5.0/1024.0;
float volt;
long int medida;
TRISA=0b00001000; //Puerta RA3 entrada
ADCON0=0b10011001; //ADC en On, seleciona canal AN3
ADCON1=0b10000000; //Puerta A entradas analógicas
while(1)
{
bit_clear(PIR1,ADIF); //Restaura el flag del conversor AD
bit_set(ADCON0,GO); //Inicia la conversión
// while(bit_test(PIR1,ADIF)); //Fin de conversión ??
while(bit_test(ADCON0,GO)); //Fin de conversión ??
h=ADRESH;
l=ADRESL;
medida=make16(h,l);
volt=medida*resol;
// printf("
(%ld) Voltios ",medida);
printf("
(%f) ",volt);
// bit_clear(ADCON0,GO);
delay_ms(500);
}
}
Lo del device ... no entiendo muy bien a qué te refieres. Pon = a 10 y ya está. Justificado a la derecha y los ceros a la izquierda.
Un saludo.