-
        

Ergebnis 1 bis 2 von 2

Thema: Software UART Interrupt löst immer zweimal aus

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.05.2006
    Alter
    40
    Beiträge
    87

    Software UART Interrupt löst immer zweimal aus

    Anzeige

    Hallo an alle,

    ich habe vor auf einem ATMega8 den HW UART sowie einen Software UART mit jeweils 9600 baud zu betreiben. Der ATMega läuft mit 16Mhz.
    Ich versuche gerade eine Routine zu schreiben welche mir einen Buffer für den Software UART zur Verfügung stellt, also im Moment noch Gehversuche.
    Ich habe aber folgendes Problem. Meine INT0 Routine wird immer, aber wirklich immer, zweimal aufgerufen.
    Ich finde den Fehler einfach nicht. Könnt ihr mal einen Blick drauf werfen? Bin auch offen für Verbesserungsvorschläge was meine Bufferroutine angeht.

    Danke

    Code:
    $regfile = "m8Adef.dat"                                     'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
    $framesize = 128                                            'Stackanweisungen, die eigentlich nur bei größeren Programmen
    $swstack = 128                                              'wirklich nötig werden
    $hwstack = 128
    $crystal = 16000000
    
    'HW UART
    Config Com1 = 9600 , Parity = None , Stopbits = 1 , Databits = 8
    
    'Software UART
    Open "comb.0:9600,8,n,1" For Output As #2
    Open "comd.2:9600,8,n,1" For Input As #3
    
    'Interrupt für Software UART konfigurieren
    Config Portd.2 = Input
    Set Portd.2
    
    On Int0 Irrint0
    Config Int0 = Falling
    Enable Int0
    
    'Interrupts aktivieren
    Enable Interrupts
    
    Dim Suartpos As Byte
    Suartpos = 1
    Dim Suartsize As Byte
    Suartsize = 50
    Dim Sbuffer(50) As Byte
    Dim Sbufferlastpos As Byte
    Sbufferlastpos = 1
    Dim Inchar As Byte
    
    Do
    'Hat sich der Software UART Buffer verändert?
    If Sbufferlastpos <> Suartpos Then
       Print Sbufferlastpos
       Incr Sbufferlastpos
       If Sbufferlastpos > 50 Then Sbufferlastpos = 1
       Print Sbuffer(sbufferlastpos)
    End If
    Loop
    
    'Interruptroutine für Software UART
    Irrint0:
       Disable Int0
       Inchar = Inkey(#3)
       Incr Suartpos
       If Suartpos > 50 Then Suartpos = 1
       Sbuffer(suartpos) = Inchar
       Enable Int0
       Return

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    07.05.2006
    Alter
    40
    Beiträge
    87
    Suchen im Forum hilft.
    Habs gerade gefunden. In diesem Thread : http://www.roboternetz.de/community/...ftware-uart%29 wurde das Problem schon gelöst.
    Danke

Ähnliche Themen

  1. Frage zu Software Uart mit TimerOverflow Interrupt
    Von fugitivus im Forum C - Programmierung (GCC u.a.)
    Antworten: 18
    Letzter Beitrag: 27.11.2011, 15:17
  2. Software Uart, Interrupt möglich?
    Von hunni im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 07.03.2011, 17:53
  3. Software Interrupt Atmega 128 löst nicht aus
    Von Fourstroker im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 15.06.2009, 12:26
  4. Interrupt bei Software UART?
    Von coCo im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 30.11.2006, 17:22
  5. Int0 = Falling wird immer 2x ausgelöst (software uart)
    Von -tomas- im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 24.02.2006, 20:41

Berechtigungen

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