UART atmega128

Gast #108262
Lesenswert?
• ▲
▼
Hi,

habe ein anderes tutorial mal umgeschrieben, mmmh ging auch nicht :(


-------------------------------------------------------------


.include "m128def.inc"

.def temp = R16

        ldi R16, RAMEND
        out SPL, R16                      ; Stackpointer
initialisieren

        sbi UCSR0B,TXEN0                    ; UART TX aktivieren
        ldi temp,16000000/(19200*16)-1      ; Baudrate 19200
einstellen
        out UBRR0L,temp

start:
        ldi ZL, LOW(text*2)               ; Adresse des Strings in den
        ldi ZH, HIGH(text*2)              ; Z-Pointer laden
        rcall print                       ; Unterfunktion print
aufrufen

        ldi R16, 10                       ; die Bytes 10 und 13 senden
        rcall sendbyte                    ; (Zeilenumbruch im
Terminal)
        ldi R16, 13
        rcall sendbyte

        rjmp start                        ; das Ganze wiederholen


; print: sendet die durch den Z-Pointer adressierte Zeichenkette
print:
        lpm                               ; Erstes Byte des Strings
nach R0 lesen
        tst R0                            ; R0 auf 0 testen
        breq print_end                    ; wenn 0, dann zu print_end
        mov r16, r0                       ; Inhalt von R0 nach R16
kopieren
        rcall sendbyte                    ; UART-Sendefunktion
aufrufen
        adiw ZL, 1                        ; Adresse des Z-Pointers um
1
erhöhen
        rjmp print                        ; wieder zum Anfang springen
print_end:
        ret

; sendbyte: sendet das Byte aus R16 über das UART
sendbyte:
        sbis UCSR0A, UDRE0                  ; warten bis das UART
bereit ist
        rjmp sendbyte
        out UDR0, R16
        ret

text:
.db "AVR-Assembler ist ganz einfach",0    ; Stringkonstante, durch
eine 0 abgeschlossen
-------------------------------------------------------------



es müsste doch beim debuggen immer im i/o register UDR0 das Zeichen
drin stehen das auch an die rs-232 ausgegeben wird. Oder ?

mein atmega128 läuft auf 16MHz mit 19200baud 8,N,1 !
kann mir jemand sagen ob dies programm richtig geschrieben ist ?



mit
--> sts UDR0, R16
geht es auch nicht ?! im i/o register UDR0 sthet imm nur die 0 ? mmh
MfG Hans22
Gast #108263
Lesenswert?
• ▲
▼
Ich habe den 90s8535..... der Test im Anhang funktioniert bei mir.
gibt einen ADC-Wert aus. Kannst ja den ganzen ADC-, PWM-kram und die
Umrechnungen weglassen und nur das Senden des Textes drin lassen.
Sollte dann auch noch Funktioniere....;-)
Angehängte Dateien:

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.