[an error occurred while processing this directive]
А я тоже так, но еще и без прерываний :)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено =AVR= 15 ноября 2006 г. 18:10
В ответ на: +1. Я делаю ТОЛЬКО так. отправлено AZ 15 ноября 2006 г. 16:55


; Таймер TCNT1 у меня молотит от 16000/64 КГЦ,
; то есть на входе TCNT1H у меня период 1.024 мс -
; вполне достаточно точности в 2%
ldi tmp1,250 ; Вызов задержки на 250 мс
rcall delay_ms ;
...
...

; Собственно подпрограмма задержки на 2..255 мс
delay_ms:
in tmp2,TCNT1L ; Фиктивное конвейерное чтение младшего байта
in tmp2,TCNT1H ; Реальное чтение старшего байта
add tmp1,tmp2 ; TMP1 = delay+TCNT1H, переполнение не страшно
delm_lp:
in tmp2,TCNT1L ; Фиктивное конвейерное чтение младшего байта
in tmp2,TCNT1H ; Реальное чтение старшего байта
cpse tmp1,tmp2 ; Висим в цикле, пока TCNT1H не доедет до TMP1
rjmp delm_lp ;
ret ; Готово, выходим

Ну, а по-хорошему надо флажок ставить при помощи OCR1x - тогда МК вместо непроизводительного висения в цикле может просто изредка проверять этот флажок, и спокойно заниматься другими делами, пока флажок не взведется таймером по Compare

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание