Skocz do zawartości

Przełączanie diody LED problem


m471

Pomocna odpowiedź

Witam, napisałem prosty program na atmege88pa i nie działa on poprawnie. Od kilku godzin nie mogę znaleść błędu, kompilowałem na eclipse oraz atmel studio i próbowałem kod na dwóch procesorach, dioda cały czas świeci, załączam kod i z góry dziękuję za pomoc.

#include <avr/io.h>
#include <avr/interrupt.h>

volatile int z = 0;


void LED()
{
	int l = z;

	while(l==z){PORTD|=1;}

}

void LED2()
{
	int l = z;

	while(l==z){PORTD=0;}

}

ISR(PCINT0_vect)
{
	uint8_t pin = PINB;

	if((pin ^ 0x1F))
	{
		z^=1;

	}
}



int main()
{
	DDRB=0;
	PORTB|=0x1F;
	DDRD |= 2;
	PORTD = 0;
	PCICR|= _BV(PCIE0);
	PCMSK0 |= ( _BV(PCINT0) | _BV(PCINT1) | _BV(PCINT2) | _BV(PCINT3) | _BV(PCINT4) );

	while(1)
	{
		LED();
		LED2();
	}
}

 

Link do komentarza
Share on other sites

Żeby się dowiedzieć, w czym jest problem musisz rozbić sprawdzanie na etapy:

1. Sprawdź, czy funkcja LED() zapala diodę.

2. Sprawdź, czy funkcja LED2() gasi diodę.

3. Sprawdź, czy przerwanie się wywołuje i robi to co chcesz.

Jak każda część działa poprawnie, program w całości też raczej będzie działać. Zakładam, że nie masz do AVRa debuggera i musisz po prostu wykomentowywać części kodu, kompilować i sprawdzać świeceniem leda. Jak chcesz się nauczyć programować to musisz się hartować od początku 😄 Zawsze na początku coś nie działa i im szybciej się nauczyć drążyć temat, tym lepiej.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.