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

[2313][bascom] RC5 odbiór w przerwaniu INT0

anglik20 10 Lut 2011 23:13 2729 6
REKLAMA
  • #1 9134205
    anglik20
    Poziom 14  
    Mam problem i nigdzie nie mogę znaleźć odpowiedzi. Mianowicie, chce, żeby mój program odbierał kod w przerwaniu, tak, aby nie miało to wpływu na pracę programu.
    Mam taki kod:
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    $baud = 19200
    
    Dim Kod As Bit
    Dim Command As Byte , Subaddress As Byte
    
    Config Pind.2 = Input
    Config Int0 = Low Level
    On Int0 Receiverc5
    Enable Int0
    Enable Interrupts
    Config Rc5 = Pind.2 , Timer = 0
    
    
    Do
    If Kod = 1 Then
    Disable Int0
    Cls
    Print "Com: " ; Command ; ",Adr: " ; Subaddress
    Kod = 0
    Enable Int0
    End If
    Loop
    
    Receiverc5:
    Getrc5(Subaddress , Command)
    Kod = 1
    Return


    Gdy wciskam, przycisk na pilocie, to nic się nie dzieje. Pilot działa na pewno, bo próbowałem jakimś innym kodem odbierać dane, ale to w pętli głównej.
  • REKLAMA
  • #2 9134246
    piotrva
    VIP Zasłużony dla elektroda
    Musisz w przerwaniu ponownie załączyć system przerwań komendą enable interrupts
  • REKLAMA
  • #3 9134268
    anglik20
    Poziom 14  
    Bez zmian, nic się nie pokazuje.
  • REKLAMA
  • #4 9134313
    piotrva
    VIP Zasłużony dla elektroda
    To odblokuj jeszcze timer0
    Ją też miałem z tym problemy bo potem odczytywał kody ale się procek zawiązał
    Musisz chyba jeszcze dać disable int0
  • REKLAMA
  • #5 9139437
    gregoorr
    Poziom 17  
    Kod przykładowy:
    
    $regfile = "m8def.DAT"
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Cursor Off
    Cls
    Wait 2
    Config Pind.7 = Output
    Set Portd.7
    
    Config Int0 = Low Level
    
    Config Rc5 = Pind.2                                         'do Int0
    On Int0 Pobr_rc5
    Dim Address As Byte , Command As Byte
    Dim Odebr_kod As Bit
    
    Enable Interrupts
    Enable Int0
    
    'Set Odebr_kod
    
    Do
    'If Odebr_kod = 1 Then
    'Cls
    'Lcd "Adres:" ; Address
    'Lowerline
    'Lcd "Komenda:" ; Command
    'Reset Odebr_kod
    'Enable Int0
    'End If
    Loop
    End                                                         'end program
    
    
    
    Pobr_rc5:
    Reset Portd.7
    Disable Int0
    Enable Interrupts
    Getrc5(address , Command)
    Command = Command And &B01111111
    Cls
    Lcd "Adres:" ; Address
    Lowerline
    Lcd "Komenda:" ; Command
    'Set Odebr_kod
    Set Portd.7
    Wait 2
    Cls
    Enable Int0
    Return
    
  • #6 9140158
    piotrva
    VIP Zasłużony dla elektroda
    wszystko niby dobrze i fajnie, działać będzie, ale
    błagam, nie dawajcie instrukcji typu Lcd i Wait w przerwaniu!!!
  • #7 9140955
    anglik20
    Poziom 14  
    Ja wszystko będę robił print-em w celach testowych. Jak będzie dobrze działało to wszelkie dane 'wychodzące' wywalę i niech się kotłują w procku ;)

    Sprawdzę jutro i dam znać co i jak.
REKLAMA