Forum: Mikrocontroller und Digitale Elektronik Zeichen aus SRAM senden


von Alex (Gast)


Lesenswert?

Hallo..
Ich habe ein Problem beim Senden von Zeichen über die Serielle
Schnittstelle. Im SRAM abgelegte Daten sollen geladen und gesendet
werden. Leider empfängt das Hyperterminal nicht die Zeichen die ich im
sram gespeichert habe..
Hier mal mein Beispiel Code.


ldi reg,LOW(RAMEND)
out SPL,reg
ldi reg,HIGH(RAMEND)
out SPH,reg
ldi reg,0xFF
out DDRD,reg
out DDRB,reg


;UART konfigurieren
ldi reg,11
out ubrr,reg      ;
GEÄNDERT WERDEN)
ldi reg, (1<<RXCIE)  | (1<<TXEN) | (1<<RXEN)
out ucr,reg


clr XH          ;4x das "A" im SRAM ablegen
ldi XL,0x20
ldi reg,'A'
mov r0,reg
st x+,r0
st x+,r0
st x+,r0
st x+,r0
rcall ext




;************* S E N D E - R O U T I N E N **************
serout:

sbis usr,udre   ;warten bis Puffer leer ist
rjmp serout
out udr,signs     ;Zeichen senden
ret






ext:
clr xh
ldi xl,0x20
ld r0,X+
mov signs,r0
rcall serout
ld r0,X+
mov signs,r0
rcall serout
ld r0,X+
mov signs,r0
rcall serout
ld r0,X+
mov signs,r0
rcall serout

loop:
rjmp loop


Was ist hier falsch?

von Alex (Gast)


Lesenswert?

los lasst mich nicht dumm sterben

von pripri (Gast)


Lesenswert?

was für zeichen empfängt hyperterminäl?
gleiche baudrate?
gleiche stopbits?
quarz oder rc-ossi?
und, und, und...

von Rufus T. Firefly (Gast)


Lesenswert?

Was geschieht, wenn Du in Deinem Code nicht die zu sendenden Daten aus
dem RAM holst, sondern einfach einen konstanten Wert verwendest? Kannst
Du dann Daten empfangen?

also in :ext anstelle von
  ld r0,X+

dies hier verwenden:
  ldi r0,'A'

von Alex (Gast)


Lesenswert?

ja also die schnittstelle ist richtig konfiguriert, wenn ich text-
strings usw. sende klappt auch alles bestens. muss man irgendwas
beachten wenn man die zeichen auf dem sram ablegt und später dann
wieder senden will?

von Rufus T. Firefly (Gast)


Lesenswert?

Funktioniert das auch, wenn Du Dein Programm exakt so änderst, wie von
mir beschrieben?

Also:

ext:
clr xh
ldi xl,0x20
ldi r0,'A'
mov signs,r0
rcall serout
ldi r0,'A'
mov signs,r0
rcall serout
ldi r0,'A'
mov signs,r0
rcall serout
ldi r0,'A'
mov signs,r0
rcall serout

von Alex (Gast)


Lesenswert?

ja wenn ich die zeichen mit ldi in ein register lade und dann sende ist
alles bestens...ich war dabei ein programm zu schreiben welches mein
siemens handy ausliest. die ausgelesenen daten habe ich dann im sram
gespeichert. als ich sie aber wieder ausgeben wollte und ich gemerkt
habe das da nur käse rauskommt bin ich ins grübeln gekommen...nun
versuche ich es erstmal ganz primitiv wie im oben dargestellten code
aber trotzdem klappt es nicht.

von Rufus T. Firefly (Gast)


Lesenswert?

Nachtrag:
Ist denn bei Deinem Controller das SRAM bei Adresse 0x20 bereits
beschreibbar? War da nicht was, daß die ersten 0x60 Bytes oder so von
irgendwelchen Peripherie- oder sonstigen Register belegt sind?

von Alex (Gast)


Lesenswert?

@t rufus..
ldi r0 ist doch nicht zulässig!

ldi nur bei registern con 16-31

von Alex (Gast)


Lesenswert?

Nachtrag:
Ist denn bei Deinem Controller das SRAM bei Adresse 0x20 bereits
beschreibbar? War da nicht was, daß die ersten 0x60 Bytes oder so von
irgendwelchen Peripherie- oder sonstigen Register belegt sind?



ich glaub da klickts bei mir...das könnte die lösung sein!!

von Marc Gauger (Gast)


Lesenswert?

"ldi XL,0x20"

Hi, bin zwar erst noch Anfänger, kann also auch sein dass ich total
daneben liege aber du tutst doch die Adresse 0x20 in den X-Pointer
laden, aber sind nicht alle Sram-Addressen bis 0x60 für I/o-Ports
Register usw Reserviert?

Mfg Marc Gauger

von Marc Gauger (Gast)


Lesenswert?

ok war zu spät aber hat wohl doch gestimmt.

von Alex (Gast)


Lesenswert?

ich werde sofort nachschauen...danke schonmal

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
Noch kein Account? Hier anmelden.