TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: HumbertoN en 28 de Abril de 2020, 19:53:48
-
Qué tal buenas tardes!! Voy comenzando en esto de la programación de microcontroladores, y no sé o no entiendo muy bien el cambiar la justificación de los bits de salida. Estoy realizando un ADC con el 18f2550, AN0 es mi entrada con un potenciometro, y el puerto B es mi salida, son 8 bits, y son leds. Lo que no sé realizar es cambiar la justificación del puerto B completo, ya que con unos switch, si uno está activado los leds deberán comenzar a contar en binario para un lado, y con el otro switch deberán contar hacia el otro lado. O sea, en un caso B0 es mi bit más significativo y B7 es el menos, y en el otro caso es lo contrario, B7 es el más y B0 el menos. Agradecería mucho como resolver esto!
El programa que llevo es este, si tengo algo de más es que no sé muy bien programar aún, una disculpa! Jajajaja
#Include <18F2550.h>
#include <stdio.h>
#include <stdlib.h>
#Fuses INTRC,NOMCLR,NOBROWNOUT
#Use delay (internal=8M)
int x;
void main()
{
output_b(0);
setup_adc(adc_clock_internal);
set_adc_channel(0);
While(True)
{
x=read_adc();
delay_us(50);
if(input(PIN_A1)==1 && input(PIN_A2)==0)
{
x=ADRESH;
output_b(x);
}
if(input(PIN_A1)==0 && input(PIN_A2)==1)
{
x=ADRESL;
output_b(x);
}
if(input(PIN_A1)==1 && input(PIN_A2)==1)
{
output_b(0);
}
if(input(PIN_A1)==0 && input(PIN_A2)==0)
{
output_b(0);
}
}
}
-
Aún no me funciona, salu2 jajajaajj
-
Tú estás usando el adc en modo 8 bits por lo que justificación ninguna.
ADRESH lo tienes nulo, solo usas ADRESL
Si quieres usar modo 10 bits tienes que poner justo debajo del include <18f2550.h>
Un #define ADC 10
La justificación a izquierda o derecha es para cuando usas el modo 10 bits. En ese caso son dos registros ADRESH y ADRESL.
Entre los dos te dan los 10 bits del valor que varía de 0 a 1023. Si justificas a derecha , ADRESH.1 y ADRESH.0 te da los dos bits de mayor peso del valor. ADRESL te la los 8 bits restantes. El resto de ADRESH se queda a cero sin uso.
Si justificas a izquierda ADRESH te da los 8 bits de más peso mientras que ADRESL.7 y ADRESL.6 contiene los otros dos bits. El resto de ADRESL queda a cero.