С наступающим новым годом господа!
Решил сделать тахометр с управлением холостого хода двигателя , для моего коня. Но, чтото застрял на тахометре, кто нибудь пытался соорудить тахометр на 4тактный двигатель. Подскажите пожалуйста. Вот привожу то, что я нагородил. "по моему получилась какаято КЕЛЬНЯ"
$regfile = "m8def.dat" $crystal = 8000000 Config Portb = Output Config Portd = Output Config Portb.5 = Input Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising A Alias Portd.0 B Alias Portd.1 C Alias Portd.2 D Alias Portd.3 E Alias Portd.4 F Alias Portd.5 G Alias Portd.6 'Тут вписываем порты к которым подключены сегменты индикатора Dig1 Alias Portb.0 Dig2 Alias Portb.1 On Capture1 Captmr Enable Interrupts Enable Capture1 'Wtime = 100 Dim Wtime As Byte Dim Rpm As Single Dim Rpm2 As Integer Dim V As Byte , Z As Byte , Y As Byte , I As Byte , Chislo(8) As Long , Viv_peremennaya As Long , Temp_print As Long ' задаем переменные Config Timer0 = Timer , Prescale = 8 : On Timer0 Pulse : ' конфигурируем таймер 0 и назначаем подпрограмму которая выполняется при переполнении таймера Enable Interrupts : Enable Timer0 ' разрешаем прерывания и таймер 0 '.................... Do 'Pinb.5 = 1 Waitms Wtime Locate 1 , 1 Rpm = Capture1 * 0.008 Rpm = Rpm / 0.008 Rpm = 60 / Rpm Rpm2 = Rpm / 0.000008 Loop Pulse: Stop Timer0 Temp_print = Rpm2 For I = 1 To 4 ' цикл в котором разбивается переменная на отдельные числа от 0 до 9 Chislo(i) = Temp_print Mod 10 ' заносим в масив последнюю цифру от числа Temp_print(12345678 mod 10 = 8) Temp_print = Temp_print / 10 ' отсекаем последнюю цифру от числа Temp_print (12345678/10=1234567) Next ' останавливаем таймер 0 Set Dig1 : Set Dig2 Incr V : If V > 4 Then V = 1 ' выбираем какую цифру сейчас включать Y = 0 Gosub Look : A = Z ' переходим к подпрограмме Look, которая определяет нужно ли сейчас загорется сегменту А Gosub Look : B = Z Gosub Look : C = Z Gosub Look : D = Z Gosub Look : E = Z Gosub Look : F = Z Gosub Look : G = Z Select Case V ' включаем цифру которую выбрали (w). Подаем минус на общий провод конкретной цифры Case 1 : Reset Dig1 Case 2 : Reset Dig2 End Select Start Timer0 ' запускаем таймер0 Return ' возвращаемся к выполнению основной программы Look: ' подпрограмма которая определяет нужно ли сейчас гореть сегменту, который вызвал эту подпрограмму Z = Chislo(v) * 7 : Z = Y + Z ' определяем порядковый номер числа из таблици DATA. W - это цифра которую будем выводить 0..1..2..3.......9, Y это номер сегмента (A=0 B=1 C=2...G=7) Z = Lookup(z , Cifri) ' выбираем из таблици включить или выключить нужный сегмент Incr Y 'Y это номер сегмента (A=0 B=1 C=2...) Captmr: Timer1 = 0 Return 'возвращаемся на место откуда сюда прислали Cifri: Data 1 , 1 , 1 , 1 , 1 , 1 , 0 '0 Data 0 , 1 , 1 , 0 , 0 , 0 , 0 '1 Data 1 , 1 , 0 , 1 , 1 , 0 , 1 '2 Data 1 , 1 , 1 , 1 , 0 , 0 , 1 '3 Data 0 , 1 , 1 , 0 , 0 , 1 , 1 '4 Data 1 , 0 , 1 , 1 , 0 , 1 , 1 '5 Data 1 , 0 , 1 , 1 , 1 , 1 , 1 '6 Data 1 , 1 , 1 , 0 , 0 , 0 , 0 '7 Data 1 , 1 , 1 , 1 , 1 , 1 , 1 '8 Data 1 , 1 , 1 , 1 , 0 , 1 , 1 '9