Alarma para coche con PIC16F887

Buenas, gente.

Estoy estudiando la universidad y mi profesor nos pidió que hiciéramos una alarma para carro con un PIC16F887
Tengo la base o la idea de cómo hacerlo, pero por alguna razón no me funciona la programación que hice.

¿Alguien que me pueda ayudar a saber qué es lo que tengo mal?
De antemano, muchas gracias.

Anexo el código que llevo hecho:

PHP:
#include <htc.h>
#define _XTAL_FREQ 4000000
void main(void)
{
TRISD=0;
TRISC=63;
if (RC0==0&&RC1==0&&RC2==0&&RC3==0&&RC4==0&&RC5==0)//Todo abierto
{
PORTD=0;
}
INICIO:
PORTD=0;
if (RC0==1&&RC1==0)//Se ponen seguros
{
PORTD=1;
__delay_ms(2);
PORTD=0;
__delay_ms(18);
goto PREALARMA;
}
PREALARMA:
if (RC2==1&&RC3==1&&RC4==1&&RC5==1)//todas las puertas están cerradas
{
if (RC0==0&&RC1==1)//Se quitan los seguros
{
PORTD=1;
__delay_ms(1);
PORTD=0;
__delay_ms(19);
goto INICIO;
}
}
if (RC2==0||RC3==0||RC4==0||RC5==0)//Si una puerta se abre sin quitar los seguros
{
goto ALARMA;
}
ALARMA:
PORTD=2;
if (RC0==0&&RC1==1)
{
PORTD=1;
__delay_ms(1);
PORTD=0;
__delay_ms(19);
goto INICIO;
}
}
 
Última edición por un moderador:
Buenas
No entiendo tu código parece una mezcla de ccs con picbasic, lo mejor seria que subieras tu proyecto comprimido en un archivo .rar con las librerías(htc.h),y la simulacion que utilizas para ver si podemos ayudar.
 
Algo que me dijeron era que nunca usara GOTO al programar, eso produce Código espagueti.

Las etiquetas solo son puntos de memoria que guardas por si las ocupas luego, no son subrutinas y todas las tienes encapsuladas dentro del Main así que una se ejecutará después de la otra, en algunos casos incluso usas una condicional para entonces llamar a un goto y enviar a la posición que está más adelante, como la etiqueta no es subrutina, aun si la evaluación fuera falsa, el programa continuará y ejecutará lo siguiente cuando no debía hacerlo, debes estructurar bien tu programa, no como lo llamas con goto.

Esto es un ejemplo de programación estructurada.
Código:
#include<htc.h>
#define _XTAL_FREQ 4000000
//Prototipo de funciones
void prealarma(void); 
void alarma(void);

//Codigo principal de ejecucion
void main(void)
{
    TRISD=0;
    TRISC=63;
    if(RC0==0&&RC1==0&&RC2==0&&RC3==0&&RC4==0&&RC5==0)//Todo*abierto
    {
        PORTD=0;
    }
    while(1) //Bucle infinito
    {
        PORTD=0;
        if(RC0==1&&RC1==0)//Se*ponen*seguros
        {
            PORTD=1;
            __delay_ms(2);
            PORTD=0;
            __delay_ms(18);
            prealarma();
        }
        
    }
} 
void prealarma(void)
{
    /*
    * Cambio a while para no realizar otra comprobacion adicional para activar la alarma
    * se mantendra comprobando si se desactiva el seguro o saldra de while al abrirse una puerta
    */
    while(RC2==1&&RC3==1&&RC4==1&&RC5==1)//todas*las*puertas*están*cerradas
    {
        if(RC0==0&&RC1==1)//Se*quitan*los*seguros
        {
            PORTD=1;
            __delay_ms(1);
            PORTD=0;
            __delay_ms(19);
            return; //esto retorna del void y regresa al punto donde se llamo la subrutina
        }
    }
     alarma(); //La alarma se ejecuta si se rompe el while al abrir una puerta.
}
void alarma(void)
{
    PORTD=2;
    if(RC0==0&&RC1==1)
    {
    PORTD=1;
    __delay_ms(1);
    PORTD=0;
    __delay_ms(19);
    }
}
Si evitas el código espagueti es más fácil evitar los errores que causan los GOTO, no se si resuelva todo tu problema por que me confundió tu código :LOL:
 
Saludos con toda esta maravillosa comunidad... Pues he estado trabajando en un Sitema de seguridad para vivienda... Me gustaría que me ayuden con sus comentarios e ideas... . Es un programa el cual activa el sistema de seguridad bajo una contresaña prestablecida en caso de no colocar la contraseña correctamente en 3 oportunidades la sirena se encenderà. Asimismo, al momento de activar el sistema de seguridad en caso de leer una entra (que serà el sensor PIr a su debido momento ) se activará la sirena... UNICAMNETE serà posible silenciar la alarma cuando se coloque la contraseña correctamente...
 

Adjuntos

  • alarma.rar
    138 KB · Visitas: 15
  • Captura.JPG
    Captura.JPG
    151.2 KB · Visitas: 27
  • Captura2.JPG
    Captura2.JPG
    150.7 KB · Visitas: 23
  • Captura3.JPG
    Captura3.JPG
    156.2 KB · Visitas: 19
Atrás
Arriba