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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.