PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serieleranschluss komisch!



Robertino
02.10.2007, 20:09
Hallo zusammen,

ich habe einen AVR mit einen MAX3232 verbunden und kann dem nun Daten hin schicken und welche von ihm empfangen.
Der LPT-Port hängt ebenfalls an 2 Ports des AVRs.
Je nach beschalten und schicken der richtigen Buchstaben, soll er einen bestimmten Port schalten!

Nun zu meinem Problem:
Am anfang soll der Controller immer ein 'a' dem PC schicken, damit er weiß, das ein Controller an ihm hängt (hab ich im Programm halt so festgelegt!).
Natürlich soll der Controller danach ein "Carriage Return" hinterher senden.
Aber leider macht der das ganz am anfang nicht!
Gleichzeitig werden die beiden Ports des LPT's mit abgefragt!

Schicke ich ihm dann einen anderen Buchstaben oder schalte den LPT Port, springt er aus der Schleife raus....wenn der eingegebene Buchstabens "falsch" ist, springt er zurück in die Anfnagsschleife.
Ab jetzt sendet er aber das Carriage Return!
Mich würde mal interessieren warum das so ist!
Den Quelltext sende ich euch mit....ich hoffe ihr könnt mich aufklären und mir einen Ratschlag geben.


Vielen Dank
Roberto

gummi_ente
03.10.2007, 01:10
Hallo Robertino,

was mir aufgefallen ist, die serout Routine beendest Du mittels reti, d.h. Return from Interrupt.

Diese Routine ist aber keine Interrupt-Routine. Ersetze einmal das reti durch ret. Dies könnte das Verhalten erklären.



serout:
sbis USR,UDRE ; warten bis Sender frei ist
rjmp serout
out UDR, temp ; sende Daten

reti ; <- ret statt reti

Robertino
03.10.2007, 10:44
Hallo gummi_ente,

ich habe nun das reti durch das ret ersetzt, aber leider muss ich jetzt sagen, dass der garnichts mehr sendet....
Und wenn ich dann wieder mit dem LPT-Port dran gehen, danach schickt er wieder das 'a' ohne Carriage Return.

Hättest du noch eine andere Idee?!

Vielen Dank
Robertino

izaseba
03.10.2007, 10:58
Hallo,

an welcher Stelle in Deinem Programm wird der Stackpointer eingestellt ?

Gruß Sebastian

Robertino
03.10.2007, 11:13
hm... leider muss ich sagen das ich so ziemlich ein Neuling auf dem Gebiet bin
Was ist ein Stackpointer?

Ist das der RAM-Bereich?
ldi temp, LOW(RAMEND)
OUT SPL, temp

Hab einen AT90S2313....der hat doch keinen RAM, oder doch?!

Robertino
03.10.2007, 11:26
So, es ist vollbracht!

Vielen Dank mit dem Tip des RAM's!
Habs einfachmal gemacht und das Ding läuft nun.
Herzlichsten Dank für eure Hilfe!

izaseba
03.10.2007, 11:27
der hat doch keinen RAM, oder doch?!

laut http://www.avrfreaks.net/index.php?module=Freaks%20Devices&func=viewDev hat er 128 Byte SRAM

Gruß Sebastian

P.S. Aha! Gut, ich freue mich, daß es daran gelegen hat, und ich Helfen konnte ;-)

Rofo88
03.10.2007, 11:27
Du hast 128 Byte SRAM.

http://www.avr-asm-tutorial.net/avr_de/beginner/sram.html#Stack