Hola.
Tengo la necesidad de que cuando se produzca una interrupción, el programa continúe en otro punto (utilizo css)
He probado con goto pero el compilador no me lo permite.
¿Cómo lo haríais?
Os dejo el programa y ¡Muchísimas Gracias!
Tengo la necesidad de que cuando se produzca una interrupción, el programa continúe en otro punto (utilizo css)
He probado con goto pero el compilador no me lo permite.
¿Cómo lo haríais?
Os dejo el programa y ¡Muchísimas Gracias!
Código:
#include <18F2620.h>
#fuses NOMCLR
#fuses HS
#fuses PUT
#fuses NOWDT
#use delay(CLOCK=25M)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
//Declaración de Variablea Globales
//unsigned int bandera;
unsigned long r;
//Declaración de Funciones
void RUN_PALABRA (int p)
{
output_high(PIN_A5); // OUTPUT ENABLE ALTO, SALIDA EN ALTA IMPEDANCIA
output_low(PIN_A0); // `PARALEL LOAD` BAJO NECESARIO PARA QUE EL DATO PASE DEL LATCH AL REGISTRO
output_low(PIN_A1); // ´SHIF Y STORAGE CLOCK INPUT´ BAJO PREPARANDO EL FLANCO DE SUBIDA PARA LLEVAR EL DATO A LA AL REGISTRO
output_c(p); // SE PONE EL DATO EN EL PUERTO B
output_high(PIN_A1); // ´SHIF Y STORAGE CLOCK INPUT´ FLANCO DE SUBIDA PARA LLEVAR EL DATO AL REGISTRO
output_high(PIN_A0); // `PARALEL LOAD` ALTO NECESARIO PARA QUE EL REGISTRO PUEDA AVANZAR, PONE EL EL PRIMER BIT A LA SALIDA
output_low(PIN_A2); // 595 ´STORAGE CLOCK INPUT´ BAJO
output_low(PIN_A3);
int f;
for (f=0; f<8; f++)
{
output_low(PIN_A2); // 595 ´STORAGE CLOCK INPUT´ BAJO
output_low(PIN_A3); // 595 ´SHIFT CLOCK INPUT´ BAJO
output_low(PIN_A1); // 165 `SHIF Y STORAGE CLOCK INPUT` BAJO
output_high(PIN_A2); // 595 ´STORAGE CLOCK INPUT´ ALTO PASA EL DATO AL REGISTRO Y LO DESPLAZA
output_high(PIN_A1); // 165 `SHIF Y STORAGE CLOCK INPUT` ALTO DESPLAZA
}
output_high(PIN_A3); // 595 ´SHIFT CLOCK INPUT´ ALTO PASA EL REGISTRO A LA SALIDA
}
void CLEAR (void)
{
output_high(PIN_A5); // OUTPUT ENABLE ALTO, SALIDA EN ALTA IMPEDANCIA
output_low(PIN_A0); // `PARALEL LOAD` BAJO NECESARIO PARA QUE EL DATO PASE DEL LATCH AL REGISTRO
output_low(PIN_A1); // ´SHIF Y STORAGE CLOCK INPUT´ BAJO PREPARANDO EL FLANCO DE SUBIDA PARA LLEVAR EL DATO A LA AL REGISTRO
output_c(0b00000000); // SE PONE EL DATO EN EL PUERTO B
output_high(PIN_A1); // ´SHIF Y STORAGE CLOCK INPUT´ FLANCO DE SUBIDA PARA LLEVAR EL DATO AL REGISTRO
output_high(PIN_A0); // `PARALEL LOAD` ALTO NECESARIO PARA QUE EL REGISTRO PUEDA AVANZAR, PONE EL EL PRIMER BIT A LA SALIDA
output_low(PIN_A2); // 595 ´STORAGE CLOCK INPUT´ BAJO
int i;
int e;
for (e=0; e<16; e++)
{
for ( i=0; i<8; i++)
{
output_low(PIN_A2); // 595 ´STORAGE CLOCK INPUT´ BAJO
output_low(PIN_A3); // 595 ´SHIFT CLOCK INPUT´ BAJO
output_low(PIN_A1); // 165 `SHIF Y STORAGE CLOCK INPUT` BAJO
output_a(0b00100011);
output_high(PIN_A2); // 595 ´STORAGE CLOCK INPUT´ ALTO PASA EL DATO AL REGISTRO Y LO DESPLAZA
output_high(PIN_A1); // 165 `SHIF Y STORAGE CLOCK INPUT` ALTO DESPLAZA
output_a(0b00100011);
}
}
output_high(PIN_A3); // 595 ´SHIFT CLOCK INPUT´ ALTO PASA EL REGISTRO A LA SALIDA
}
//Vectores de Interrupción
#INT_EXT
void interrupt_service_rutine_ext0(void)
{
r=get_timer1();
r=r/128;
set_timer1(0);
goto principio;
}
//Programa Principal
void main (void)
{
delay_ms(1000);
enable_interrupts(INT_EXT);
ext_int_edge(l_to_h);
enable_interrupts(global);
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 );
set_tris_b(0b00000001); // PUERTO B SALIDA CON B1, B2 Y B3 COMO ENTRADA PARA INTERRUPCIONES
set_tris_c(0b00000000); // PUERTO C SALIDA
set_tris_a(0b11000000); // PUERTO A SALIDA
CLEAR();
delay_ms(2000);
//escenas
principio:
while (true)
{
RUN_PALABRA (0b11111011); //1
RUN_PALABRA (0b11111111); //2
RUN_PALABRA (0b11110111); //3
RUN_PALABRA (0b11111111); //4
RUN_PALABRA (0b01111111); //5
RUN_PALABRA (0b11111111); //6
RUN_PALABRA (0b11111111); //7
RUN_PALABRA (0b11110010); //8
RUN_PALABRA (0b00111111); //9
RUN_PALABRA (0b11111111); //10
RUN_PALABRA (0b11111111); //11
RUN_PALABRA (0b00111111); //12
RUN_PALABRA (0b11111001); //13
RUN_PALABRA (0b11111111); //14
RUN_PALABRA (0b11110001); //15
RUN_PALABRA (0b11111110); //16
output_low(PIN_A5); delay_us(r);
RUN_PALABRA (0b11111011); //1
RUN_PALABRA (0b11111111); //2
RUN_PALABRA (0b11110111); //3
RUN_PALABRA (0b11111111); //4
RUN_PALABRA (0b01111111); //5
RUN_PALABRA (0b11111111); //6
RUN_PALABRA (0b11111111); //7
RUN_PALABRA (0b11110011); //8
RUN_PALABRA (0b00111111); //9
RUN_PALABRA (0b11111111); //10
RUN_PALABRA (0b11111111); //11
RUN_PALABRA (0b00111111); //12
RUN_PALABRA (0b11111001); //13
RUN_PALABRA (0b11111111); //14
RUN_PALABRA (0b11110001); //15
RUN_PALABRA (0b11111111); //16
output_low(PIN_A5); delay_us(r);
}
}
Última edición por un moderador: