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?
was für zeichen empfängt hyperterminäl? gleiche baudrate? gleiche stopbits? quarz oder rc-ossi? und, und, und...
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'
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?
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
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.
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?
@t rufus.. ldi r0 ist doch nicht zulässig! ldi nur bei registern con 16-31
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!!
"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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.