mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART atmega128


Autor: Hans22 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Danny (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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....;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.