.include "2333def.inc" ; Definitionen für Atmel AT 90S2333 .org 0x000 ; Programm kommt ganz an den Anfang des Speichers .def temp = r16 ; Register für Zwischenspeicherung ist R 16 rjmp Init ; Reset Handler reti ; IRQ0 Handler reti ; IRQ1 Handler reti ; Timer1 Capture Handler reti ; Timer1 compare Handler reti ; Timer1 Overflow Handler rjmp Timer ; Timer0 Overflow Handler reti ; SPI Transfer Complete Handler reti ; UART RX Complete Handler reti ; UDR Empty Handler reti ; UART TX Complete Handler reti ; ADC Conversion Complete Interrupt Handler reti ; EEPROM Ready Handler reti ; Analog Comparator Handler ;****************************************************************************** ;* * ;* Hauptprogramm * ;* * ;****************************************************************************** MAIN: nop ; dein Hauptprogramm rjmp MAIN ; im Hauptprogramm bleiben ;****************************************************************************** ;* * ;* Initialisierung * ;* * ;****************************************************************************** Init: ldi temp, RAMEND ;Stackpointer initialisieren out SPL, temp ldi temp, 0b11111111 out DDRB, temp ;Port B als Ausgang ldi temp, 0b00000000 out DDRC, temp ;Port C als Eingang ldi temp, 0b11111111 out DDRD, temp ;Port D als Ausgang ldi temp, 0b00000101 ;Timer 0 auf CK 1024 einstellen out TCCR0, temp ldi temp, 61 ;Timer 0 auf 195 einstellen (50ms bei 4MHz) out TCNT0, temp ldi temp, 0b00000010 ;Timer 0 Interrupt initialisieren out TIMSK, temp sei ;Interrupts allgemein aktivieren rjmp MAIN ; Start Hauptprogramm ;****************************************************************************** ;* * ;* Timer 0 * ;* * ;* im Register TCCR0 wird der Teilungsfaktor eingestellt * ;* hier Taktfrequenz durch 1024 * ;* ldi temp, 0b00000101 ;Timer 0 auf CK 1024 einstellen * ;* out TCCR0, temp * ;* * ;* * ;* im Register TCNT0 wird der Zeitwert ( 255 minus Registerinhalt) eingestellt* ;* ldi temp, 61 ;Timer 0 auf 195 einstellen (50ms bei 4MHz) * ;* out TCNT0, temp * ;* * ;* im Register TIMSK wird der Timerinterrupt freigegeben * ;* ldi temp, 0b00000010 ;Timer 0 Interrupt initialisieren * ;* out TIMSK, temp * ;* * ;****************************************************************************** Timer: ; Interrupt Routine 1 push temp ; R16 sichern (temp) ldi temp, 61 ; Timer 0 auf 195 einstellen (50ms bei 4MHz Takt) out TCNT0, temp ;****************************************************************************** ;Hier kommt das Timerprogramm hin ;****************************************************************************** lds temp,0x60 ; z.B. Ram 0x60 alle 50ms um 1 verringern dec temp sts 0x60,temp ;****************************************************************************** pop temp ; R16 (temp) zurück laden reti ; zurück