Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Тоже на скорую руку - именно устранение джиттера входа в прерывание, вплоть до нулевого. Ну если янигде не ошибся.

Отправлено ReAl 01 мая 2008 г. 17:34
В ответ на: Как сделать программную задержку на ATMega16 с дискретностью в один такт контроллера? отправлено tivocr 01 мая 2008 г. 13:22


// Добавка из-за длинных команд и других обработчиков,
// которая уже воспринимается как "авария"
#define MAX_JITTER


// Меньше этого быть не может (сумма тактов ухода на вектор, jmp оттуда
// и тактов обработчика до точки in ZL, TCNT0
#define MIN_DELAY


#define MAX_DELAY (MIN_DELAY+MAX_JITTER)


TIMER0_OVF_vect:
push ZL
in ZL, SREG
push ZL
push ZH
in ZL, TCNT0
cpi ZL, MAX_DELAY
brsh too_high_delay ; на ветвь обработчика ошибки (мало
; заказали MAX_JITTER)
clr ZH
subi ZL, low( - (pm(t0_jtable) - MIN_DELAY ) )
sbci ZH, high( - (pm(t0_jtable) - MIN_DELAY ) )
ijmp
t0_jtable:
.rept MAX_DELAY - MIN_DELAY
nop
.endr

; тут выровнялись и пошли работать

pop ZH
pop ZL
out SREG, ZL
pop ZL
reti


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

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

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 76:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru