для того чтоб получить 500Гц при абстрактном значении цикла программы в 1 мс, не нужны ни какие генераторы, достаточно инвертировать булеву переменную в каждом скане
а в случаях когда время срабатывания таймера равно этому циклу, то выход обработается уже в следующем, поэтому совершенно нормально что часть импульсов пропадает





