Необходимо получить на выходе прямоугольные импульсы с частотой 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