Forum: Mikrocontroller und Digitale Elektronik UART atmega128


von Hans22 (Gast)


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

von Danny (Gast)


Angehängte Dateien:

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....;-)

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.