Hallo liebe Assembler-Gemeinde,
ich habe da ein Problem mit dem INT0 des Attiny13. Wenn ich folgendes Programm im Simulator durchlaufen lasse:
und ich einen Interrupt auslöse läuft das Prog ohne Probleme durch und setzt mir die Bits von Portb4. Löse ich dann noch einmal einen Interrupt aus läuft die Interrupt-Anweisung wieder durch und die Bits von Portb4 werden auch wieder gelöscht. Nur wenn jetzt die Interrupt-Anweisung wieder verlassen wird wird sofort wieder zum Interrupt-Handler gesprungen und wieder ein Interrupt ausgelöst, so dass die Bits wieder gesetzt werden. Kann mir das einer erklären?Code:.include "tn13def.inc" .def temp = r16 ;Reset- und Interruptvektoren ; .CSEG ;Assembliere in den Programm-Flash-Speicher .org $0000 ;beginne mit Adresse 0 ; ;Sprungvektoren fuer Reset und Interrupt ; rjmp main ;Reset vector rjmp intpc0 ;int0 interrupt vector reti; intpcint ;PCINT0 vector reti ;TC0 overflow vector reti ;Eeprom ready vector reti ;Anaog comperator int vector reti ;TC0 CompA vector reti ;TC0 CompB vector reti ;WDT vector reti ;ADC conversion complete vector ;Programmbeginn ;internen Prozessortakt durch 32 teilen ;Takt = 9,6MHz / 32 = 300kHz ldi temp,(1<<CLKPCE) out CLKPR,temp ldi temp, (1<<CLKPS2)|(1<<CLKPS0) out CLKPR,temp main: ; ; Stapelzeiger setzen fuer Rueckkehr-Adressen vom Interrupt ; ldi temp,LOW(RAMEND) ;Stapelzeiger am Ende vom SRAM out SPL,temp ldi temp,(1<<PB1) out DDRB,temp ldi temp,(0<<PB1)|(1<<PB4) out PORTB,temp ;LED ausschalten und internen Pull UP von PB4 ein ldi temp, 0b00000010 ; INT0 konfigurieren out MCUCR, temp ldi temp, 0b01000000 ; INT0 aktivieren out GIMSK, temp sei loop: nop rjmp loop ; eine leere Endlosschleife intpc0: sbis PORTB, 1 rjmp intpc1 cbi PORTB,1 reti intpc1: sbi PORTB, 1 reti
Mfg André







Zitieren

Lesezeichen