.include "m16def.inc" ;Include-File für ATMega16 ;######################## ;|Definitionen | ;######################## .def TEMP1 = R16 .def TEMP2 = R17 .def ASCII = R18 .def ZEILE = R19 .def TABLE = R20 .def COUNT = R21 .equ SHIFT_DDR = DDRB .equ SHIFT_PORT = PORTB .equ STcp = 2 .equ SHcp = 1 .equ Ds = 0 .equ A2 = 4 .equ A1 = 3 .equ A0 = 2 ;######################## ;|Sprungvektoren | ;######################## .org 0x00 ;Sprungvektor auf Hauptprogramm rjmp Main .org 0x16 rjmp Int_RXC ;Sprungvektor auf Interrupt (UART - Receive) ;######################## ;|Stack | ;######################## ldi TEMP1, LOW(RAMEND) ;Stack initialisieren out SPL, TEMP1 ;| ldi TEMP1, HIGH(RAMEND) ;| out SPH, TEMP1 ;| ;######################## ;|UART | ;######################## .equ SYSTAKT = 4000000 ;Systemtakt = 4MHz .equ BAUDRATE = 9600 ;Baudrate .equ UBRR_VAL = ((SYSTAKT+BAUDRATE*8)/(BAUDRATE*16)-1) ;Runden .equ BAUD_REAL = (SYSTAKT/(16*(UBRR_VAL+1))) ;Reale Baudrate .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUDRATE-1000) ;Fehler in Promille .if ((BAUD_ERROR>10)||(BAUD_ERROR<-10)) ;max. +/- 10 Promille Fehler .error "Fehler der Baudrate > 1 Prozent" ;sonst Fehlermeldung! .endif ldi TEMP1, HIGH(UBRR_VAL) ;Einstellen der Baudrate out UBRRH, TEMP1 ;| ldi TEMP1, LOW(UBRR_VAL) ;| out UBRRL, TEMP1 ;| ldi TEMP1, (1<