 
 Vad jag försöker uppnå är att tända en lysdiod ansluten till PB0 när frekvensen in på PB2 överstiger ca 5000 Hz och släcka den om frekvensen går ned.
Jag har simulerat programmet i AVRStudio och det verkar fungera som tänkt, men kommentarer och hjälp är mycket välkommet.
Kanske är det onödigt komplicerat att använda interupt eller något annat som jag totalt missat.....
Kod: Markera allt
.include "tn15def.inc" 
.def Counter = r17
.def Temp = r16
 
.org 0x0000 
rjmp Reset
//--- Interrupt Vector ------------------------------------------------- 
.org 0x0002
rjmp ExtInt
.org 0x0005
rjmp TimerInt
Reset: 
//--- Init -------------------------------------------------------------- 
   ldi    Counter, 0x00			; Nollställ räknaren
   ldi 	Temp, 0b00111011		; Sätt PB2 som ingåmg
   out	DDRB, Temp
   sbi	PORTB, 0				; Sätt PB0 till 1
   ldi    Temp,    0b00000011    ; Sätt att trigga på Stigande flank
   out    MCUCR,    Temp
   ldi    Temp,    0b01000000    ; Aktiverar extern interupt INT0
   out    GIMSK,    Temp
//-- Sätter timer och overflow till att ge interupt ca 24,4 gånger/sec vid CK 1,6 MHz
//-- 1600000/256/256 = 24,4
   
   ldi Temp, 0b00000100			; Sätt Timer0 prescaler till CK/256
   out TCCR0, Temp
   ldi Temp, 0x00				; Nollställ timer
   out TCNT0, Temp
   ldi Temp, 0b00000010					; Aktivera interupt på timer0 overflow
   out TIMSK, Temp
   sei
Loop:
	rjmp Loop
ExtInt:
	inc Counter
	reti
TimerInt:
	ldi Temp, 0xCD  ; 5000 Hz delat på 24,4 ger ca 205
	cp Counter, Temp
	brsh Light
	sbi PORTB, 0    ; Släck lysdiod
	ldi Counter, 0x00 ; Nollställ räknare
	reti
Light:
	cbi PORTB, 0    ;Tänd lysdiod
	ldi Counter, 0x00 ; Nollställ räknare
	reti
 
				



 
  
  
 
