logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMEGA162][C] Przerwania zewnetrzne

157 15 Maj 2009 22:19 1254 3
REKLAMA
  • #1 6534952
    157
    Poziom 10  
    Witam!
    Pisze bo juz nie mam pomyslu co to moze byc, zaznaczam ze przeczytalam wszystkie posty odnosnie problemow z przerwaniami w atmega162, jeden temat byl nawet podobny ale rozwiazanie tam zawarte nie bylo pomocne w moim przypadku. Ale do rzeczy:
    W ponizszym programie po wywolaniu przerwania INT0 wywoluje sie INT1.
    Symuluje program w komplitaorze AVRstudio, na razie nie potrafie poradzic sobie z fizycznym ukladem, programatorem ISP 6pinowym na LPT i programem WinAVR.
    
    
    SIGNAL (SIG_INTERRUPT0) 
    {
     //oryginalnie program tu cos robi, ale dla przejrzystosci wyrzuciałam  	 	
    }
    SIGNAL (SIG_INTERRUPT1) 
    {	
    }
    void czekaj(void)
    {
    }
    int main(void)          
    {
      	DDRB = 0x3f;              
      	PORTB= 0xff; 
    	DDRC= 0x00;
    	PINC= 0xff; //wejscia w stanie wysokim, nie jestem pewna czy PINC czy PORTC
    	GICR=1<<INT0; //włacz przerwanie zewnetrzne INT0
    	MCUCR=0x02;   //przerwania INT0 wyzwalane opadajacym zboczem
            sei();                 //włącz obsługę przerwań
    	while(1)
    	{
    		czekaj();		
    	}
    	return(0);
    }


    Dodam jeszcze, ze gdy skompilowalam ten program na procku atmega8 to wszystko dziala jak powinno. Caly dzien sie z tym mecze. Prosze o pomoc!
  • REKLAMA
  • #2 6535153
    michalko12
    Specjalista - Mikrokontrolery
    PINC jest tylko do odczytu
    Sprawdź co kryje sie pod INT0, jeśli 0 to zapis GICR=1<<INT0; jest OK
    jeśli 1 to powinno być tylko GICR=INT0;
  • REKLAMA
  • #3 6535465
    157
    Poziom 10  
    po wpisaniu tego GICR=1<<INT0, bit INT0 ustawia sie (na 1) czyli wg mnie powinno byc przeciez ok!
    Po wpisaniu tego bit INT0 jest 0 i wtedy zadne przerwanie nie jest wywolywane. Nie wiem wiec o co chodzi.
    Ale dzieki za zainteresowanie!

    A z tym PINC to w sumie nie wiem, poniewaz jak wpisuje PORTC=0xff to pozniej, dalej w programie chce sprawdzac czy PINC==0xfe czyli czy bit nr 0 portu C jest wcisniety (czyli czy jest ustawiony na mase) no i tego sie sprawdzic nie da poniewaz kazdy PINC jest wyzerowany, bo go wczesniej nie ustawialam.
    Wszystko oczywiscie to rozwazania teoretyczne poniewaz ciagle dzialam sobie na rejestrach w AVR Studio a nie na ukladzie fizycznym
  • #4 6535585
    michalko12
    Specjalista - Mikrokontrolery
    157 napisał:
    po wpisaniu tego GICR=1<<INT0, bit INT0 ustawia sie (na 1) czyli wg mnie powinno byc przeciez ok!
    Po wpisaniu tego bit INT0 jest 0 i wtedy zadne przerwanie nie jest wywolywane. Nie wiem wiec o co chodzi.
    Ale dzieki za zainteresowanie!


    Tu się nie dopatrzyłem, INT0 powinno mieć wartość 6 czyli GICR powinno mieć wartość 0x40;PINC jest tylko do odczytu stanu portu, podciąganie włączasz wpisując 1do odpowiedniego bitu do rejestru PORTx (PORTC)
    Kolejna sprawa to INTO i INT1 sa na porcie D
REKLAMA