
Сообщение от
SoftFelix
+Надо ещё знать алгоритм работы программы в Атмеге. Кварц-то мы заменили, внутренняя программа стала работать быстрее, а тайменги остались для 20МГц. В частности, удерживание нуля на выводах KDxx.
Тут всё нормально, "0"-и снимаются по окончании цикла чтения порта клавиатуры.
Код:
;********************************************************
; Прерывание INT0 по чтению порта клавиатуры _RDFE ~\_/~
; Длительность импульса = 720 нсек
; Порт D в режиме чтения, на входе Адрес сканирования
VINT0: ;6..7 -> 300-350 нсек
in YL,PIND ;1 - адрес сканирования
sbic PINC,KA10 ;1
sbr YL,1<<_RDFE ;1 - добавить бит KA10
ld scanFF,Y ;2 - скан-код из ScanBuf
out PORTB,scanFF ;1 - выдать в порт данных
;12..13 -> 600-650 нсек (20 МГц)
; -> 500-540 нсек (24 МГц)
wait_RD: ; Ждать отпускания _RDFE
sbis PIND,_RDFE ;1/2 _/~
rjmp wait_RD ;2
out PORTB,r_FF ;1 PORTB - все 1
;15..19 -> 750-950 нсек
reti ;4
;**********************************************************