Он и будет их выдавать постоянно, если Вы взяли исходник 1 к 1. Там в main выдали 3 импульса - выдаем 4 чуть медленней, потом 5 и т.д. Это для проверки было сделано. И как пример использования.
Взводим флаг начала - начнется генерация и взведется флаг fl_work. Когда вывод кончится флаг fl_work сбросится.
Я же после этого взвожу стартовый флаг снова. И так в бесконечном цикле. Сделайте в main цикл таким:
Код:
|
while(1)
{
flags.fl_start = 1;
while(flags.fl_start){}; //ждем начала
// изменим период, это не повлияет на уже начатый вывод
PERIOD += 1;
IMP_COUNT += 1;
while(flags.fl_work){}; // ждем окончания вывода
_delay_ms(100);
// и повторим с новыми значениями периода и числа импульсов
} |
Будет пауза в 100 миллисекунд.
Можно вынести все это из цикла и разместить перед ним - будет выведено количество импульсов заданное в IMP_COUNT один раз. Когда понадобится вывести снова - установите период и количество импульсов и взведете флаг старта.
И вот что забыл - период желательно задавать четным. Это не контролируется, но при задании нечетного числа будет взято меньшее на 1. Т.е. импульс и пауза будет по 2 попугая при установке периода в 5. Не фатально, но учесть стоит.