Programación Específica => Microcontroladores => Programación en C => Mensaje iniciado por: granaino1988 en Viernes 16 de Octubre de 2009, 14:14
Título: leer varios pines de un puerto y hacer una determinada cosa.
Publicado por: granaino1988 en Viernes 16 de Octubre de 2009, 14:14
necesito hacer un programa que lea 3 pines del puerto b y si se cumplen unas condiciones se ponga en el puerto c un codigo(0b11101001)
les dejo el programa que he trabajado
gracias
#include "16f877a.h" // este include es para definir el tipo de PIC que vamos a utilizar en nuestro caso es el PIC16F877 #byte pa=5 // definimos el puerto A en el bit 5 #byte pb=6 // definimos el puerto B en el bit 6 #byte pc=7 // definimos el puerto C en el bit 7 #byte pd=8 // definimos el puerto D en el bit 8 #use delay(clock=4m) // aqui declaramos que use el reloj que sera de 4 Mhz. //#include "stdio.h" // incluimos esta libreria para poder usar mas adelante la funcion printf asi como otras tambien.
int lectura_ldr,lectura_rb0,lectura_rb1;
void ldr_motor() // hacemos una funcion para subir la persiana dependiendo de los finales de carrera y de la LDR. { lectura_ldr=pin_b3;// hacemos que la variable lectura de la LDR sea igual al pin A5 del pic. lectura_rb0=pin_b1;// hacemos que la variable lectura del pin rb0 sea igual al pin B0 del pic. lectura_rb1=pin_b2;// hacemos que la variable lectura del pin rb1 sea igual al pin B1 del pic. // hacemos un while 1 para que se repita lo que tenemos dentro de los corchetes.
if (lectura_ldr==1 && lectura_rb0==1 && lectura_rb1==0)// hacemos un if que si se cumplen lo que ponemos dentro de los parentesis, se haga lo que { // hay dentro de los corchetes que una vez sera subir o bajar o no hacer nada. output_high(pin_c7); // hacemos que la salida del pin c7 sea igual a 1 porque queremos que suba la persiana. output_low(pin_c6); // hacemos que el pin c6 sea igual a 0 porque el motor necesita un 0 en un pin en 1 y otro a 0 para que suba o baje. } if (lectura_ldr==1 && lectura_rb0==0 && lectura_rb1==1)// en este if lo que hacemos es que si se cumplen las condiciones en los parentesis { // se haga lo que tenemos en los corchetes. output_low(pin_c7); // hacemos que el pin c7 sea 0 porque en esta ocasion no queremos que se suba o se baje la persiana. output_low(pin_c6); // hacemos que el pin c6 sea 0 para que ni suba ni baje. } if (lectura_ldr==0 && lectura_rb0==0 && lectura_rb1==1)// en el if ponemos unas condiciones que si se cumplen se hace lo que tenemos { // en los corchetes. output_low(pin_c7); // ponemos a 0 el pin c7. output_high(pin_c6);// ponemos el pin c6 a 1. } if (lectura_ldr==0 && lectura_rb0==1 && lectura_rb1==0)// en el if ponemos las condiciones que si son ciertas se hace lo de los corchetes. { output_low(pin_c6);// ponemos a 0 el pin c6. output_low(pin_c7);// ponemos a 0 el pin c7 porque en este caso no se movera la persiana. }
}
void main() { set_tris_d(0); // declaramos que el puerto D sea de salida, porque aqui es donde vamos a conectar la LCD. set_tris_b(0b11111111); // declaramos que el puerto B sea de entrada, porque es donde conectaremos los pulsadores y los finales de carrera. set_tris_c(0x00); // declaramos el puerto C como salida, puesto que aqui vamos a conectar el motor y las difentes fases de luz. set_tris_a(0xff); pc=(0); pd=(0);// declaramos que el puerto A sea como entrada puesto que aqui vamos a conectar los dos termometros. pa=(0); pb=(0); ldr_motor(); }
Título: Re: leer varios pines de un puerto y hacer una determinada cosa.
Publicado por: allisap en Sábado 14 de Noviembre de 2009, 04:30
Citar
necesito hacer un programa que lea 3 pines del puerto b y si se cumplen unas condiciones se ponga en el puerto c un codigo(0b11101001)