witam mam oto taki problem prubuje złożyć układ 3 kanałowy termometr min/max z zegarem ep2/2002 program ten jest napisamy na at89c4051 ale niestety się na niego niemieści prubowałem go przerobić ale niestety nic z tego niewyszło jedyna możliwość jaka mi przychodzi do głowy to usunięcie jednego kanału. Może ktoś z was by spróbował coś z tym zrobić.
dzięki za wszystkie pruby uporania się z tym problemem.
' 3-KANALOWY TERMOMETR z KTY10-6 Z TEMPERATURĄ MIN_MAX Z ZEGAREM **************************
' dla ELEKTRONIKI PRAKTYCZNEJ *************************************************************
$large
$crystal = 11059200
$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 - 824 '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ęProblem!!!
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
cze
piszę troche w BASCOM'ie ale takiej kombinacji nie widziałem jeszcze - działa ona??
sub .....
return
end sub
albo
Sub Mainprogram
do
loop
end sub
sub ....
do
loop
end sub
......
napisz może jeszcze raz ten program, ale pamiętaj że z każdej procedury musi procek wyjść do głównego programu inaczej stos ci się przepełni
a jak piszesz pętle DO - LOOP to pisz ją z warunkiem żeby się kiedyś mogła skończyć!!
piszę troche w BASCOM'ie ale takiej kombinacji nie widziałem jeszcze - działa ona??
sub .....
return
end sub
albo
Sub Mainprogram
do
loop
end sub
sub ....
do
loop
end sub
......
napisz może jeszcze raz ten program, ale pamiętaj że z każdej procedury musi procek wyjść do głównego programu inaczej stos ci się przepełni
a jak piszesz pętle DO - LOOP to pisz ją z warunkiem żeby się kiedyś mogła skończyć!!
Jeżeli masz "pełną" wersję Bascoma, to nie powinno być problemu.
Przed chwilką skompilowałem bez problemu ten program. Jeżeli chcesz prześlę Ci bina i hexa.
Ale najpierw sprawdź:
Kliknij z górnego menu Bascoma.
OPTIONS > COMPILER > MISC
Register File - 89C4051.DAT
Size warning - 2048
i najważniejsze Byte End (hex) - zwiększ na maxa aż do 7F
Musi zadziałać. Odpisz czy ruszyło.
Pozdrawiam.
Przed chwilką skompilowałem bez problemu ten program. Jeżeli chcesz prześlę Ci bina i hexa.
Ale najpierw sprawdź:
Kliknij z górnego menu Bascoma.
OPTIONS > COMPILER > MISC
Register File - 89C4051.DAT
Size warning - 2048
i najważniejsze Byte End (hex) - zwiększ na maxa aż do 7F
Musi zadziałać. Odpisz czy ruszyło.
Pozdrawiam.
"Size warning - 2048 "
4051 ma zdaje się pojemność 4 KB a nie 2KB
"i najważniejsze Byte End (hex) - zwiększ na maxa aż do 7F"
4051 ma 128 B RAM, a więc jak zwiększy na maxa, to stos będzie mu się zapisywał od bajtu 0, czyli w rejestrach R0-R7 w pierwszych 4 bankach, co spowoduje mu dość dziwne działanie programu, skompilowany program używa niektórych rejestrów a w szczególności R0 i R1.
"ja tego programu nie pisałem wziołem go z płyty EP"
hmm... dla mnie ten program jest zrobiony beznadziejnie. ale tyle wersji ilu programistów
4051 ma zdaje się pojemność 4 KB a nie 2KB
"i najważniejsze Byte End (hex) - zwiększ na maxa aż do 7F"
4051 ma 128 B RAM, a więc jak zwiększy na maxa, to stos będzie mu się zapisywał od bajtu 0, czyli w rejestrach R0-R7 w pierwszych 4 bankach, co spowoduje mu dość dziwne działanie programu, skompilowany program używa niektórych rejestrów a w szczególności R0 i R1.
"ja tego programu nie pisałem wziołem go z płyty EP"
hmm... dla mnie ten program jest zrobiony beznadziejnie. ale tyle wersji ilu programistów
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 11 gości