TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: polo1984 en 08 de Febrero de 2007, 14:42:40
-
hola a todos!!
estoy haciendo las primeras pruebas con los pics progrmanado en c y tengo varias dudas de principiante.
lo primero ¿se pueden hacer programas sin que tengan un bucle infinito? ya que todos los ejemplos que he visto (tampoco es que haya visto muchos todavia) tienen un bucle que se repite; por ejemplo cogiendo datos de un adc y visualizandolos cada cierto tiempo. se podria hacer el siguiente programa:
#include <16F876A.h>
#device adc=8
#use delay(clock=16000000)
#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
#byte puerto_a=40
#byte puerto_b=48
#byte puerto_c=56
#use fast_io(B)
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(FALSE); // Desactivamos pull-ups del puerto B
int8 x, y;
set_tris_a(0x00);
set_tris_b(0x00);
set_tris_c(0x00);
/*puerto a todo salidas a nivel alto; puerto B todas salidas nivel bajo
y puerto c sacara la suma entre dos enteros*/
x=2;
y=3;
puerto_a=0xff;
puerto_b=0x00;
puerto_c=x+y;
}
si se miran los pines del puerto C deberian ser la siguiente si se empieza opr el pin C7-->00000101, ¿verdad?
otra duda que tengo es sobre la libreria del lcd que incorpora el compilar PCWH o como he leido tambien CCS(por lo menos eso creo :D) tengo un lcd de 16x2 de cebek, el modelo exacto es el c2602, segun me ha parecido ojeando un poco el foro, esta libreria se usa para conectar el lcd con 4 pines de datos mas los de control, no hay otra libreria para conectar los 8 pines? aunque bueno esta duda no se puede decir que sea algo que me corra prisa, ya que como veis estoy empezando y no me voy a meter todavia con el lcd.
y por ultimo (aunque esta la tendria que hacer al lo mejor en otra parte del foro), si conecto la patilla MCLR/Vpp para que se realice un reset cuadno pierda la alimentacion, ¿que debo hacer con la patilla Vdd? y ya que estamos, ¿es conveniente conectar las dos patillas Vss que tiene por ejemplo el pic16f876 a masa, o solo con una valdria?
gracias por vuestro tiempo y un saludo;)
-
1. el bucle infinito es porque no tienes sistema operativo o a 'donde ir' cuando termine el programa. Si haces un programa en ensamblador también harías lo mismo, siempre terminas haciendo un bucle para que el pic no siga ejecutando líneas al azar.
2. En un pic con varios pines de Vss, debes unirlos a TODOS. Idem con pines de Vdd.
3. Un valor binario en ASM o en C, se arma de derecha a izquierda, donde el último dígito es el menos significativo. Es como el sistema decimal.
Ej. 0b00000001
El 1 hace referencia a la posición 0, si fuera la lectura del PORTC, hablaríamos del PORTC<0>
En un número decimal si haces 25, el 5 es las unidades y el 2, las decenas. Osea que el dígito más a la derecha es el menos significativo.
4. Un circuito de reset es muy sencillo, por ej.
4.a) Una resistencia de MCLR a Vdd
4.b) Una resistencia de MCLR a Vdd y un capacitor pequeño de MCLR a GND.
-
Quiero agregar a lo expuesto por Maunix con tanta maestria, que el bucle infinito se hace luego de la configuracion del microcontrolador (puertos, timers, perifericos, etcetera).
Si no quieres un bucle infinito debes utilizar interrupciones y poner a dormir al micro (sleep). :lol: :lol: :lol:
-
Quiero agregar a lo expuesto por Maunix con tanta maestria, que el bucle infinito se hace luego de la configuracion del microcontrolador (puertos, timers, perifericos, etcetera).
Si, es cierto, debería ir luego de la preconfiguración de lo que solo se deba configurar una vez. :)
Si no quieres un bucle infinito debes utilizar interrupciones y poner a dormir al micro (sleep). :lol: :lol: :lol:
Si, jeje, muy ocurrente.
Y si justo despierta del sleep también debiera ir a un bucle. Si mal no recuerdo al despertar del sleep se ejecuta la instrucción próxima siguiente y en ese caso estaríamos en lo mismo.
-
hola d eneuvo
gracias por las respuestas, ya me han quedado las dudas resueltas. me pondre a probar fisicamente para ver que tal fincionan.
sobre las librerias del lcd no sabeis como se deben conectar el lcd?
un saludo
-
Creo recordar, que si no se pone un bucle infinito, el pic se resetea al llegar a la última instrucción
Suerte!!! ;)
-
yo lo que he visto es que sino se pone el bucle, en CCS aparece la instrucción SLEEP al final en ensamblador
Salu2
Pedro
-
2. En un pic con varios pines de Vss, debes unirlos a TODOS. Idem con pines de Vdd.
Siempre pensé que el hecho de que las alimentaciones estén duplicadas se debe a temas de diseño; es decir, para que cuando diseñes tu placa puedas alimentar el micro desde dos posiciones distintas. Por esto es que nunca cortocircuto las alimentaciones en el PIC. ¿Realmente es necesario cortocircuitarlas? ¿Por qué?
Saludos
-
Creo recordar, que si no se pone un bucle infinito, el pic se resetea al llegar a la última instrucción
Depende del compilador... depende de tu código, depende de cómo lo organices.
Esto es cierto únicamente si tu código está bien arriba y termina bien abajo , y abajo están solamente sentencias NOP (0x3FF en los 16F o 0xFFF en los 18F), al llegar el PC a su máximo valor, ocurre un 'overflow' y se hace 0.