1
« 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();
}