Hola a todos.
No tengo mucha practica con programación (CSS) y me gustaría que me ayudarais a enfocar un problema.
Tengo un programa hecho y quisiera que empezara a funcionar cuando se active una interrupción externa. Si tengo el programa en el Main ¿cómo lo hariais? he pensado en hacer una comprobación en el main de una variable que cambiaría durante la interrupción, pero css no me permite hacerlo porque las variables de la interrupción no las veo en el Main y viceversa. también he pensado hacer una llamada a una función con el programa desde la interrupción, pero tampoco me reconoce dicha función.
Muchas gracias de antebrazo.
Aquí os dejo el programa por si os apetece hacer alguna modificación.
No tengo mucha practica con programación (CSS) y me gustaría que me ayudarais a enfocar un problema.
Tengo un programa hecho y quisiera que empezara a funcionar cuando se active una interrupción externa. Si tengo el programa en el Main ¿cómo lo hariais? he pensado en hacer una comprobación en el main de una variable que cambiaría durante la interrupción, pero css no me permite hacerlo porque las variables de la interrupción no las veo en el Main y viceversa. también he pensado hacer una llamada a una función con el programa desde la interrupción, pero tampoco me reconoce dicha función.
Muchas gracias de antebrazo.
Aquí os dejo el programa por si os apetece hacer alguna modificación.
Código:
#include <18F2620.h>
#fuses NOMCLR
#fuses HS
#fuses PUT
#use delay(CLOCK=25M)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
void RUN_PALABRA (int p)
{
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_B4);
//output_high(PIN_A5); // OUTPUT ENABLE ALTO, SALIDA EN ALTA IMPEDANCIA
int i;
for (i=0; i<8; i++)
{
//delay_ms(1);
output_low(PIN_A2); // 595 ´STORAGE CLOCK INPUT´ BAJO
output_low(PIN_A3); // 595 ´SHIFT CLOCK INPUT´ BAJO
output_low(PIN_A1); // 597 `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); // 597 `SHIF Y STORAGE CLOCK INPUT` ALTO DESPLAZA
}
output_high(PIN_A3); // 595 ´SHIFT CLOCK INPUT´ ALTO PASA EL REGISTRO A LA SALIDA
}
#INT_EXT
void interrupt_service_rutine_ext0(void)
{
output_toggle(PIN_B3); //
}
void main (void)
{
delay_ms(1000);
enable_interrupts(INT_EXT);
ext_int_edge(l_to_h);
enable_interrupts(global);
set_tris_b(0b00000000); // 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
while (true)
{
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b01010101);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
RUN_PALABRA (0b00000000);
// output_low(PIN_A5); // OE VISUALIZAMOS QUE LA SALIDA DE LOS 595
// delay_ms(1000);
}
}
Última edición por un moderador: