.equ FCLK = 16000000 ;Fclk, Hz
.equ FOUT = 125 ;output frequency, kHz
.equ T1DIV = (((FCLK/FOUT)/200)+5)/10 ;CK/1
.if T1DIV > MAXWORD
.error "out of range constant"
.endif
;Init:
iDec: ldi temp,(1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1)
out TCCR1A,temp
ldi temp,(1<<WGM12) | (1<<CS10)
out TCCR1B,temp
ldi temp,byte2(T1DIV-1)
out OCR1AH,temp
ldi temp,byte1(T1DIV-1)
out OCR1AL,temp
in temp,TIMSK
ori temp,(1<<OCIE1A)
out TIFR,temp ;clear pending interrupts
out TIMSK,temp ;output compare interrupt enable
ret
;Timer interrupt:
FInt: push temp
Skip_if_Port_Out_P_0
rjmp Ph1
Ph0: ldi temp,(1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1)
out TCCR1A,temp
rjmp PhX
Ph1: ldi temp,(1<<COM1A1) | (1<<COM1B0) | (1<<COM1B1)
out TCCR1A,temp
PhX: pop temp
reti