Program napisany w BASCOM AVR i wyskakujące 3 błędy , mogę wiedzieć dlaczego one wyskakują podczas kompilacji , poniżej zamieszczam kodzik.
'podwójny woltomierz i amperomierz (dwa kanały pomiaru napięcia i dwa kanały pomiaru prądu
'UWAGA _ PONOWNE WGRANIE PROGRAMU SKASUJE WARTOŚCI WSP KOREKCJI Z PAMIECI EPROM
'---------------------------------------------------------------------------------
$regfile = "m8def.dat" 'definicja procesora
$crystal = 1000000 'czestotliwosc pracy
'definicja portów wejściowych
Config Pind.7 = Input
Config Pinb.0 = Input
'podciąganie wejść do +
Portd.7 = 1
Portb.0 = 1
'definicja podłączenia LCD
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.6
Config Lcd = 16 * 2
'definicja i uruchomienie przewtornika AD
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
'deklaracja timera służącego do odczytu stanu ADC i jego przeliczenia
'Config Timer1 = Timer , Prescale = 64
'On Timer1 Timerek 'ustawienie procedury przerwania
'Enable Timer1 'włączenie timera
'Enable Interrupts 'włączenie przerwań
'Timer1 = 50285 '50285 było
'deklaracja procedur i zmiennych
Declare Sub Menu
Dim I As Word
Dim J As Word
Dim Ii As Word
Dim U1 As Word
Dim U2 As Word
Dim I1 As Word
Dim I2 As Word
Dim U1_suma(50) As Integer
Dim U2_suma(50) As Integer
Dim I1_suma(50) As Integer
Dim I2_suma(50) As Integer
Dim Temp As Integer
Dim Wu1 As Single
Dim Wu2 As Single
Dim Wi1 As Single
Dim Wi2 As Single
Dim Ewu1 As Eram Single
Dim Ewu2 As Eram Single
Dim Ewi1 As Eram Single
Dim Ewi2 As Eram Single
Dim Nap1 As Single
Dim Prad1 As Single
Dim Wart_nap1 As String * 5
Dim Wart_prad1 As String * 5
Dim Nap2 As Single
Dim Prad2 As Single
Dim Wart_nap2 As String * 5
Dim Wart_prad2 As String * 5
Dim Pomiar As Byte
Dim Pomiar_1 As Byte
Dim Pom As Byte
Dim W As Byte
Dim S As String * 4
'odczytanie z pamieci EEPROM mnożników
'Wu1, Wi1, Wu2, Wi2
Wu1 = Ewu1
Wu2 = Ewu2
Wi1 = Ewi1
Wi2 = Ewi2
'sprawdzenie czy eeprom nie jest pusty (wykonywane tylko przy pierwszym uruchomieniu układu
If Wu1 > 0 Then
Wu1 = Wu1
Else
Wu1 = 0.04848
End If
If Wu2 > 0 Then
Wu2 = Wu2
Else
Wu2 = 0.05026
End If
If Wi1 > 0 Then
Wi1 = Wi1
Else
Wi1 = 0.004882
End If
If Wi2 > 0 Then
Wi2 = Wi2
Else
Wi2 = 0.004882
End If
Cls
Cursor Noblink
Cursor Off
'wartości początkowe zmiennych
Pomiar = 0
Wart_nap1 = "0.00"
Wart_nap2 = "0.00"
Wart_prad1 = "0.00"
Wart_prad2 = "0.00"
'--------------------------------PROGRAM-------------------------
Do
Debounce Pind.7 , 0 , Menu , Sub
If Pomiar <> 0 Then
'Disable Timer1
Cls
Pomiar_1 = Pomiar - 1
Lcd Lookupstr(pomiar_1 , D_menu)
Pom = Pomiar
Do
Debounce Pind.7 , 0 , Menu , Sub
Select Case Pomiar
Case 1 :
Debounce Pinb.0 , 0 , Dodaj_u1 , Sub
Locate 2 , 1
Lcd Fusing(wu1 , "#.#####")
Case 2 :
Debounce Pinb.0 , 0 , Odejmij_u1 , Sub
Locate 2 , 1
Lcd Fusing(wu1 , "#.#####")
Case 3 :
Debounce Pinb.0 , 0 , Dodaj_u2 , Sub
Locate 2 , 1
Lcd Fusing(wu2 , "#.#####")
Case 4 :
Debounce Pinb.0 , 0 , Odejmij_u2 , Sub
Locate 2 , 1
Lcd Fusing(wu2 , "#.#####")
Case 5 :
Debounce Pinb.0 , 0 , Dodaj_i1 , Sub
Locate 2 , 1
Lcd Fusing(wi1 , "#.#####")
Case 6 :
Debounce Pinb.0 , 0 , Odejmij_i1 , Sub
Locate 2 , 1
Lcd Fusing(wi1 , "#.#####")
Case 7 :
Debounce Pinb.0 , 0 , Dodaj_i2 , Sub
Locate 2 , 1
Lcd Fusing(wi2 , "#.#####")
Case 8 :
Debounce Pinb.0 , 0 , Odejmij_i2 , Sub
Locate 2 , 1
Lcd Fusing(wi2 , "#.#####")
End Select
Locate 2 , 1
Loop Until Pom <> Pomiar
Cls
End If
'50 pomiarów i wybranie mediany dla 4 wejść przetwornika
For I = 1 To 50
U1_suma(i) = Getadc(0)
Next
For I = 1 To 50
Ii = I + 1
For J = Ii To 51
If U1_suma(i) > U1_suma(j) Then
Temp = U1_suma(j)
U1_suma(j) = U1_suma(i)
U1_suma(i) = Temp
End If
Next I
Next J
U1 = U1_suma(25)
Nap1 = Wu1 * U1
For I = 1 To 50
U2_suma(i) = Getadc(1)
Next
For I = 1 To 50
Ii = I + 1
For J = Ii To 51
If U2_suma(i) > U2_suma(j) Then
Temp = U2_suma(j)
U2_suma(j) = U2_suma(i)
U2_suma(i) = Temp
End If
Next I
Next J
U2 = U2_suma(25)
Nap2 = Wu2 * U2
For I = 1 To 50
I1_suma(i) = Getadc(2)
Next
For I = 1 To 50
Ii = I + 1
For J = Ii To 51
If I1_suma(i) > I1_suma(j) Then
Temp = I1_suma(j)
I1_suma(j) = I1_suma(i)
I1_suma(i) = Temp
End If
Next I
Next J
I1 = I1_suma(25)
If I1 = 1 Then I1 = 0 'korekta szumów wzmacniacza POPRAWIC! bo wychodzi minus 0
If I1 = 2 Then I1 = 0
Prad1 = Wi1 * I1
For I = 1 To 50
I2_suma(i) = Getadc(3)
Next
For I = 1 To 50
Ii = I + 1
For J = Ii To 51
If I2_suma(i) > I2_suma(j) Then
Temp = I2_suma(j)
I2_suma(j) = I2_suma(i)
I2_suma(i) = Temp
End If
Next I
Next J
I2 = I2_suma(25)
Prad2 = Wi2 * I2
Prad2 = 5 - Prad2 'odwrócenie wyświetlania
'przeliczenie wartości binarnej na napięcie rzeczywiste
'ograniczenie ilości wyświetlanych znaków (do dwóch po przecinku)
Wart_nap1 = Fusing(nap1 , "#.##")
Wart_prad1 = Fusing(prad1 , "#.##")
Wart_nap2 = Fusing(nap2 , "#.##")
Wart_prad2 = Fusing(prad2 , "#.##")
'wyswietlanie na LCD wartości mierzonych (poza menu)
If Pomiar = 0 Then
Locate 1 , 1
S = Format(wart_nap1 , " 0000")
Lcd S
Lcd " V "
Locate 2 , 2
Lcd Wart_prad1
Lcd " A "
Locate 1 , 10
S = Format(wart_nap2 , " 0000")
Lcd S
Lcd " V "
Locate 2 , 11
Lcd Wart_prad2
Lcd " A "
End If
Loop
End
'------------------------------------------------------------------------------
Dodaj_u1:
Wu1 = Wu1 + 0.00001
Locate 2 , 1
Lcd Fusing(wu1 , "#.#####")
Waitms 100
If Pinb.0 = 0 Then Goto Dodaj_u1
Return
Odejmij_u1:
Wu1 = Wu1 - 0.00001
Locate 2 , 1
Lcd Fusing(wu1 , "#.#####")
Waitms 100
If Pinb.0 = 0 Then Goto Odejmij_u1
Return
Dodaj_u2:
Wu2 = Wu2 + 0.00001
Locate 2 , 1
Lcd Fusing(wu2 , "#.#####")
Waitms 100
If Pinb.0 = 0 Then Goto Dodaj_u2
Return
Odejmij_u2:
Wu2 = Wu2 - 0.00001
Locate 2 , 1
Lcd Fusing(wu2 , "#.#####")
Waitms 100
If Pinb.0 = 0 Then Goto Odejmij_u2
Return
Dodaj_i1:
Wi1 = Wi1 + 0.00001
Locate 2 , 1
Lcd Fusing(wi1 , "#.#####")
Waitms 100
If Pinb.0 = 0 Then Goto Dodaj_i1
Return
Odejmij_i1:
Wi1 = Wi1 - 0.00001
Locate 2 , 1
Lcd Fusing(wi1 , "#.#####")
Waitms 100
If Pinb.0 = 0 Then Goto Odejmij_i1
Return
Dodaj_i2:
Wi2 = Wi2 + 0.00001
Locate 2 , 1
Lcd Fusing(wi2 , "#.#####")
Waitms 100
If Pinb.0 = 0 Then Goto Dodaj_i2
Return
Odejmij_i2:
Wi2 = Wi2 - 0.00001
Locate 2 , 1
Lcd Fusing(wi2 , "#.#####")
Waitms 100
If Pinb.0 = 0 Then Goto Odejmij_i2
Return
Sub Menu
If Pomiar = 0 Then
Waitms 1000
If Pind.7 = 0 Then
Incr Pomiar
End If
Else
Incr Pomiar
End If
If Pomiar = 9 Then
Pomiar = 0
Cls
Lcd " ZAPISYWANIE"
'zapisanie do pamieci
'Wu1, Wi1, Wu2, Wi2
Ewu1 = Wu1
Ewu2 = Wu2
Ewi1 = Wi1
Ewi2 = Wi2
Wait 1
End If
End Sub
D_menu:
Data "Korekta + wsp.U1" , "Korekta - wsp.U1" , "Korekta + wsp.U2" , "Korekta - wsp.U2" , "Korekta + wsp.I1" , "Korekta - wsp.I1" , "Korekta + wsp.I2" , "Korekta - wsp.I2"

