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