Port setzen geht immer nur beim ersten mal

Gast #3007718
Lesenswert?

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
____________________________________
Gast #3007727
Lesenswert?

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.
#3007754
Lesenswert?

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"
;-)
Gast #3007838
Lesenswert?

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
Gast #3008907
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren