Saturday, May 30, 2015

Timer Time: Using Internal ATTiny13A Chip’s Timer, "OVF" Interrupt Mode (slightly modified)


We could speeding the timer by pre-loading TCNT0 with a value between 0 and 255, so TCNT0’ll start count at our own value instead of zero. 

We have to pre-load the TCNT0 at the init subroutine, and pre-load again after flag is set, so we write the command at the timer subroutine. 

So, our code now will look like this 

.include "../tn13Adef.inc"
.def a=r16
.org 0000
    rjmp init
.org 0003
    rjmp timer

init:
    sbi ddrb,0          ; pin b0 output
    ldi a,0b00000101    ; prescaler 1024
    out TCCR0B,a
    ldi a,0b00000010    ; enable OVF
    out TIMSK0,a
    ldi a, 64           ; preload TCNT0
    out TCNT0,a
    sei                 ; enable interrupts globally
    
main:
    rjmp main

timer:
    sbi pinb,0          ; flip pin B0 bit
    ldi a,64            ; preload again 
    out TCNT0,a
    reti