Цитата(Эдди @ Jun 5 2017, 18:52)

И непонятно, зачем что-то в ICR1 писать, который автоматом заполняется значением счетчика при наступлении внешнего события.
В этом режиме ICR1 используется в качестве регистра сравнения и автоматом в него извне ничего не заносится.
Код
;Проверка режима 8 таймера1
.INCLUDE "tn2313def.inc"
.equ Fo=20000000
.CSEG
.org 0x00
RESET:
SBI ACSR,ACD; Запрет работы компаратора
LDI R22,$FF ; Установка портов
OUT DDRD,R22
OUT DDRB,R22
OUT DDRA,R22
;************************************************
LDI XH,HIGH(100*Fo/1000000/2-1)
LDI XL,LOW(100*Fo/1000000/2-1)
OUT OCR1AH,XH
OUT OCR1AL,XL
LDI XH,HIGH((170+100)*Fo/1000000/2-1)
LDI XL,LOW((170+100)*Fo/1000000/2-1)
OUT ICR1H,XH
OUT ICR1L,XL
LDI R22,1<<SE
OUT MCUCR,R22
LDI R22,1<<COM1A1|1<<COM1A0
OUT TCCR1A,R22
LDI R22,1<<WGM13|1<<CS10
OUT TCCR1B,R22 ;T1 режим 8
;WAIT:
SLEEP
RJMP RESET
;************************************************
.EXIT
Этот код дает на выходе PB3/OC1A (на макете стоит ATtiny2313, кварц 20МГц) довольно строгие 100мкс -
0 и 170мкс -
1