Kod programu poniżej. Mam nadziej ze ktoś mi doradzi jak go poprawić problem jest miaowicie taki ze zmienna jest zliczana w przerwaniu i w zależności od zmienne jest uruchamiany odpowiedni „program”. Jak na początku programu zadeklaruję zmienna o jakiejś wartości to wchodzi w odpowiednia dla te wartości pętlę jeśli natomiast za pomocą przerwania zmienię tą zmienna to już nie uruchamia się odpowiedni podprogram zupełnie tak jak by przerwanie nie miało wpływu na zmienna, a w podglądzie widać ze się zmienia.
#include <avr\io.h>
#include <inttypes.h>
#include <avr\signal.h>
#include <avr\interrupt.h>
#include <avr\pgmspace.h>
#include <avr\delay.h>
// Definicje wyprowadzeń
#define LED_A 0
#define LED_B 2
#define int_0 1
#define LEDPORT PORTB
#define LEDDDR DDRB
//Deklaracje zmiennych
uint8_t g_prog = 0;
int main(void)
{
/////////////////////////////
// inicjacja
LEDDDR = 1<<LED_A | 1<<LED_B | 0<<int_0;
//ustawienie jednynki na wejsciu int0
LEDPORT = 1<<int_0;
//przerwanie zboczem lub stanem
// 0 1
MCUCR = 0<<0 | 1<<1;
//odblokowani wybur przerwania pcinto
GIMSK = 1<<6 | 0<<5;
//wybur zrudla pcint
//PCMSK = 1;
// Globalne zezwolenie na przerwania
sei();
// koniec inicjacji
/////////////////////////////
for(;;)
{
if(g_prog==0)
{
LEDPORT = 1<<LED_A | 0<<LED_B;
//_delay_loop_2(0xffff);
LEDPORT = 0<<LED_A | 1<<LED_B;
//_delay_loop_2(0xffff);
}
if(g_prog==1)
{
LEDPORT = 1<<LED_A | 1<<LED_B;
//_delay_loop_2(0xffff);
LEDPORT = 0<<LED_A | 0<<LED_B;
//_delay_loop_2(0xffff);
}
}
return 0;
}
//___________________________
//SIG_INTERRUPT0
//SIG_PIN_CHANGE0
SIGNAL(SIG_INTERRUPT0)
{
g_prog++;
_delay_loop_2(0xffff);
_delay_loop_2(0xffff);
_delay_loop_2(0xffff);
_delay_loop_2(0xffff);
if(g_prog>2)
g_prog = 0;
GIFR = 1<<6;
}