Код: Выделить всё
Enable oc2 ' разрешаем прерывание по совпадению
Код: Выделить всё
Enable Timer2 ' разрешаем прерывание по переполнению
Код: Выделить всё
Enable oc2 ' разрешаем прерывание по совпадению
Код: Выделить всё
Enable Timer2 ' разрешаем прерывание по переполнению
Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 32
$framesize = 48
$lib "lcd4.lbx"
''Ïåðåìåííûå
Const N = 250 '×èñëî âûáîðîê = 128
Dim New_sample As Word 'Äàííûå îò ÀÖÏ
Dim Samples As Byte 'Ñ÷åò÷èê âûáîðîê
Dim F As Byte
Dim Coeff(18) As Single
Dim Sine(18) As Single
Dim Cosine(18) As Single
Dim Q2(18) As Single
Dim Q1(18) As Single
Dim Q0(18) As Single
Dim Real As Single
Dim Imag As Single
Dim Magnitude(19) As Single 'Àìïëèòóäà ÷àñòîòû
Dim Ready As Bit 'Ñèãíàë îêîí÷àíèÿ ðàñ÷åòîâ
Dim I As Byte
Dim Aru As Single
Coeff(1) = 1.999769567 '13 Hz
Coeff(2) = 1.999750891 '16 Hz
Coeff(3) = 1.999697531 ' 24 Hz
Coeff(4) = 1.999615714 ' 35 Hz
Coeff(5) = 1.999460733 ' 53 Hz
Coeff(6) = 1.999190637 ' 79 Hz
Coeff(7) = 1.998683059 ' 118 Hz
Coeff(8) = 1.997662211 ' 178 Hz
Coeff(9) = 1.995612555 ' 267 Hz
Coeff(10) = 1.991358877 ' 400 Hz
Coeff(11) = 1.98228304 ' 600 Hz
Coeff(12) = 1.954536247 ' 1000 Hz
Coeff(13) = 1.919884674 ' 1350 Hz
Coeff(14) = 1.82657261 ' 2024 Hz
Coeff(15) = 1.624274597 ' 3036 Hz
Coeff(16) = 1.198548017 ' 4554 Hz
Coeff(17) = 1.367847804 ' 6830 Hz
Coeff(18) = -0.963507348 ' 10250 Hz
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.1 , Db7 = Portb.3 , E = Portb.2 , Rs = Portb.0
Config Lcdmode = Port
'Êîíôèãóðàöèÿ ÀÖÏ
Config Pinc.0 = Input 'Âõîä íà ADC(0)
Config Adc = Single , Prescaler = 64 , Reference = Avcc '×àñòîòà ÀÖÏ 125kHz
Start Adc
Config Timer2 = Timer , Prescale = 8 , Compare = Disconnect , Clear Timer = 1
Ocr2 = 32
On Oc2 Pulse
For F = 0 To 17
Sine(f + 1) = Lookup(f , Tab_sin)
Cosine(f + 1) = Lookup(f , Tab_cos)
Next F
Enable Oc2
Enable Interrupts
'=========================
'============= Ïðîãðàììà ===================
Cls
Do
'Âêëþ÷åíèå àëãîðèòìà
If Ready = 1 Then
Cls
Aru = Magnitude(12)
Lcd Aru
Lowerline
Aru = Magnitude(18)
Lcd Aru
For F = 1 To 18
Q0(f) = 0 'îáíóëÿåì Y1 è Y2 â íà÷àëå öèêëà
Q1(f) = 0
Q2(f) = 0
Next F
Ready = 0
Samples = 0
Enable Oc2
End If
Loop
'-------------------------------------------------------------------------------
Pulse:
New_sample = Getadc(0) 'Ïîëó÷àåì äàííûå ÀÖÏ
New_sample = New_sample * 5
New_sample = New_sample \ 1024
'Q0 = Coeff * Q1 - Q2 + Sample
'Q2 = Q1
'Q1 = Q0
For F = 1 To 18 'Ïðîñ÷èòûâàåì âñå ÷àñòîòû
Q0(f) = Q1(f) * Coeff(f)
Q0(f) = Q0(f) - Q2(f)
Q0(f) = Q0(f) + New_sample
Q2(f) = Q1(f)
Q1(f) = Q0(f)
Next F
Incr Samples 'ñ÷åò÷èê îáðàáîòàííûõ âûáîðîê
'Ôèíàëüíûé ðàñ÷åò ïîñëå ïîëó÷åíèÿ âñåõ 250 âûáîðîê
If Samples = N Then
Disable Oc2 'Îñòàíàâëèâàåì ñáîð âûáîðîê
For F = 1 To 18
'M = D1 * D1 + D2 * D2 - D1 * D2 * S
'real = (Q1 - Q2 * cosine)
'Imag =(q2 * Sine)
'Magnitude2 = Real2 + Imag2
Real = Q2(f) * Cosine(f)
Real = Q1(f) - real
Imag = Q2(f) * Sine(f)
Magnitude(f) = Real + Imag
Magnitude(f) = Sqr(magnitude(f))
Ready = 1
Next F
End If
Return
Tab_sin:
Data 0.015782706! , 0.015782706! , 0.01739098! , 0.019602283! , 0.023220566!
Data 0.028446425! , 0.036283712! , 0.048336552! , 0.066201454! , 0.092857179!
Data 0.132809969! , 0.21200711! , 0.280197626! , 0.407318211! , 0.583466373
Data 0.800543979! , 0.982940486! , 0.87630668!
Tab_cos:
Data 0.999884783! , 0.999875445! , 0999848765! , 0.999807857! , 0.999730366!
Data 0.999595319! , 0.999341529! , 0.998831106! , 0.997806278! , 0.995679439!
Data 0.99114152! , 0.977268124! , 0.959942337! , 0.913286305! , 0.812137299!
Data 0.599274008! , 0.183923902! , -0.481753674!
На том же сайте был совет попробовать поменять переменные состоящие из одной буквы на свои из трех...я еще не пробовалElektrik158 писал(а): когда щелкаю по первой ошибке открывается файл 3310end.bas на строчках:
'П
Pe:
Data &H7F , &H01 , &H01 , &H01 , &H7F
Pe1:
Data &H7C , &H04 , &H04 , &H04 , &H7C
подскажите куда копать,может надо что-то в самом баскоме предварительно настроить.
Код: Выделить всё
Dim a As Byte
Dim b As Byte
Dim c As Byte
Dim d As Byte
Dim f As Byte
Dim g As Byte
Dim h As Byte
Код: Выделить всё
dim a , b , c , d , f , g , h As Byte
Код: Выделить всё
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Код: Выделить всё
Dim Rank(10) as Byte
Код: Выделить всё
Dim A As Byte , B As Byte , C As Byte
Не в обиду немного подробнее опишу, сохраняете Ваш файл:edm2007 писал(а):Вам же нужно $include. Посмотрите в справке тогда, там все понятно расписано.
Увлекаться не стоит. Программа может не корректно работать, при этом при компиляции не выдавать ошибки. Я в теме уже описывал ситуацию, когда в "$include" сбрасывал флаг EIFR. При этом он не сбрасывался. Долго голову ломал, пока не перенёс в основной текст программы. Тогда всё стало нормально. Так-что кто его знает какие баги вылезут.vanyap1 писал(а):вот я про то же!!
есть например устройство, в котором есть термометр, термостат, секундомер, таймер, часы и еще куча всего... Так проще составить код по кусках и дать ссылки на них, нежели потом двигать взад вперед огромный код если что нибудь хочется поменять.