I i i i i i i i i

Было обнаружено изменение фронта, сейчас для определенности синхронизируем бит 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