Departament de Microelectrònica i Sistemes Electrònics

AVR i FONAMENTS DE COMPUTADORS
Enginyeria en Informàtica (ETSE)

comptadors - exemple 2: generació d'un pols (interrupcions)

El rellotge intern del microcontrolador ATmega8 funciona a una freqüència d' 1MHz. Com en l'exemple 1, emprant el comptador 0 es generarà un pols de període 2 ms amb amplada de pols d' 1 ms en el PORTB.0. Ara, però, s'aprofiarà la interrupció per overflow per a generar el pols.

.INCLUDE "m8def.inc"
.DEF srri = R10
.DEF temp = R16
.ORG 0x0
    rjmp inici
.ORG 0x09
    rjmp int_cnt0OVF
    reti

inici: ldi temp,LOW(RAMEND)
    out SPL,temp
    ldi temp,HIGH(RAMEND)
    out SPH,temp
    sbi DDRB,0
    sbi PORTB,0
    ldi temp, (0<<CS02)|(1<<CS01)|(0<<CS00)
    out TCCR0, temp
    ldi temp, (1<<TOIE0)
    out TIMSK, temp
    sei

main: nop
    rjmp main

int_cnt0OVF: in srri, SREG
    ldi temp, 0x84
    out TCNT0, r16
    in temp, PINB
    com temp
    out PORTB, temp
    out SREG, srri
    reti

; registre guarda de registre status en interrupció
; registre temporal per inicialització i enviament dades

; rutina d'inici del programa

; rutina servei int'cnt0

; -------INICI PROGRAMA ---------------------------
; setup del stack



; posar PORTB0 com a sortida
; inicialitzar PORTB.0
; prescaler Timer0 a 8

; habilitació int'cnt0.Ovf

; activació general d'interrupcions
; -------PROGRAMA PRINCIPAL-------------------


; -------RUTINA DE SERVEI INT TIMER0-----------
: guarda registre de status
; el timer0, en iOVF, inicia una nova conversió ADC


; posar comptador a 256-125+1=132: 1MHz/8/125 -> 1KHz
; actualitzar sortida



WcN - AVR i Fonaments de computadors -> Comptadors -> Exemple 2