Длительность импульса и период

Я совсем новичок в программировании контролеров. Прошу помощи у знающих людей. Нужно сформировать последовательность импульсов длительностью 1мс с периодом 20мс для управления сервоприводом. Вот программа:

  1. #include <avr/io.h>
  2. #include <avr/io.h>
  3. #include <util/delay.h>
  4.  
  5. int main(void)
  6. {
  7. DDRC = 0xFF;
  8. unsigned char i;
  9. while(1)
  10. {
  11. _delay_ms(1000);
  12. for (i=0;i<255;i++)
  13. {
  14. PORTC = 0b111111;
  15. _delay_ms(1);
  16. PORTC = 0b000000;
  17. _delay_ms(19);
  18. }
  19. }
  20. }

но почему с помощью задержек длительность импульса получается всегда больше?(по данному коду получается 5мс, даже если поставить ее 1мкс получаем 2мс). Подскажите в чем ошибка? Спасибо

Я бы не использовал бы для

Я бы не использовал бы для формирования задержек такой алгоритм. На много надежнее использовать таймеры.
Проверь кстати от чего у тебя тактируется микроконтроллер может дело именно в этом.