[an error occurred while processing this directive]
|
Вот такой пример:
Есть:
вход Х0
Выход Y0
Таймер 1 сек
Как сделать так, чтобы на выходе Y0 появился сигнал 1, задержанный относительно Х0 на 1 сек.
вводим переменную Z0,
Таймер Т0 запускается коротким импульсом = 1, который выдается в порт, например Х1. Результат счета читается в порте Т0.
Выберем состояние таймера:
Исходное = 1
счет = 0
конец счета = 1
По сбросу Z0=0.
После получения Х0=1 взведем Z0=1. и запомним, что мы получали Х0=1.
Z0=(Х0 & !Z0) | Z0 - это защелка, срабатывает по появлению 1 на Х0 ( переднему фронту )
Работает в ассемблере так:
сначала в акк кладется Х0
Потом добавляется по "И" инверсное Z0
Потом по "ИЛИ" добавляется Z0
Если, например, в формуле есть еще скобки, то сначала считаются они и их результат сбрасывается в еще одну Zi.
Y0 = T0 & Z0 - как только T0 станет в 1, эта единица будет передана в выходной порт Y0; но только при Z0=1, те это возможно после получения сигнала начала счета
Работает в ассемблере так:
сначала в акк кладется T0
Потом добавляется по "И" - Z0
результат из акк пересылается в порт Y0
программа бегает по кругу и подтверждает состояние переменных в каждом цикле.
Для таких контроллеров делается многоканальный блок таймеров, например 256 таймеров разной длятельности. И их результат счета разносится вот по таким ячейкам.
Там в статье я показал пример работы счетчика. Поэтому кванты от таймеров можно считать дальше программно.
E-mail: info@telesys.ru