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
|
|