logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Złączenie dwóch programów [Bascom]

culkq 10 Lis 2010 21:32 1113 3
REKLAMA
  • #1 8727404
    culkq
    Poziom 11  
    Witam!
    Zabrałem się nie dawno za przepisywanie dwóch programów z książki Marcina Wiązani. Są to programy:
    Sterowanie z poziomu 1-wire dwoma termometrami,
    Zegarek na timer1.
    Mój problem polega na tym że nie wiem jak to złączyć w jedną całość tzn. chodzi o to żeby współpracowały ze sobą jak należy, ponieważ tylko ciągle wyświetla mi się zegarek na początku, a ja bym chciał zrobić aby zegarek był na początku, ale jak nacisnę dany przycisk to żeby się przełączał na termometr. Oczywiście próbowałem sam, ale się nic nie udało. Przepraszam, że nie ma za dużo komentarzy w programie.
    Program:



    $regfile = "m16def.dat"                                     'Ustawienie mikrokontrolera
     $sim
    $crystal = 8000000                                          'Ustawienie taktowania
    Config Lcd = 16 * 2                                         'Konfiguracja wyświetlacza LCD
    Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.4 , Rs = Porta.5       'Ustawienie wyjść do wyświetlacza
    Cls
    Lcd "Witam!"
    Wait 2
    Cls
    '-------------------------------------------------------------------------------'ustawienie guzików itp.
    
    Config Pina.6 = Input                                       'zegarek    1
    Config Pina.7 = Input                                       'zegarek  2
    Config Pinc.7 = Input                                       'temp. zewnętrzna
    Config Pinc.6 = Input                                       'temp. wewnętrzna
    Config Pinc.5 = Input                                       'wilgotnościomierz
    Config Pinc.4 = Input                                       ' przewidywanie pogody
    Config Pinc.3 = Input
    Config Pinc.2 = Input
    Config Timer1 = Timer , Prescale = 256
    
     If Pinc.3 = 1 Then
     Gosub Odcz_temp
     End If
    
    
    
    
    '-------------------------------------------------------------------------------'zegarek
    
    Declare Sub Wysw_czas
    On Timer1 Odmierz_1s
    
    Dim Sekundy As Byte
    Dim Minuty As Byte
    Dim Godziny As Byte
    Dim Nowa_w As Bit
    
    Dim Wart_bcd As Byte
    
    S1 Alias Pina.6
    S2 Alias Pina.7
    
    Enable Interrupts
    Enable Timer1
    
    Counter1 = 34286
    
    Set Nowa_w
    Set Porta.6
    Set Porta.7
    
    Do
    
    Call Wysw_czas
    
    If S1 = 0 Then
    Waitms 25
     End If
    If S1 = 0 Then
    
    Incr Minuty
    Sekundy = 0
       End If
    If Minuty = 60 Then
    Minuty = 0
    End If
    
    Set Nowa_w
    
    Call Wysw_czas
    
    Waitms 200
    
    
    
    If S2 = 0 Then
    Incr Godziny
       End If
    If Godziny = 24 Then
    Godziny = 0
    End If
    
    Set Nowa_w
    
    Call Wysw_czas
    
    Waitms 200
    Loop
    
    
    
    End
    
    Sub Wysw_czas :
    
    If Nowa_w = 1 Then
    Cls
    Wart_bcd = Makebcd(godziny)
    
    Lcd Bcd(wart_bcd) ; ":"
    
    Wart_bcd = Makebcd(minuty)
    
    Lcd Bcd(wart_bcd) ; ":"
    
    Wart_bcd = Makebcd(sekundy)
    
    Lcd Bcd(wart_bcd) ;
    
    Reset Nowa_w
    
    End If
    
    End Sub
    
    Odmierz_1s:
    
    Counter1 = Counter1 + 34286
    
    Incr Sekundy
    
    Set Nowa_w
    
    If Sekundy = 60 Then
    Sekundy = 0
    Incr Minuty
    If Minuty = 60 Then
    Minuty = 0
    Incr Godziny
    
    If Godziny = 24 Then
    Godziny = 0
    End If
    End If
    End If
    Return
    '-------------------------------------------------------------------------------'  termometr
    
    
    
    Config 1wire = Portc.3
    
    Declare Sub Odcz_temp(czujnik As Byte)
    Declare Sub Zapisz_id
    
    Dim Temperatura(2) As Byte
    Dim Id(8) As Byte
    
    Dim I As Byte
    Dim J As Byte
    Dim K As Byte
    Dim Liczba_ukl As Byte
    
    S3 Alias Pinc.7
    S4 Alias Pinc.6
    
    Deflcdchar 0 , 32 , 28 , 20 , 28 , 7 , 4 , 4 , 7            ' replace ? with number (0-7)
    
    Set Portc.7
    Set Portc.6
    
    Cls
    
    Liczba_ukl = 1wirecount()
    
    If S3 = 0 Then
    Lcd "liczba ukladow" ; Liczba_ukl
    
    If Liczba_ukl > 0 Then
    Id(1) = 1wsearchfirst()
    
    For I = 1 To 8
    Writeeeprom Id(i) , I
    
    Next I
    
    End If
    
    If Liczba_ukl > 1 Then
    
    Id(1) = 1wsearchnext()
    
    J = 0
    
    For I = 9 To 16
    
    Incr J
    Writeeeprom Id(j) , I
    
    Next I
    
    End If
    
    Lowerline
    Lcd "prog ok"
    End If
    
    Do
    
    Home
    
    For K = 1 To Liczba_ukl
    
    Call Odcz_temp(k)
    
    If Temperatura(2) = 0 Then
    
    Lcd "temp. zew." ; K ; ": " ; Temperatura(1) ; Chr(0) ; "C"
    Else
    Lcd "temp. zew." ; K ; ": -" ; Temperatura(1) ; Chr(0) ; "C"
    
    End If
    Lowerline
    Next K
    
    Loop
    End
    
    Sub Odcz_temp(czujnik As Byte)
    
    If Czujnik = 1 Then
    For I = 1 To 8
    Readeeprom Id(i) , I
    
    Next I
    End If
    
    If Czujnik = 2 Then
    J = 0
    
    For I = 9 To 16
    
    Incr J
    Readeeprom Id(j) , I
    
    Next I
    End If
    
    1wreset
    Call Zapisz_id
    
    1wwrite &H44
    Waitms 750
    1wreset
    
    Call Zapisz_id
    1wwrite &HBE
    
    Temperatura(1) = 1wread(2)
    
    1wreset
    If Err = 1 Then
    Cls
    Lcd "awaria"
    
    Do
    
    Loop
    
    End If
    
    If Temperatura(2) > 0 Then
    
    Temperatura(1) = 256 - Temperatura(1)
    End If
    Temperatura(1) = Temperatura(1) / 2
    
    End Sub
    
    Sub Zapisz_id
    
    1wwrite &H55
    
    For I = 1 To 8
    
    1wwrite Id(i)
    
    Next I
    End Sub
    



    inventco.eu - program proszę umieszczać w znacznikach CODE.
  • REKLAMA
  • #2 8727668
    landy13
    Poziom 31  
    Programy zazwyczaj składają się z:
    - konfiguracji portów i sprzętu
    - deklaracji zmiennych
    - funkcji i obsługi przerwań
    - programu głównego wraz z pętlą główną
    (W Bascomie funkcje i przerwania pisze się za programem głównym)


    Przepisanie dwóch programów jednego po drugim do niczego dobrego nie doprowadzi. Zwłaszcza jeśli żadnego z nich nie rozumiesz. Napisz jakiś prostszy, ale samodzielnie, bez książki. Jak zrozumiesz o co w tym chodzi, to będziesz umiał łączyć różne źródła.

    Jeśli masz inne zdanie na ten temat, to lepiej dotrzymaj obietnicy danej dwa miesiące temu - Link
  • REKLAMA
  • #3 8728133
    culkq
    Poziom 11  
    Oczywiście, że mam inne zdanie.
  • #4 8746097
    niemy
    Poziom 14  
    Witam

    Posłuchaj kolegi landy13 o strukturze programu. Nic się nie dzieje bo program w ogóle nie dociera do deklaracji czujników temperatury komendy end sub i return mu nie pozwalają. Można "sklejać" programy ale też z pomyślunkiem. Ponad to odczyt temperatury musi być ciągły a tylko wyświetlanie odbywa się wtedy kiedy chcesz a u Ciebie to trochę tak na "kupę" wszystko. Jedna zasada po kolei.
REKLAMA