Zdroje a odkazy:
;
.org 0
rjmp reset
reset:
; Initialize SP to ramend
ldi temp,low(ramend)
out spl,temp
; Initialize baudrate for uart
ldi temp,baudconstant
out ubrr,temp
⋮
; command interpretation loop for frequency meter
loop:⋮
reset:
…
ldi temp,0b10000110 ; Enable input to 16 bit counter (Timer/Counter 1).
out tccr1b,temp
…
; Enable the watchdog
wdr ; must be
ldi temp,0b00001111 ; WDT enable
out wdtcr,temp ;+
sei ; Enable interrupts
rjmp Main ; Start execution of main loop.; Measure frequency for 1, 10 and 100 seconds.
measurefreq:
ldi temp,0 ; Clear 16 bit counter
out tcnt1h,temp
out tcnt1l,temp
clr ZL ; Clear ZL which is the overflow counter.
sbi PORTD,4 ; Pulse prescaler reset
cbi PORTD,4
ldi temp,0b10000000 ; Enable overflow interrupts from 16 bit timer.
out TIMSK,temp
cbi DDRD,3 ; Make gate pin high impedance
cbi PORTD,3 ; Gate signal into prescaler - turn off pullup
AnotherSecond:
rcall Delay1Second ; Delay 1 second.
dec iterations ; Measure more than 1 second if necessary
brne AnotherSecond
sbi DDRD,3 ; Make gate signal low Z.
sbi PORTD,3 ; Disable signal into prescaler.
clr temp ; Disable overflow interrupts.
out TIMSK,temp ;+ Note: using tccr1b to disable counter causes 1+.
ret
