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

RC5 temperatura problem z etykieta w bascomie pomocy

superb-s1 23 Mar 2008 22:48 1868 5
REKLAMA
  • #1 4946382
    superb-s1
    Poziom 11  
    Posty: 11
    witam wszystkich jestem początkujący w programowaniu uC i dla tego mam mały problem a mianowicie chciałbym aby na wyświetlaczy pokazywała mi sie temperatura a przy okazji można był sterować różnymi urządzeniami za pomocą pilota RC5
    podczas kompilacji w bascom-avr wersja demo program wywala mi błąd

    error: 61 line: 176 label not found [_printsdecw]
    i nie bardzo wiem jak sobie z nim poradzić a oto program bascom

    
    $regfile = "m8def.dat"
    $crystal = 1000000
    $lib "mcsbyte.lbx"
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Config Pind.2 = Input
    Config Rc5 = Pind.2
    Config Portc.0 = Output
    Config Portc.1 = Output
    Config 1wire = Portd.5
    
    Dim Adress As Byte , Command As Byte
    Dim I1 As Integer , Ss As String * 6
    Dim I2 As Integer
    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    Dim B As Byte
    Dim W As Byte
    Dim A As Byte
    
    Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32
    
     Cls
    W = 1wirecount()
    Lcd "Ilosc czujnikow:"
    Waitms 500
    Lcd W
    Wait 3
    Cls
    
    Dsid1(1) = 1wsearchfirst()
    Dsid2(1) = 1wsearchnext()
    
    If Dsid1(8) = Crc8(dsid1(1) , 7) Then
     Locate 1 , 1
     Lcd "OK Czujnik 1 ID"
     Wait 1
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid1(b))
     Next
    End If
    Wait 2
    
    
    If Dsid2(8) = Crc8(dsid2(1) , 7) Then
     Locate 2 , 1
     Lcd "OK Czujnik 2 ID"
     Wait 1
     Locate 2 , 1
     For B = 1 To 8
     Lcd Hex(dsid2(b))
     Next
    End If
    Wait 2
    Cls
    
    Do
       1wreset
       1wwrite &H55
       1wverify Dsid1(1)
       1wwrite &HBE
       I1 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsid2(1)
       1wwrite &HBE
       I2 = 1wread(2)
    
       1wreset
       1wwrite &HCC
       1wwrite &H44
    Wait 1
    
    
       I1 = I1 * 10
       I1 = I1 / 16
       'If I1 > 0 Then
       Ss = Str(i1)
       Ss = Format(ss , "0.0")
       Locate 1 , 1
       Lcd "IN   " ; Ss ; Chr(0) ;
    
       I2 = I2 * 10
       I2 = I2 / 16
       'If I2 > 0 Then
       Ss = Str(i2)
       Ss = Format(ss , "0.0")
       Locate 2 , 1
       Lcd "OUT  " ; Ss ; Chr(0) ;
    
    Loop
    
    Enable Interrupts
    
    Do
    Getrc5(adress , Command)
    Command = Command And &B01111111
    
    Cls
    Waitms 100
    
    If Adress = 0 And Command = 12 Then
    Portc.0 = 0
    Portc.1 = 0
     Locate 2 , 13
     Lcd " OFF"
     Wait 1
    End If
    
    If Adress = 0 And Command = 16 Then
    Portc.0 = 1
    Locate 1 , 14
    Lcd " ON"
    Wait 1
    End If
    
    If Adress = 0 And Command = 17 Then
    Portc.0 = 0
    Locate 2 , 13
     Lcd " OFF"
     Wait 1
    End If
    
    If Adress = 0 And Command = 32 Then
    Portc.1 = 1
     Locate 1 , 14
     Lcd " ON"
     Wait 1
    End If
    
    If Adress = 0 And Command = 33 Then
    Portc.1 = 0
     Locate 2 , 13
     Lcd " OFF"
     Wait 1
     End If
    
    Loop
    



    Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
  • REKLAMA
  • #2 4947492
    dawid512
    Poziom 32  
    Posty: 1439
    Pomógł: 229
    Ocena: 6
    Witam.

    Po pierwsze programy umieszczaj w znacznikach "code".
    Po drugie nie wiem po co umieszczach biblioteke $lib "mcsbyte.lbx" .
    Nie wiem czy zauwarzyles ale jesli usuniesz wlasnie ten kawalek kodu ($lib "mcsbyte.lbx" ) to program kompiluje sie bez problemu. Sprobuj skompilowac ten kod wlasnie bez tego fragmentu i zobacz na hardware czy to rusza.
  • REKLAMA
  • #3 4948384
    superb-s1
    Poziom 11  
    Posty: 11
    zrobiłem tak jak mi poleciłeś usunąłem ten fragment wszystko sie skompilowało tylko po załadowaniu kodu do ATmegi8 temperatura sie wyświetlała ale nie można było nic włączyć za pomocą pilota RC5 w pomocy bascom ta biblioteka $lib "mcsbyte.lbx" jest potrzebna aby można było sterować za pomocą RC5
  • REKLAMA
  • #4 4948492
    dawid512
    Poziom 32  
    Posty: 1439
    Pomógł: 229
    Ocena: 6
    Cytat:
    pomocy bascom ta biblioteka $lib "mcsbyte.lbx" jest potrzebna aby można było sterować za pomocą RC5


    Ja steruje przez RC5 bez tej biblioteki i wszytsko dziala bez zarzutu.
  • REKLAMA
  • #5 4948824
    superb-s1
    Poziom 11  
    Posty: 11
    a mógłbyś wrzucić te część kodu obsługującą RC5

    Dodano po 43 [minuty]:

    dzięki przyjacielu za pomoc twoja skazówka jednak okazała sie pomocna
  • Pomocny post
    #6 4949025
    dawid512
    Poziom 32  
    Posty: 1439
    Pomógł: 229
    Ocena: 6
    Masz tutaj program odbierajacy dane z rc5 w przerwaniu int0:

    
    
    'Program umożliwiający odbior danych w standardzie rc5 z użyciem przerwania int0
    'dzieki czemu odbior danych nie zakłóca działania programu głównego
    
    $regfile = "m32def.dat"                                     'atmega32
    $crystal = 8000000                                          'kwarc 8MHz
    
    Config Lcdbus = 4
    Config Lcd = 16 * 2                                         'wyswietlacz 2x16 znakow
    Config Lcdpin = Pin , Db4 = Pb.4 , Db5 = Pb.5
    Config Lcdpin = Pin , Db6 = Pb.6 , Db7 = Pb.7 , E = Pb.3 , Rs = Pb.2
    
    Config Rc5 = Pind.2                                         'wejscie int0 do ktorego jest podlaczony odbiornik
    
    Config Int0 = Low Level                                     'przerwanie zew. koncowka int0 czyli pd.2
                                                             'przerwanie po wystapieniu stanu niskiego
                                                                  'Podczas przerwania int0 skok do pobor
    On Int0 Pobor
    
    Dim Adres As Byte , Komenda As Byte                         'deklaracja komendy i adresu
    
    Dim Odebrano As Byte                                        'flaga
    
    Enable Interrupts                                           'wlaczenie systemu przerwan
    
    Enable Int0                                                 'odblokowanie przerwania int0
    
    Set Odebrano                                                'ustaw flagi odebrano
    
    
    Do
    
                                                                 'jesli odebrano to...
    If Odebrano = 1 Then
    Cls
    Home
    Lcd "adres: " ; Adres                                       'pokaz adres
    
    Lowerline                                                   'pokaz komende
    Lcd "komenda: " ; Komenda
    
    Reset Odebrano                                              'reset odebrano
    Enable Int0                                                 'aktywuj przerwanie
    
    End If
    
    Loop
    
    
    Pobor:
                                                                'wylacz przerwanie int0
    Disable Int0                                                'wlacz system globalnych przerwan
    Enable Interrupts
    
    Getrc5(adres , Komenda)                                     'pobierz adres i komende
    
    Komenda = Komenda And &B01111111                            'wyzeruj najbardziej znaczacy bit komendy
    
    Set Odebrano                                                'ustaw odebrano (mozliwy odbior kojenego kodu)
    
    Return
    
    
    


    P.S. jeśli Ci pomogłem - kliknij "Pomógł" .

    Pozdrawiam
REKLAMA