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







Zitieren

Lesezeichen