Пн окт 28, 2019 12:06:26
Пн окт 28, 2019 12:10:32
Пн окт 28, 2019 22:33:24
тут бы, желательно осциллограмку заценить, она точнее чем рисунок.
Вт окт 29, 2019 06:27:24
Вт окт 29, 2019 07:50:26
Вт окт 29, 2019 09:39:44
Вт окт 29, 2019 09:40:11
Вт окт 29, 2019 09:47:07
Вт окт 29, 2019 09:52:28
Вт окт 29, 2019 10:08:01
Вт окт 29, 2019 20:47:58
Вт окт 29, 2019 21:49:31
Ср окт 30, 2019 11:23:49
Ср окт 30, 2019 12:33:05
Ср окт 30, 2019 12:42:00
Ср окт 30, 2019 13:46:36
Ср окт 30, 2019 16:36:46
Ср окт 30, 2019 18:47:33
Чт окт 31, 2019 09:20:40
;проба принять данные с клавиатуры
;A==0b000000000001
;B==0b000000000010
;C==0b000000000100
;D==0b000000001000
;E==0b000000010000
;F==0b000000100000
;
.INCLUDE "tn2313def.inc"
.equ Fo=8000000
.org $0
RJMP START
.org $06
OVER_T0:
OUT TCCR0A,R19
OUT TCCR0B,R17
OUT TIMSK,R18
OUT TIFR,ZL
RETI
.org $0D
COMP0_A:
CLC
SBIC PIND,4
SEC
ROR R20
ROR R21
ROR R22
BRCC KEY_OUT
OUT TCCR0B,ZH
SET ; регистры заполнились, значит опрос клавы завершен
KEY_OUT:
RETI
;
START:
CLI
LDI R16,LOW(RAMEND)
OUT SPL,R16
SER ZL
CLR ZH
SBI PORTD,4
LDI R20,0b10000000
CLR R21
CLR R22
OUT TCCR0A,R22 ; запретить режим CTC
LDI R18,1<<OCIE0A ;предустановка для прерывания 5мкс
; каждый раз после начала работы
LDI R19,1<<WGM01
LDI R16,1<<SE
OUT MCUCR,R16
LDI R16,(5*Fo/1000000-1)
OUT OCR0A,R16 ; интервал 5мкс
LDI R16,-1
OUT TCNT0,R16 ; предустановка для начала работы
LDI R16,1<<TOIE0 ; прерывание по переполнению
OUT TIMSK,R16
OUT TIFR,ZH
LDI R17,1<<CS02|1<<CS01|1<<CS00 ; +1 по фронту на PD4/T0
OUT TCCR0B,R17
LDI R17,1<<CS00 ; Fo/1
CLT
SEI
WAIT:
SLEEP
BRTC WAIT
; в R20, R21, R22 код нажатых клавиш,
; который нужно обработать
; каждый нечетный бит несёт информацию о состоянии клавиши
; R22,1 состояние клавиши A
; R22,3 состояние клавиши B
; R22,5 состояние клавиши C
; и т.д.
RJMP START
.EXIT
Вс ноя 03, 2019 16:52:48
Это в основной программе или в обработчике прерывания ?5. Прерывание INT0 пока отключаем. Перенастраиваем таймер и начинаем просто считывать по биту каждый заданный (одинаковый) интервал времени. У нас это должно попадать в серединки более длительных импульсов, пропуская 4мкс пики, если они будут.
использовать безусловный переход для выхода из прерывания ?4. В том же INT другая ситуация, если флаг был поднят (else if). Т.е. мы попали сюда при спаде. Смотрим таймер. Если он по длительности насчитал нам столько, что это похоже на "режим ожидания", то сбрасываем флаг и идем назад на шаг 2.