Me acabo de registrar en este foro porque he visto cosas muy interesantes y ahora tengo un problema, que espero me puedan ayudar a resolver
Pues resulta que en la universidad me dejaron como tarea hacer un programa en ccs y pic 16f84 que haga lo siguiente:
1. Encender un led (L1) al insertar de manera correcta la siguiente combinacion con push buttons (boton (b1) , luego boton2 (b2) y al ultimo los 2 botones al mismo tiempo (B1,B2) )
2. Solo cuando el led anterior (L1) ya esta encendido, al apretar otro boton (B3) se encenderan 3 leds (L2,L3,L4) al mismo tiempo y al apretar otra vez B3 los leds L1,L2,L3, se apagaran.
3. Para apagar el led (L1) la combinacion sera la misma que la de encendido.
4. Si apagamos L1 y los otros leds (L2,L3,L4) estan prendidos, estos ultimos deberan apgarse secuencialmente.
5. El pic tendra un pin de salida conetado a un pin de entrada (feedback), que funcionara bajo las misma condiciones de L1, solo si esta conectado el cable(feedback), al presionar B3 se podra encencer L2,L3,L4, independientemente de que L1 ya este activado, si el desconectamos cable de feedback los leds L2,L3,L4, se apagaran secuencialmente, una vez que lo volvamos a conectar el feedback, deberemos apretar B3 para volver a encenderlos.
He hecho el programa en ccs y al simlarlo en proteus funciona muy bien.
Pero al hacerlo en protoboard no me funciona correctamente.
Dejo el programa adjunto y el archivo de proteus.
*Nota: Soy principiante y a mi parecer la programacion esta algo confuso, espero su ayuda a modificar el programa o si alguien lo puede hacer bien desde un principio lo agradeceria mucho
#include "C:\Documents and Settings\XPMUser\Escritorio\pruebas\ok.h"
int encend=0;
int arranc=0;
#byte port_b=0x06
#byte port_a=0x05
#byte trisa=0x85
#byte trisb=0x86
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
trisb=0x00;
trisa=0xff;
port_b=0;
do{
do{
if(input(pin_a0)){ //EL PROBLEMA ES AQUI, SIEMPRE ENTRA A ESTA CONDICION Y REALIZA LAS SIGUIENTES INSTRUCCIONES
output_high(pin_b0);
delay_ms(1000);
output_low(pin_b0);
delay_ms(1000);
output_high(pin_b0);
delay_ms(1000);
output_low(pin_b0);
delay_ms(1000);
output_high(pin_b0);
delay_ms(4000);
output_low(pin_b0);
delay_ms(4000);
if(input(pin_a1)){
output_high(pin_b0);
delay_ms(400);
output_low(pin_b0);
delay_ms(400);
output_high(pin_b0);
delay_ms(400);
output_low(pin_b0);
delay_ms(400);
output_high(pin_b0);
delay_ms(1000);
output_low(pin_b0);
delay_ms(1000);
output_high(pin_b0);
delay_ms(1000);
output_low(pin_b0);
delay_ms(1000);
output_high(pin_b0);
delay_ms(2500);
output_low(pin_b0);
delay_ms(2500);
if(port_a==3){
output_high(pin_b0);
delay_ms(200);
output_low(pin_b0);
delay_ms(200);
output_high(pin_b0);
delay_ms(200);
output_low(pin_b0);
delay_ms(200);
output_high(pin_b0);
delay_ms(200);
output_low(pin_b0);
delay_ms(200);
output_high(pin_b0);
delay_ms(200);
output_low(pin_b0);
delay_ms(200);
output_high(pin_b0);
output_high(pin_b4);
encend=1;
}
}
}
}while(encend==0);
if(encend==1){
do{
if(input(pin_a2) && input(pin_a3) && arranc==0){
output_high(pin_b1);
output_high(pin_b2);
output_high(pin_b3);
arranc=1;
delay_ms(2000);
}
if(input(pin_a2) && input(pin_a3) && arranc==1){
output_low(pin_b1);
output_low(pin_b2);
output_low(pin_b3);
arranc=0;
delay_ms(2000);
}
if(port_a==9){
output_high(pin_b0);
delay_ms(500);
output_low(pin_b0);
delay_ms(500);
output_high(pin_b0);
delay_ms(500);
output_low(pin_b0);
delay_ms(500);
output_high(pin_b0);
delay_ms(2000);
output_low(pin_b0);
delay_ms(2000);
output_high(pin_b0);
if(port_a==10){
output_high(pin_b0);
delay_ms(400);
output_low(pin_b0);
delay_ms(400);
output_high(pin_b0);
delay_ms(400);
output_low(pin_b0);
delay_ms(400);
output_high(pin_b0);
delay_ms(1000);
output_low(pin_b0);
delay_ms(1000);
output_high(pin_b0);
delay_ms(1000);
output_low(pin_b0);
delay_ms(1000);
output_high(pin_b0);
delay_ms(2500);
output_low(pin_b0);
delay_ms(2500);
output_high(pin_b0);
if(port_a==11){
output_high(pin_b0);
delay_ms(200);
output_low(pin_b0);
delay_ms(200);
output_high(pin_b0);
delay_ms(200);
output_low(pin_b0);
delay_ms(200);
output_high(pin_b0);
delay_ms(200);
output_low(pin_b0);
delay_ms(200);
output_high(pin_b0);
delay_ms(200);
output_low(pin_b0);
delay_ms(200);
output_low(pin_b0);
output_low(pin_b4);
encend=0;
}
}
}
if(input(pin_a3)==0){
delay_ms(3000);
output_low(pin_b1);
delay_ms(3000);
output_low(pin_b2);
delay_ms(3000);
output_low(pin_b3);
}
}while(encend==1);
}
}while(true);
}
Estoy usando oscilador de 12Mhz, porque es el unico que tengo
Archivo Proteus
http://www.megaupload.com/?d=OV5YZD8V