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
'/////////////////////////////////////////////
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
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
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
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
$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.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ć)
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 26 gości