1 | .include "2313def.inc"
|
2 |
|
3 | .def temp = R16
|
4 |
|
5 | ldi R16, RAMEND
|
6 | out SPL, R16 ; Stackpointer initialisieren
|
7 |
|
8 | sbi UCR,TXEN ; UART TX aktivieren
|
9 | ldi temp,25 ;4000000/(9600*16)-1 ; Baudrate 9600 einstellen
|
10 | out UBRR,temp
|
11 |
|
12 | start:
|
13 | ldi ZL, LOW(text*2) ; Adresse des Strings in den
|
14 | ldi ZH, HIGH(text*2) ; Z-Pointer laden
|
15 | rcall print ; Unterfunktion print aufrufen
|
16 |
|
17 | ldi R16, 10 ; die Bytes 10 und 13 senden
|
18 | rcall sendbyte ; (Zeilenumbruch im Terminal)
|
19 | ldi R16, 13
|
20 | rcall sendbyte
|
21 |
|
22 | rjmp start ; das Ganze wiederholen
|
23 |
|
24 |
|
25 | ; print: sendet die durch den Z-Pointer adressierte Zeichenkette
|
26 | print:
|
27 | lpm ; Erstes Byte des Strings nach R0 lesen
|
28 | tst R0 ; R0 auf 0 testen
|
29 | breq print_end ; wenn 0, dann zu print_end
|
30 | mov r16, r0 ; Inhalt von R0 nach R16 kopieren
|
31 | rcall sendbyte ; UART-Sendefunktion aufrufen
|
32 | adiw ZL, 1 ; Adresse des Z-Pointers um 1 erhöhen
|
33 | rjmp print ; wieder zum Anfang springen
|
34 | print_end:
|
35 | ret
|
36 |
|
37 | ; sendbyte: sendet das Byte aus R16 über das UART
|
38 | sendbyte:
|
39 | sbis USR, UDRE ; warten bis das UART bereit ist
|
40 | rjmp sendbyte
|
41 | out UDR, R16
|
42 | ret
|
43 |
|
44 | text:
|
45 | .db "AVR-Assembler ist ganz einfach",0 ; Stringkonstante, durch eine 0 abgeschlossen
|