

 
#include <xc.h>
#define _XTAL_FREQ 20000000 //define crystal frequency to 20MHz
 
    // CONFIG
#pragma config FOSC = XT     // Oscillator Selection bits (RC oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF       // Brown-out Reset Enable bit (BOR disabled)
#pragma config CP = OFF      // Flash Program Memory Code Protection bit (Code protection off)
 
/*
#define ajto1 RA0
#define ajto2 RA1
#define ajto3 RA2
#define ajto4 RA3
#define ajto5 RB0
#define ajto6 RB1
 */

typedef unsigned char		BYTE;
typedef union _BYTE_VAL
{
    BYTE Val;
    struct
    {
        unsigned char b0:1;
        unsigned char b1:1;
        unsigned char b2:1;
        unsigned char b3:1;
        unsigned char b4:1;
        unsigned char b5:1;
        unsigned char b6:1;
        unsigned char b7:1;
    } bits;
} BYTE_VAL, BYTE_BITS;
 
BYTE_VAL porta = 0;
BYTE_VAL portb = 0;

#define ajto1 (porta.bits.b0)
#define ajto2 (porta.bits.b1)
#define ajto3 (porta.bits.b2)
#define ajto4 (porta.bits.b3)
#define ajto5 (portb.bits.b0)
#define ajto6 (portb.bits.b1)

unsigned char RB2_sz;
unsigned char RB3_sz;
unsigned char RB4_sz;
unsigned char RB5_sz;
unsigned char RB6_sz;
unsigned char RB7_sz;

void main()
    {
  porta.Val = portb.Val + 128;
  portb.Val = porta.Val - 128;

        RB2_sz = RB3_sz = RB4_sz = RB5_sz = RB6_sz = RB7_sz = 0;
        TMR1H=0xD9;
        TMR1L=0xDB;
        T1CON=0x30; // T1CKPS = 1/8, T1OSCEN= off, T1SYNC = x, TMR1CS = Fosc/4, T1ON = off 
        T1CONbits.TMR1ON=1;
        PIE1bits.TMR1IE=1;

        ADCON1 = 0x0F;
        TRISB=0x03; //Port-B as Output
        TRISA=0x1F; //RA as input
        while (1)
        {

            if ((ajto1==1)||(ajto3==1)||(ajto4==1))
            {
                PORTBbits.RB3=1;
                RB3_sz = 10;
            }
/*            else
            {
                PORTBbits.RB3=0;
            }
*/
			if ((ajto2==1)||(ajto3==1)||(ajto5==1))
            {
               PORTBbits.RB5=1;
                RB5_sz = 20;
            }
/*            else
            {
               PORTBbits.RB5=0;
            }
*/     
			if ((ajto2==1)||(ajto4==1))
            {
               PORTBbits.RB4=1;
                RB4_sz = 30;
            }
/*            else
            {
               PORTBbits.RB4=0;
            }
*/
            if (ajto2==1)
            {
                PORTBbits.RB2=1;
                RB2_sz = 40;
            }
/*            else
            {
                PORTBbits.RB2=0;
            }
*/           
            if (ajto4==1)
            {
                PORTBbits.RB6=1;
                RB6_sz = 50;
            }
/*            else
            {
                PORTBbits.RB6=0;
            }
*/                 
            if (ajto6==1)
            {
                 PORTBbits.RB7=1;
                RB7_sz = 60;
            }
/*            else
            {
                 PORTBbits.RB7=0;
            }
*/
    if(PIR1bits.TMR1IF==1)
             {
               TMR1H=0xD9;
               TMR1L=0xDB;
               PIR1bits.TMR1IF=0;
     
                if (RB2_sz)
                {
                  if (--RB2_sz == 0)
                  {
                      PORTBbits.RB2=0;
                  }
                }
                if (RB3_sz)
                {
                  if (--RB3_sz == 0)
                  {
                      PORTBbits.RB3=0;
                  }
                }
                if (RB4_sz)
                {
                  if (--RB4_sz == 0)
                  {
                      PORTBbits.RB4=0;
                  }
                }
                if (RB5_sz)
                {
                  if (--RB5_sz == 0)
                  {
                      PORTBbits.RB5=0;
                  }
                }
                if (RB6_sz)
                {
                  if (--RB6_sz == 0)
                  {
                      PORTBbits.RB6=0;
                  }
                }
                if (RB7_sz)
                {
                  if (--RB7_sz == 0)
                  {
                      PORTBbits.RB7=0;
                  }
                }

              }
       }
    }