- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 4 von 4

Thema: Mehrere Interrupt´s beim AT90S2313 verursachen Probleme

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.05.2005
    Ort
    Mannheim/Heidelberg
    Alter
    37
    Beiträge
    46

    Mehrere Interrupt´s beim AT90S2313 verursachen Probleme

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    habe da ein kleines Problem:
    Ich habe ein Programm für den ATmel AT90S2313 in Bascom geschrieben. In dem Programm werden sowohl Timer0 Interrupts als auch die externen Interrupts INT0 und INT1 benutzt. Das Problem ist nun, dass die externen Interrupts wunderbar funktionieren aber der Timer0 Interrupt nicht anspricht, sprich nicht ausgeführt wird. Deaktiviere ich die Interrupts INT0 und INT1, dann funktioniert der Timer0 Interrupt wie gewünscht. Aber alle zusammen klappen leider irgendwie nicht!

    Villeicht kann mir jemand von Euch einen Tipp geben? Villeicht stelle ich mich auch nur zu dumm an? Hier mal die entsprechenden Codeschnipsel:

    Code:
    $regfile = "2313def.dat"
    $crystal = 1000000
    
    Ddrb = &B11111111                                           'Ports Definieren alle Ausgang
    Ddrd = &B11110011                                           'PinD.2 und Pind.3 Eingang sonst Ausgang
    
    Portb = &B00000000                                          'Ausgänge Low setzen
    Portd = &B00000000
    
    Sreg.7 = 1                                                  'Interrupts Global freigeben
    
    Tccr0 = &B00000101                                          'Timer0 = Systemtakt / 1024
    Timsk = &B00000010                                          'Timer0 Overflow Interrupt einschalten
    
    Gimsk = &B11000000                                          'Interrupt INT0 und INT1 einschalten
    Mcucr = &B00000101                                          'Interrupt INT0 und INT1 bei fallender oder steigender Flanke
    
    
    On Timer0 Int_blinken                                       'Interrupt Routinen Deklarieren
    On Int0 Int_vorwaerts
    On Int1 Int_rueckwaerts
    
    
    Do                                                          'Hauptprogramm
    Loop
    
    
    Int_blinken:                                                'Timer0 Overflow Interrupt Routine
    Toggle Portb.0
    Return
    
    
    Int_vorwaerts:                                              'Interrupt0 Routine
    Toggle Portb.1
    Return
    
    
    Int_rueckwaerts:                                            'Interrupt1 Routine
    Toggle Portb.2
    Return

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.03.2004
    Beiträge
    185
    Hast Du den HWSTACK erhöht??
    An interrupt needs 32 bytes!!!!!!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    17.05.2005
    Ort
    Mannheim/Heidelberg
    Alter
    37
    Beiträge
    46
    Vielen Dank Thomas für deinen Tipp!
    Habe den HWStack vorsichtshalber mal auf 64 bytes erhöht und siehe da es funktioniert nun super!
    Danke noch mal, an so was habe ich als relativer neuling nicht gedacht...

    Lorenz

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.03.2004
    Beiträge
    185
    Nun ja, dass es mit 64Byte HWSTACK läuft hast Du nur der Tatsache zu verdanken, dass in den 3 ISR vor dem RETI kein SEI steht...
    Also immer schön aufpassen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen