Using interrupt, we have a subroutine that regularly called, automatically.
It called when overflow flag (OVF) is set.
As always, the timer/counter (TCNT0 register) counts up from zero toward 255, called an interrupt and rolls over back to zero and starts counts up again.
We could set the output at the interrupt subroutine so we eventually have nothing to do at the main program.
main:
rjmp main
If we enabled interrupts, the system looks an interrupt vector table at the bottom of memory, .org 000; composed of jumps to routines series.
OVF interrupt located at .org 0003
The first interrupt is, of course, power on or reset or initial condition, you named it…
We have to jump to it (using rjmp init) to set initial condition of our system when it connected to power source, or reset-ed. On this program we set pre-scaler to 1024, enabling OVF mode and of course enabling interrupts globally
The interrupt routine itself is only consist of toggle pinb,0 command
.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
sei ; enable interrupts globally
main:
rjmp main
timer:
sbi pinb,0 ; flip pin B0 bit
reti
No comments:
Post a Comment