.include "tn261Adef.inc" ; RAM Organisation .DSEG .byte 0 ; 0 Byte reservieren ; EEPROM Organisation .ESEG .byte 0 ; 0 Byte reservieren ; Interrupt-Vektoren definieren .CSEG .org 0x0000 rjmp RESET .org OC0Aaddr rjmp TIMER ; INITALISIERUNG DES STACK ;----------------------------------------------------------------------------------------------------------------- RESET: ldi r16, LOW(RAMEND) out SPL, r16 ; RC-OSZILLATOR KALIBRIEREN (8 MHz) ;----------------------------------------------------------------------------------------------------------------- ldi r16, 0xE6 out OSCCAL, r16 ; PORTRICHTUNGEN DEFINIEREN ;----------------------------------------------------------------------------------------------------------------- ; Definiere Richtungen der Ports (und Pins) ldi r16, 0b00000001 ; Alle sind Eingang out DDRA, r16 ; Definiere Pullup-Widerstände ldi r16, 0b00000000 ; Keiner out PORTA, r16 ; Definiere Richtungen der Ports (und Pins) ldi r16, 0b10111111 ; Nur PB6 ist Eingang (PIR-Senor) out DDRB, r16 ; Definiere Pullup-Widerstände (keine) ldi r16, 0b00000000 ; Alle aus (PB6 besitzt einen ext. Pull-Up) out PORTB, r16 ; Definiere "abgeschaltete Eingangspuffer" ldi r16, 0b11110000 out DIDR0, r16 ; (für ADC3-6 abschalten) out DIDR0, r16 ; (für ADC7-10 abschalten) ; KONFIGURIERE TIMER/COUNTER0 (GENUTZT ALS STABILE ZEITQUELLE FÜR SOFTWAREAUFGABEN) ;----------------------------------------------------------------------------------------------------------------- ; TCNT0L TCNT0H - Timer/Counter0 Register LOW and HIGH Byte ldi r16, 0b00000000 out TCNT0H, r16 out TCNT0L, r16 ; TIMSK - Timer/Counter1 Interrupt Mask Register ldi r16, 0b00010000 ; Bit 4 - OCIE0A: Timer/Counter0 Output Compare Match A Interrupt Enable out TIMSK, r16 ; OCR0A - Timer/Counter0 Output Compare Register A ldi r16, 0x7A ; Wert für CTC-Match out OCR0A, r16 ; TCCR0A - Timer/Counter0 Control Register A ldi r16, 0b00000001 ; CTC Mode out TCCR0A, r16 ; TCCR0B - Timer/Counter0 Control Register B ldi r16, 0b00000100 ; Einschalten, Vorteiler = 256 out TCCR0B, r16 ; KONFIGURIERE TIMER/COUNTER1 (GENUTZT ALS 35kHz PWM TAKTQUELLE FÜR DEN LED STEP-UP WANDLER) ;----------------------------------------------------------------------------------------------------------------- ; TCNT1 Timer/Counter1 ldi r16, 0b00000000 ; Lösche den Zählerstand out TCNT1, r16 ; OCR1A - Timer/Counter1 Output Compare Register A ldi r16, 0b00001111 ; Setze Vergleichswert für CTC out OCR1A, r16 ; OCR1C - Timer/Counter1 Output Compare Register C ldi r16, 0b00111111 ; Setze Vergleichswert für CTC out OCR1C, r16 ;TCCR1A Timer/Counter1 Control Register A ldi r16, 0b01000010 ; CTC, OCR1A Enable out TCCR1A, r16 ;TCCR1C Timer/Counter1 Control Register C ldi r16, 0b00000000 out TCCR1C, r16 ;TCCR1D Timer/Counter1 Control Register D ldi r16, 0b00000001 ; Phase & Frequency Correct PWM out TCCR1D, r16 ;TCCR1B Timer/Counter1 Control Register B ldi r16, 0b00000001 ; ON, Prescaler = 1 out TCCR1B, r16 ; INTERRUPTE GLOBAL FREIGEBEN ;----------------------------------------------------------------------------------------------------------------- sei ; REGULÄRES PROGRAMM ;----------------------------------------------------------------------------------------------------------------- LOOP: rjmp LOOP TIMER: sbi PORTA, 0 ldi r16, 0xff AA: dec r16 brne AA cbi PORTA, 0 ldi r16, 0xff AAA: dec r16 brne AAA reti