гм.. написал сейчас прошивочку...
Код
.include "m8def.inc" ; Используем ATMega8
.org 0
RJMP RESET
.org ICP1addr
IN R18 , TCCR1B
SBRS R18 , ICES1 ; проверяем какой сигнал мы захватили
RJMP ICP_FALL
; приняли нарастающий фронт импульса
LDI R18 , 0 ; сбросим значение счетчика
OUT TCNT1H , R18
OUT TCNT1L , R18
; будем ждать спадающий фронт
LDI R18 , (1<<ICNC1)|(0<<ICES1)|(1<<CS11)
; | | +--- делитель счетчика 8
; | +--- ждем спадающий фронт импульса
; +--- входной фильтр захвата
OUT TCCR1B , R18
RETI
ICP_FALL: ; приняли спадающий фронт импульса
IN R18 , ICR1L
IN R17 , ICR1H
; будем ждать нарастающий фронт
LDI R18 , (1<<ICNC1)|(1<<ICES1)|(1<<CS11)
; | | +--- делитель счетчика 8
; | +--- ждем положительной фазы импульса
; +--- входной фильтр захвата
OUT TCCR1B , R18
RETI
RESET:
LDI R16 , low (RAMEND) ; инициализируем стек
OUT SPL , R16
LDI R16 , high(RAMEND)
OUT SPH , R16
LDI R16 , 0b00111100 ; порт С конфигурируем на выход
OUT DDRC , R16
LDI R16 , (1<<ICNC1)|(1<<ICES1)|(1<<CS11)
; | | +--- делитель счетчика 8
; | +--- ждем положительной фазы импульса
; +--- входной фильтр захвата
OUT TCCR1B , R16
LDI R16 , (1<<TICIE1) ; |(1<<TOIE1)
; +--- прерывание по переполнению таймера
; +--- прерывание по захвату ICP
OUT TIMSK , R16
SEI ; разрешение прерываний
MAIN_LOOP:
CPI R17 , 10 ;
BRCS INP1_SET ; переход на установку выхода со входа 1
; установка выхода со входа 2
IN R16 , PIND
LSL R16
OUT PORTC , R16
RJMP MAIN_LOOP
INP1_SET: ; установка выхода со входа 1
IN R16 , PINB
OUT PORTC , R16
RJMP MAIN_LOOP
и это все...
сейчас залью в контроллер и буду пробовать
кстати обнаружил ошибку в разводке - я светодиод подключил к выводу 22 - а это вход АЦП... и на выход работать он не может :-(