Необходимо получить на выходе прямоугольные импульсы с частотой 5 -75 Гц. Частота модуляции ~ 2 кГц.
Рациональный ли такой способ. Или возможно сделать это проще?

Код:
Dim Lowtrigger_flag As Bit , Higtrigger_flag As Bit , Freq_single As Single , Const_index As Word , Frequency As Byte , Period As Word

Config Timer0 = Timer , Prescale = 8 : On Timer0 Pulse
Enable Interrupts : Enable Timer0
Start Timer0

   Frequency = 5                                            ' задаем частоту на выходе генератора

Do

   If Pinc.2 = 0 Then
      Incr Frequency
      If Frequency > 75 Then Frequency = 75
      Do
      Loop Until Pinc.2 = 1
   End If
   If Pinc.3 = 0 Then
      Decr Frequency
      If Frequency < 5 Then Frequency = 5
      Do
      Loop Until Pinc.3 = 1
   End If




Loop


'*******************************************************************************
' Переполнение таймера0 каждые 256 мкс.
' Формируемая частота модуляции: fm = 3906,25 / 2 = 1953,125 Гц; период: Tm = 512 мкс
' f=50 Гц; Т = 20000 мкс.  Period = fm / f = 1953.125 / 50 = 39
' f=5Гц;   Т = 200000 мкс. Period = 390
' f=75Гц;  Т = 13333 мкс. Period = 26

Pulse:


   Toggle Lowtrigger_flag                                   ' создаем импульсы модуляции
   Incr Period                                                    ' и считаем их
   Freq_single = 1953.125 / Frequency                ' столько импульсов модуляции в периоде заданной частоты
   Freq_single = Freq_single / 6
   Const_index = Round(freq_single)

   If Period = Const_index Then
      Toggle Higtrigger_flag
      Period = 0
   End If

If Lowtrigger_flag = 1 And Higtrigger_flag = 1 Then Portd = &B111111 Else Portd = &B000000
Return