Прочитал заново свой ответ, понял, что не все написал.
В меню пользователя отображается (по крайней мере должен отображаться) фактический цикл. А не заданный. Т.е. заданный цикл 20мс, отображается 6-16 мс.
Это значит (должно значить) только то, что программа вызывается каждые 20мс, но выполняется быстрее (за 6-16мс). Следующий вызов программы все равно будет через 20мс. Остальное время контроллер выполняет функции ввода/вывода, и другой сервис. Если все равно осталось время - "спим".
Переменная, инкрементируемая в программе, будет инкрементироваться точно раз в 20мс.
Правда почему в программе, где отсутствуют IF ELSE изменяется время выполнения - вопрос. Возможно не правильно разделены потоки программы и обмена по порту.