#include <18f4620.h>
#use delay(clock=8000000)
#fuses HS,INTRC_IO,NOPUT,NOBROWNOUT,NOWDT,NOLPT1OSC,NOCPB,NOCPD
#fuses NOWRT,NOPBADEN,NOMCLR,NOSTVREN,NODEBUG,NOPROTECT,NOLVP
#use fast_io(B)
#use fast_io(D)
#byte PORTB = 0xF81
#byte PORTD = 0xF83
#bit SEL1 = 0xF81.0
#bit SEL2 = 0xF81.1
#bit SEL3 = 0xF81.2
#bit V_DER = 0xF81.3
#bit A_DER = 0xF81.4
#bit R_DER = 0xF81.5
#bit V_IZQ = 0xF83.5
#bit A_IZQ = 0xF83.6
#bit R_IZQ = 0xF83.7
boolean S01v,S01a,S01r,S02v,S02a,S02r,S03v,S03a,S03r,S04v,S04a,S04r; //variables que modifico y que posteriormente
boolean S05v,S05a,S05r,S06v,S06a,S06r,S07v,S07a,S07r,S08v,S08a,S08r; // iran a las entradas de los demultiplexoser
boolean S09v,S09a,S09r,S10v,S10a,S10r,S11v,S11a,S11r,S12v,S12a,S12r;
int con;
#int_Timer0
void IntTM0 ()
{
switch (con) {
case 0: SEL1 = 0; SEL2 = 0; SEL3 = 0; //selecciona el semaforo 1
V_DER = S01v; A_DER = S01a; R_DER = S01r; //pone en los puertos los valores que deben tener los leds
V_IZQ = S02v; A_IZQ = S02a; R_IZQ = S02r;
break;
case 1: SEL1 = 0; SEL2 = 0; SEL3 = 1; //selecciona el semaforo 2
V_DER = S03v; A_DER = S03a; R_DER = S03r;
V_IZQ = S04v; A_IZQ = S04a; R_IZQ = S04r;
break;
case 2: SEL1 = 0; SEL2 = 1; SEL3 = 0; //selecciona el semaforo 3
V_DER = S05v; A_DER = S05a; R_DER = S05r;
V_IZQ = S06v; A_IZQ = S06a; R_IZQ = S06r;
break;
case 3: SEL1 = 0; SEL2 = 1; SEL3 = 1; //selecciona el semaforo 4
V_DER = S07v; A_DER = S07a; R_DER = S07r;
V_IZQ = S08v; A_IZQ = S08a; R_IZQ = S08r;
break;
case 4: SEL1 = 1; SEL2 = 0; SEL3 = 0; //selecciona el semaforo 5
V_DER = S09v; A_DER = S09a; R_DER = S09r;
V_IZQ = S10v; A_IZQ = S10a; R_IZQ = S10r;
break;
case 5: SEL1 = 1; SEL2 = 0; SEL3 = 1; //selecciona el semaforo 6
V_DER = S11v; A_DER = S11a; R_DER = S11r;
V_IZQ = S12v; A_IZQ = S12a; R_IZQ = S12r;
break;
}
if (con==5){
con = 0;
} else {
con++;
}
set_timer0(216);
}
void main ()
{
set_tris_B(0b00000000); //puerto B como salida
set_tris_D(0b00000000); //puerto D como salida
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128|RTCC_8_BIT);
S01v = 1; S01a = 0; S01r = 0; //por ahora solo he inicializado los semaforos a un valor
S02v = 0; S02a = 0; S02r = 1;
S03v = 0; S03a = 0; S03r = 1;
S04v = 0; S04a = 0; S04r = 1;
S05v = 1; S05a = 0; S05r = 0;
S06v = 0; S06a = 0; S06r = 1;
S07v = 1; S07a = 0; S07r = 0;
S08v = 0; S08a = 0; S08r = 1;
S09v = 1; S09a = 0; S09r = 0;
S10v = 0; S10a = 0; S10r = 1;
S11v = 1; S11a = 0; S11r = 0;
S12v = 0; S12a = 0; S12r = 1;
con = 1;
set_timer0(216);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
for(;;) { }
}