Hallo, um festzustellen, ob mein ATmega644P serielle Daten korrekt empfängt, habe ich ein einfaches Bascom-Programm geschrieben, mit dem Port A auf das Bitmuster des empfangenen Integer-Dezimal-Wertes gesetzt wird. Beim jeweils ersten mal nach dem einschalten funktioniert das auch zuverlässig. Beim zweiten mal wird der Port aber auf 0 gesetzt, egal was ich schicke. Was mache ich falsch ? Gruß Tilmann _____________________________________ $regfile = "m644Pdef.dat" $crystal = 1000000 $baud = 300 Ddra = 0 Config Porta = Output Dim A As Byte Do 'Print " Gib Dezimalwert ein ! " Input A Porta = A Loop End ____________________________________
Ich habe keine Ahnung von Bascom. Allerdings vermisse ich in dem Programm ein paar Zeilen Code, die den seriellen Port ansprechen oder zumindest entsprechende Funktionen aus einer Library aktivieren.
Versuche das einmal: $regfile = "m644Pdef.dat" $crystal = 1000000 $baud = 300 Ddra = 0 Config Porta = Output Dim A As Byte Do 'Print " Gib Dezimalwert ein ! " If UCSRA.RXC=1 Then 'Wenn ein Byte vollständig empfangen wurde A=UDR 'Dann steht es im Regsiter UDR zur Verfügung Porta = A 'und wird nun ausgegeben end if Loop End Print "MfG Paul" ;-)
Hi Paul, danke, aber der Compiler schimpft fürchterlich über die Zeile "If Ucsra.rxc = 1 Then", weder ucsra noch rxc seinen dimensioniert, und überhaupt seien sie unvollständig ... Error : 93 Line: 17 Varable not dimensioned[0->0] Error : 31 Line: 17 Invalid data type [[0011]0[RCX]] Error : 93 Line: 17 Varable not dimensioned[0->0] Error : 31 Line: 17 Invalid data type [[0011]0[UCSRA]] ??? Müßte ich im Datenblatt schauen, wie das Eingangsregister heißt ? Gruß Tilmann
Tilmann schrob:
>Müßte ich im Datenblatt schauen, wie das Eingangsregister heißt ?
Ja, besser ist das. Das ist leider nicht einheitlich mit den Namen.
MfG Paul
Soweit ich sehe, müßte das Register hier UCSR0A heißen (sprich NULL a) UDR0 ist das Empfangsregsiter, wo die empfangenen Bytes drinsitzen. und das Bit heißt RXC0 Ich kann es im Moment hier nicht ausprobieren. MfG Paul
Hi Paul, tatsächlich ist der Compiler damit einverstanden: ___________________________________ Do 'Print " Gib Dezimalwert ein ! " If Ucsr0a.rxc0 = 1 Then 'Wenn ein Byte vollständig empfangen wurde A = Udr0 'Dann steht es im Regsiter UDR zur Verfügung Porta = A 'und wird nun ausgegeben End If Loop __________________________________ Allerdings lese ich immer eine 10 aus, egal was ich schicke ... Gruß Tilmann
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.