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

[atmega][bascom] odczyt stanu pinów

metad 08 Lut 2009 13:16 2408 9
REKLAMA
  • #1 6120385
    metad
    Poziom 10  
    witam,

    jak odczytać stan kilku pinów - przykładowo pb.1, pb.2, pd.6, pd.7 do jednej zmiennej byte?
  • REKLAMA
  • #2 6120550
    ZbeeGin
    Poziom 39  
    Odczytaj dwa rejestry PIN, potem zamaskuj niepotrzebne bity w odczytanych danych (AND), potem scal w jedną zmienną (OR). Ewentualnie jak potrzebujesz to poprzesuwaj bity przez SHIFT.
  • REKLAMA
  • #3 6121168
    wader_669
    Poziom 28  
    postaram sie to napisac, bo mnie to interesuje, a mam lekkie problemy jak chodzi o takie operacje na bytach i bitach.
    
    
    dim x as byte
    
    do
    
    x.0=pinb.1
    shift x, left, 3
    x.0=pinb.2
    shift x.0 , left, 2 
    x.0=pind.6
    shift x.0 , left, 1
    x.0=pind.7
    
    loop 
    end
    

    tak powinna teraz wygladac zmienna x :
    0, 0, 0, 0, (pb.1), (pb.2), (pd.6), (pd.7)
  • #5 6121294
    wader_669
    Poziom 28  
    aaaaa!!!!!! to juz wiem.
    poprawilem
    Jeszcze chyba pokrecilem x.7 z x.0 wiec to tez zmienilem
  • #6 6121570
    metad
    Poziom 10  
    ja też już wiem :)


    pozdrawiam
  • REKLAMA
  • #7 6122114
    wader_669
    Poziom 28  
    to umiesc kod (jak ktos bedzie mial ten sam problem i znajdzie ten temat to bedzie mial odpowiedz)
  • REKLAMA
  • #9 6127635
    wader_669
    Poziom 28  
    no w sumie racja, ze nie wpadlem na to :/ wtedy chyba glowa mi nie pracowala
  • #10 6130812
    ZbeeGin
    Poziom 39  
    Tylko, że tak zapisany kod wygeneruje trochę więcej intstrukcji niż "ręcznie" zoptymalizowany z AND, OR, SHIFT. Oczywiście biorąc pod uwagę pewne uproszczenia. Na przykład.
    dim xx as byte 
    dim yy as byte 
    
    xx = pinb 
    yy = pind 
    xx = xx and &b00000110 
    shift xx, right, 1 
    yy = yy and &b11000000 
    shift yy, right, 4 
    xx = xx or yy

    na wyjściu w XX dostniesz:

    xx <= |0|0|0|0|pd.7|pd.6|pb.2|pb.1|


    Drugi problem to zmiana stanu pinów w czasie działania kodu z kopiowaniem bitów. Zanim dojdzie do skopiowania np. czwartego bitu to stan pierwszego może się już zmienić. I zmienna nie odzwierciedli stanu jaki panuje obecnie. Trzeba o tym też pamiętać.
REKLAMA