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!!!

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

Postautor: Kmieciu » 31 sie 2004, o 19:47

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

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

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 31 sie 2004, o 21:14

Jedyna rada - przepisać program w asemblerze :-)

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

Postautor: Kmieciu » 31 sie 2004, o 21:39

tylko jest taka zasadnicza sprawa że asamblera nieznam udało mi się przerobić jedynie to żeby wynik temperatury niebył pokazywany z dokładnością do dziesiątek i wtedy się mieści ale to troche głupio czy macie jakieś pomysły jak to przerobić żeby działało??

GasM
-
-
Posty:92
Rejestracja:4 lut 2004, o 11:57

Postautor: GasM » 1 wrz 2004, o 07:57

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ć!!

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

Postautor: Kmieciu » 1 wrz 2004, o 14:23

ja tego programu nie pisałem wziołem go z płyty EP. Ale wielkie dzięki sprubuje zrobić tam troche pożądku może zwolni się troszke miejsca i zmieści się na procka.

Awatar użytkownika
almatea
-
-
Posty:240
Rejestracja:12 gru 2003, o 17:02
Lokalizacja:Brzeszcze
Kontaktowanie:

Postautor: almatea » 1 wrz 2004, o 22:45

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.

GasM
-
-
Posty:92
Rejestracja:4 lut 2004, o 11:57

Postautor: GasM » 2 wrz 2004, o 08:30

"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

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

Postautor: Kmieciu » 2 wrz 2004, o 08:33

dzięki masz racie ilu programistów tyle wersji programu
"i najważniejsze Byte End (hex) - zwiększ na maxa aż do 7F"
obecnie miałem tam ustawione 6F. jak będe na chacie to sprawdze czy ruszy na tych ustawieniach
wielkie dzięki.

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 19 gości