¿Cómo escribo un programa para controlar el ángulo del servomotor con respecto al tiempo en PIC16F877A?

  nulo servoRotate0 () // 0 grados
 {
   unsigned int i;
   para (i = 0; i <50; i ++)
   {
     PORTB.F0 = 1;
     Delay_us (800);
     PORTB.F0 = 0;
     Delay_us (19200);
   }
 }

 nulo servoRotate90 () // 90 grados
 {
   unsigned int i;
   para (i = 0; i <50; i ++)
   {
     PORTB.F0 = 1;
     Delay_us (1500);
     PORTB.F0 = 0;
     Delay_us (18500);
   }
 }

 servoRotate180 vacío () // 180 grados
 {
   unsigned int i;
   para (i = 0; i <50; i ++)
   {
     PORTB.F0 = 1;
     Delay_us (2200);
     PORTB.F0 = 0;
     Delay_us (17800);
   }
 }

 vacío principal()
 {
   TRISB = 0;  // PORTB como puerto de salida
   hacer
   {
     servoRotate0 ();  // 0 grados
     Delay_ms (2000);
     servoRotate90 ();  //90 grados
     Delay_ms (2000);
     servoRotate180 ();  // 180 grados
   } mientras (1);
 }

El cable de control del servo está conectado a RB0 del microcontrolador PIC. Delay_ms () se usa para retrasar en milisegundos durante la ejecución del programa, mientras que Delay_us () se usa para retrasar en microsegundos durante la ejecución del programa.

No recuerdo el código, pero el algoritmo ya que los flujos 1 hacen un ciclo while y luego hacen que cualquier pin sea alto, luego se demoran y luego demoran lo suficiente el ciclo continúa. Conéctelo al servodriver hasta que este bucle funcione y el motor siga girando