STK500Attiny2313Tutor.asm


1
.include "C:\Programme\Atmel\AVR Tools\AvrAssembler\Appnotes\2313def_manipuliert.inc"
2
3
;Register deffintion
4
5
.def zeichen = R17
6
7
;Baudrate berechnen
8
.equ F_CPU = 3686400                           ; Systemtakt in Hz
9
.equ BAUD  = 2400                             ; Baudrate
10
 
11
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
12
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))     ; Reale Baudrate
13
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille
14
 
15
.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille Fehler
16
  .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
17
.endif
18
19
20
;Stackpointer initialisieren
21
22
ldi     R16, LOW(RAMEND)
23
out     SPL, R16
24
25
;Prescaler auf Faktor 1 setzen
26
27
ldi R16,0b10000000
28
out CLKPR,R16
29
30
ldi R16,0
31
out CLKPR,R16
32
33
; Baudrate setzen
34
35
ldi R16,HIGH(UBRR_VAL)
36
out UBRRH,R16
37
ldi R16,LOW(UBRR_VAL)
38
out UBRRL,R16
39
40
;UART anschalten
41
42
43
ldi R16,(1<<TXEN)|(1<<RXEN)
44
out UCSRB,R16
45
;ldi R16, (1<<UMSEL)
46
;out UCSRC,R16
47
48
49
;Version1
50
;loop:
51
;rcall  sync
52
;ldi zl,LOW(String*2)
53
;ldi zh,HIGH(String*2)
54
55
;ser_string:
56
;lpm
57
;adiw  ZL:ZH,1
58
;mov    zeichen,R0
59
;cpi    zeichen,0
60
;breq  loop
61
;rcall  serout
62
;rjmp  ser_string
63
64
;Version 2
65
loop:
66
ldi    zeichen,'T'
67
rcall  serout
68
ldi    zeichen,'E'
69
rcall  serout
70
ldi    zeichen,'S'
71
rcall  serout
72
ldi    zeichen,'T'
73
rcall  serout
74
rcall  sync
75
rjmp  loop
76
77
serout:
78
      sbis    UCSRA,UDRE                  ; Warten bis UDR für das nächste Byte bereit ist
79
      rjmp    serout
80
    out     UDR, zeichen
81
serend: ret                                 ; zurück zum Hauptprogramm
82
 
83
; kleine Pause zum Synchronisieren des Empfängers, falls zwischenzeitlich
84
; das Kabel getrennt wurde
85
                                    
86
sync:
87
    ldi     r16,0
88
sync_1:
89
    ldi     r17,0
90
sync_loop:
91
    dec     r17
92
    brne    sync_loop
93
    dec     r16
94
    brne    sync_1  
95
    ret
96
97
String:  .db "Test!",0