#include <12F1822.h>
//#device ADC=16
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOMCLR
#FUSES PROTECT //Code protected from reads
//#FUSES CPD //Data EEPROM Code Protected
#FUSES NOBROWNOUT //No brownout reset
//#FUSES WRT //Program Memory Write Protected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(internal=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A2,bits=8,stream=PORT1,ERRORS)
//#USE STANDARD_io (A)
#BYTE portA= 0x0C
#USE FAST_IO (A) // Optimizamos E/S del PORTB ( muy importante para ahorrar memoria )
//#ORG 0x0A, 0X7FF {}
#DEFINE ACC PORTA,3// POSITIVO
#DEFINE PUERTA PORTA,4// NEGATIVO
UNSIGNED INT32 CONTADOR=0;
INT CONTADOR2=0;
CHAR numero;
#int_timer0
void timer0()
{
CONTADOR++;
//IF (CONTADOR==7200000)
IF (CONTADOR==10000)
{
output_LOW(pin_A1);
CONTADOR=0;
//printf("TEMPORIZANDO\n\r");
DISABLE_INTERRUPTS(INT_TIMER0);
CONTADOR2=0;
}
/* IF ((!BIT_TEST(PUERTA))&(BIT_TEST(ACC)))
{
DISABLE_INTERRUPTS(INT_TIMER0);
CONTADOR=0;
break;
}*/
//printf("TEMPORIZANDO\n\r");
//printf("%d\n",CONTADOR2);
SET_TIMER0(140);
}
void main ()
{
set_tris_A(0b111100); // todos salidas
output_A(0x00); // 0000 0000 limpio puerto
setup_timer_0(RTCC_INTERNAL| RTCC_DIV_4);
set_timer0(140);
ENABLE_INTERRUPTS(INT_TIMER0);
ENABLE_INTERRUPTS(GLOBAL);
output_HIGH(pin_A5);
WHILE (TRUE)
{
IF ((!BIT_TEST(PUERTA))&(BIT_TEST(ACC))) // Puerta abierta(neg) y ACCesorios en on (pos)
{
DISABLE_INTERRUPTS(INT_TIMER0);
CONTADOR=0;
output_HIGH(pin_A1);
CONTADOR2=1;
}
IF ((BIT_TEST(PUERTA))&(BIT_TEST(ACC)))
{
DISABLE_INTERRUPTS(INT_TIMER0);
CONTADOR=0;
output_HIGH(pin_A1);
CONTADOR2=1;
}
IF ((BIT_TEST(PUERTA))&(!BIT_TEST(ACC)))
{
IF (CONTADOR2==1)
{
ENABLE_INTERRUPTS(INT_TIMER0);
//CONTADOR=0;
//output_LOW(pin_A5);
}
}
IF ((!BIT_TEST(PUERTA))&(!BIT_TEST(ACC)))
{
DISABLE_INTERRUPTS(INT_TIMER0);
CONTADOR=0;
output_HIGH(pin_A1);
CONTADOR2=1;
}
//printf("%d\n",CONTADOR2);