Было обнаружено изменение фронта, сейчас для определенности синхронизируем бит synch таймера, опережение или отставание
____ Выборка 3
Опережение Отставание
Новый фронт бьш обнаружен, теперь необходимо
Библиотека Компэла
Ь IV. Примеры конкретных применений
синхронизировать встроенный программный генератор, работающий на частоте 12 00 бод, с внешним фронтом. Внутренние данные синхронизации содержатся в бите BIT2 регистра TPD и используются для определения опережения или отставания. Так как имеется дребезг входных синхроимпульсов, то мы не используем информацию о запаздывании или опережении для немедленного обновления. Вместо этого мы осуществляем «низкочастотную фильтрацию» результата для добавления или вычитания его из счетчика только после того, как его абсолютное значение превысит порог, который мы установили .
new_edge_detected
bit.b #CLOCK,global_status ;!!!!!!!!!
jz lagging leading:
add #l,bit_lead_lag
jmp update_bit_sync_timer lagging:
sub #l,bit_lead_lag
Формирование бита синхронизации 6/6800+5/6800+6/6800=3/1200
Это внутренний синхроимпульс, который должен определять скорость 1200 бод, но он имеет дребезг, так как формирование сигнала с частотой 12 00 Гц осуществляется путем деления сигнала с частотой 6 800 Гц. В регистр bit_sync_timer загружается 6, а потом 5, а потом 6 и т.д.
update_bit_sync_timer:
sub #l,bit_sync_timer
j z load new timer value ; если таймер
; достиг нуля, ; то загружается новое ; значение фронт синх-; роимпульса сбрасыва-; ется
cmp #3,bit_sync_timer ;
jnz done_bit_sync
bis.b #TPE~3,&TPD