; ; Interrupt-Example-Timer0-ATmega1284P.asm ; Used in the MicroController course at Ioannina ; Physics department. ; Created: 04/11/2021 by Dr. Costas Foudas ; Author : foudas ; jmp INIT ; 2 word Vect RESET nop ; Ext Int 0 reti ; nop ; Ext Int 1 reti ; nop ; Ext Int 2 reti ; nop ; PCINT 0 - Pin Change reti ; nop ; PCINT 1 - Pin Change reti ; nop ; PCINT 2 - Pin Change reti ; nop ; PCINT 3 - Pin Change reti ; nop ; WDT - Watchdog Timeout reti ; nop ; Timer 2 Compare A reti ; nop ; Timer 2 Compare B reti ; nop ; Timer 2 Overflow reti ; nop ; Timer 1 Capture reti ; nop ; Timer 1 Compare A reti ; nop ; Timer 1 Compare B reti ; nop ; Timer 1 Overflow reti ; nop ; Timer 0 Compare A reti ; nop ; Timer 0 Compare B reti ; jmp T0_OF ; Timer 0 Overflow nop ; SPI Serial Transfer Complete reti ; nop ; USART0_RX Complete reti ; nop ; USART0 Data Register Empty reti ; nop ; USART0_TX complete reti ; nop ; Analog Comparator reti ; nop ; ADC Conversion complete reti ; nop ; EEPROM Ready reti ; nop ; Two Wire Interface reti ; nop ; Store Program Memory Ready reti ; nop ; USART1 Rx Complete reti ; nop ; USART1 Data Register Empty reti ; nop ; USART1 Tx Complete reti ; nop ; Timer/Counter 3 capture Event reti ; nop ; Timer/Counter 3 Compare A reti ; nop ; Timer/Counter 3 Compare B reti ; nop ; Timer/Couner 3 Overflow reti ; ; INIT: ; CLI ; Disable interrupts during initialization ; ; THE NEXT 4 LINES LOAD THE STACK POINTER WITH THE ADDRESS ; OF THE BOTTOM OF THE SRAM ; LDI R16, HIGH(RAMEND) OUT SPH, R16 LDI R16, LOW(RAMEND) OUT SPL, R16 ; ; MAKE PORTB AN OUTPUT PORT ; LDI R16, $FF OUT DDRB, R16 ; ; LDI R16, $00 out TCCR0A, R16 ; NORMAL OPERATION NO PWM LDI R16, $05 OUT TCCR0B, R16 ; NO PWM AND PRESCALE THE 32 KHZ CLOCK BY 1024 LDI R16, $01 STS TIMSK0, R16 ; ENABLE TIMER0/COUNTER0 OVERFLOW INTERRUPT ; ; Initializing counter registers.... ; LDI R18, $00 ; THIS HAS THE INCREMENTING NUMBERS TO BE SENT TO PORTB LDI R17, $00 ; THIS COUNTS THE NUMBER OF INTERRUPTS ; SEI ; ENABLE INTERRUPTS ; START: ; LOOP AROUND START FOR EVER nop ; do nothing nop ; do nothing RJMP START T0_OF: ; INTERRUPT SERVICE ROUTINE FOR TIMER/COUNTER 0 OVERFLOW ; CLI ; DISABLE INTERRUPTS IN R19, SREG ; STORE SREG CONTENTS ON R19 ; SO THAT YOU CAN RESTORE SREG AFTER ; THE INTERRUPT SERVICE ROUTINE HAS BEEN EXECUTED ; INC R17 ; COUNT INTERRUPTS CPI R17, $15 ; EVERY 21 INTERRUPTS SEND AN INCREMENTING NUMBER FROM ; R18 TO THE LEDS OF PORTB BRNE AGAIN CLR R17 ; OUT PORTB, R18 INC R18 AGAIN: OUT SREG,r19 ; RESTORE SREG SEI ; ENABLE INTERRUPTS AGAIN RETI ; GO BACK TO WHAT YOU WERE DOING AT ; THE TIME OF THE INTERRUPT