Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Error 8

Kmieciu
-
-
Posty:49
Rejestracja:4 lut 2004, o 21:14
Lokalizacja:Kielce
Error 8

Postautor: Kmieciu » 11 cze 2004, o 15:00

Witam ma wielką prośbe do osób znających Bascoma czemu ten program nie działa. Przy prubie kompilacj wyskakuje Error 8 out of interial memory in file (32 linja)

' 3-KANALOWY TERMOMETR z KTY10-6 Z TEMPERATURĄ MIN_MAX Z ZEGAREM **************************
' dla ELEKTRONIKI PRAKTYCZNEJ *************************************************************



Baud = 9600
Config Lcd = 20 * 2
Cursor Off
Config Timer0 = Timer , Gate = Internal , Mode = 1
Config Sda = P3.5
Config Scl = P3.7

S1 Alias P3.3
S2 Alias P3.4
S3 Alias P1.1

Dim M As Byte
Dim H As Byte
Dim S As Byte
Dim Month As Byte
Dim Day As Byte
Dim H_max As Byte
Dim H_min As Byte
Dim M_max As Byte
Dim M_min As Byte
Dim W As Integer
Dim A As Single
Dim A_min As Single
Dim A_max As Single
Dim Result_1 As String * 5
Dim Result_2 As String * 5
Dim Result_3 As String * 5
Dim Result_1_min As String * 5
Dim Result_1_max As String * 5

Deflcdchar 0 , 236 , 242 , 242 , 236 , 224 , 224 , 224 , 224
Declare Sub Mainprogram
Declare Sub Dataprogram
Declare Sub Gettime
Declare Sub Incrday
Declare Sub Incrmonth
Declare Sub Incrhour
Declare Sub Incrminute
Declare Sub Min_max
Declare Sub Pomiar_other
Declare Sub Pomiar_1
Declare Sub Pomiar_2
Declare Sub Pomiar_3
Declare Sub Settime
Declare Sub Timeprogram


'//////////////////////////////////////////////

Cls
Lcd "OK"
Wait 2
'
Set P3.0 : Reset P3.1 : Reset P3.2

Call Pomiar_1
A_min = A
A_max = A
Result_1_min = Result_1
Result_1_max = Result_1

Call Gettime
H_max = H
H_min = H
M_max = M
M_min = M

'///////////////////////////////////////////////

Sub Mainprogram

Do

Call Gettime

Set P3.0 : Reset P3.1 : Reset P3.2
Call Pomiar_1

If A > A_max Then
A_max = A
Result_1_max = Result_1
H_max = H : M_max = M
End If
If A < A_min Then
A_min = A
Result_1_min = Result_1
H_min = H : M_min = M
End If

Reset P3.0 : Set P3.1 : Reset P3.2
Call Pomiar_2

Cls
Lcd "out " ; Result_1 ; Chr(0) ; "C"
Lowerline
Lcd "in " ; Result_2 ; Chr(0) ; "C"
Locate 1 , 15
Lcdhex Month ; "/" ; Day
Locate 2 , 13
Lcdhex H ; ":" ; M ; ":" ; S
Wait 1

If S1 = 0 Then
Call Dataprogram
End If

If S2 = 0 Then
Call Min_max
End If

If S3 = 0 Then
Call Pomiar_other
End If

Loop
End Sub

'////////////////////////////////////////

Sub Pomiar_other
Do

Call Gettime
Reset P3.0 : Reset P3.1 : Set P3.2
Call Pomiar_3

Cls
Lcd "baby room"
Locate 2 , 2
Lcd Result_3 ; Chr(0) ; "C"
Locate 1 , 15
Lcdhex Month ; "/" ; Day
Locate 2 , 13
Lcdhex H ; ":" ; M ; ":" ; S
Wait 1

If S3 = 0 Then
Cls
Lcd "Return"
Wait 1
Return
End If
Loop
End Sub

'////////////////////////////////////////

Sub Dataprogram

Month = Makedec(month)
Day = Makedec(day)

Cls
Lcd "SET DATE"
Lowerline
Lcd Month ; ":" ; Day
Wait 2

Do
If S1 = 0 Then
Call Incrmonth
End If
If S2 = 0 Then
Call Incrday
End If
If S3 = 0 Then
Call Timeprogram
Cls
Lcd "OK"
Wait 1
Return
End If
Loop
End Sub

'//////////////////////////////////////////


Sub Timeprogram
H = Makedec(h)
M = Makedec(m)

Cls
Lcd "SET TIME"
Lowerline
Lcd H ; ":" ; M
Wait 2

Do
If S1 = 0 Then
Call Incrhour
End If

If S2 = 0 Then
Call Incrminute
End If

If S3 = 0 Then
Call Settime
Waitms 20
Return
End If
Loop
End Sub

'////////////////////////////////////////////

Sub Incrhour

Incr H
If H > 23 Then
H = 0
End If
Cls
Lcd "SET TIME"
Lowerline
Lcd H ; ":" ; M
Waitms 160
Return
End Sub

'///////////////////////////////////////////

Sub Incrminute

Incr M
If M > 59 Then
M = 0
End If
Cls
Lcd "SET TIME"
Lowerline
Lcd H ; ":" ; M
Waitms 160
Return
End Sub

'///////////////////////////////////////////

Sub Incrmonth

Incr Month
If Month > 12 Then
Month = 1
End If
Cls
Lcd "SET DATE"
Lowerline
Lcd Month ; ":" ; Day
Waitms 160
Return
End Sub

'/////////////////////////////////////////

Sub Incrday

Incr Day
If Day > 31 Then
Day = 1
End If
Cls
Lcd "SET DATE"
Lowerline
Lcd Month ; ":" ; Day
Waitms 160
Return
End Sub

'//////////////////////////////////////////

Sub Gettime

I2cstart
I2cwbyte &HA0
I2cwbyte 2
I2cstart
I2cwbyte &HA1
I2crbyte S , Ack
I2crbyte M , Ack
I2crbyte H , Ack
I2crbyte Day , Ack
I2crbyte Month , Nack
I2cstop

Return
End Sub

'///////////////////////////////////////

Sub Settime
H = Makebcd(h)
M = Makebcd(m)
Month = Makebcd(month)
Day = Makebcd(day)
S = 0

I2cstart
I2cwbyte &HA0
I2cwbyte 00
I2cwbyte 8
I2cstop
I2cstart
I2cwbyte &HA0
I2cwbyte 2
I2cwbyte S
I2cwbyte M
I2cwbyte H
I2cwbyte Day
I2cwbyte Month
I2cstop

Return
End Sub

'////////////////////////////////////////

Sub Pomiar_1
W = Getrc(p1.0)
W = W - 822 'UWAGA DOBRAĆ
A = W / 6.50 'UWACA DOBRAĆ (6.50)
Result_1 = Fusing(a , ###.#)

Return
End Sub

'///////////////////////////////////////////

Sub Pomiar_2
W = Getrc(p1.0)
W = W - 826 'UWAGA DOBRAĆ
A = W / 6.62 'UWAGA DOBRAĆ (6.62)
Result_2 = Fusing(a , ###.#)

Return
End Sub

'/////////////////////////////////////////////

Sub Pomiar_3
W = Getrc(p1.0)
W = W - 828 'UWAGA DOBRAĆ
A = W / 6.41 'UWAGA DOBRAĆ (6.41)
Result_3 = Fusing(a , ###.#)
Return
End Sub

'//////////////////////////////////////////////

Sub Min_max

Do
Cls
Lcd "minOut " ; Result_1_min ; Chr(0) ; "C"
Lowerline
Lcd "maxOut " ; Result_1_max ; Chr(0) ; "C"
Locate 1 , 16
Lcdhex H_min ; ":" ; M_min
Locate 2 , 16
Lcdhex H_max ; ":" ; M_max
Waitms 250
Waitms 250

If S2 = 0 Then
Cls
Lcd "zachowano min_max"
Wait 1
Return
End If

If S3 = 0 Then
Cls
Lcd "skasowano min_max"
Wait 1
Call Gettime
Set P3.0 : Reset P3.1 : Reset P3.2
Call Pomiar_1
A_min = A
A_max = A
Result_1_min = Result_1
Result_1_max = Result_1
M_min = M : M_max = M : H_min = H : H_max = H

Return
End If
Loop
End Sub

'/////////////////////////////////////////////

Awatar użytkownika
Press
-
-
Posty:389
Rejestracja:10 mar 2004, o 16:21
Lokalizacja:Wrocław
Kontaktowanie:

Postautor: Press » 11 cze 2004, o 17:51

Nie wiem, w którym Bascomie to piszesz i dla jakiego proca. test kompilacji zrobiłem w Bascomie 8051 dla uP 89c4051.
Więc:
1: na samym początku programu dodaj dyrektywę $large - trzeba ją dodawać, jeśli po skompilowaniu jest więcej niż 2 kB (chodzi o sposób adresowania, nie potrafię tego dokładnie wyjaśnić)
2: wybierz z menu Options --> Compiler -->Misc i w okienku BYTE END (HEX) zamiast domyślnego 50 wpisz 69 (ciekawa liczba :>) lub więcej

U mnie komunikat końcowy przy takich ustawieniach to NO ERROR FOUND

Pozdro

Kmieciu
-
-
Posty:49
Rejestracja:4 lut 2004, o 21:14
Lokalizacja:Kielce

Postautor: Kmieciu » 11 cze 2004, o 19:36

wielkie dzięki udało mi się to skompilować dzięki tym ustawienią :D :D :D :D :D :D :D :D

Awatar użytkownika
ZbeeGin
-
-
Posty:170
Rejestracja:3 kwie 2003, o 10:10
Lokalizacja:Metropolia Katowice

Postautor: ZbeeGin » 13 cze 2004, o 14:49

1: na samym początku programu dodaj dyrektywę $large - trzeba ją dodawać, jeśli po skompilowaniu jest więcej niż 2 kB (chodzi o sposób adresowania, nie potrafię tego dokładnie wyjaśnić)
$LARGE powoduje że używane są rozkazy długich skoków (LJMP) a nie skoków na stronie (AJMP) które to właśnie mają ograniczenie zakresu skoku do jednej tzw. strony czyli 2KB.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 26 gości