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

Efektywne przetwarzanie bajtu z łączem szeregowym w assemblerze na 80c51

Nisser 17 Lip 2006 16:18 863 2
REKLAMA
  • #1 2828026
    Nisser
    Poziom 11  
    Posty: 8
    Mam pytanie czy ma ktoś pomysł jak najefektywniej przetworzyć bajt odebrany łączem szeregowym. Problem polega na tym że podzielony on jest na 3 człony:
    -pierwsze dwa bity odpowiadają funkcjom jakie ma mikrokontroler wykonać: 00 - wysyłka danychz z bufora SBUF, 01 - ustawienie portów, 10 wyslanie wlasnego adresu, 11 - blad
    - kolejne 3 bity: wyznaczają ktory port ma zostać ustawiony robię to na 80c51 atmela i na razie mam 3 porty, bo P3 jest zajęty ale nie wiem czy nie przerzucę sie na philipsa więc koduję na 3 bitach,
    -ostatnie 3 bity oznaczają szerokość impulsu jaka zostanie podana na jedno z wyjść int. chodzi o sterowanie prędkością: podłączone są dwa timery do jedngo wyjścia i odpowiednia liczba na tych 3 bitach odpowiednio zmienia wypełnienie.
    za wszelkie sugestie dziękuję, bo zaczałem to robić, stanąłem w pewnym miejscu i nie potrafie dalej ruszyć. Pozdrowienia
  • REKLAMA
  • #2 2828324
    Zaquadnik
    Poziom 27  
    Posty: 998
    Pomógł: 103
    Ocena: 25
    Możesz wykonać sobie kopię w pamięci danej odebranej. Na kopię roboczą nakładasz maski, najpierw 0xC0, aby odczytać najstarsze bity i w zależności od nich wykonać odpowiednią funkcję. Robisz to na przykłąd tak:
    
    Porcedurka:
                   mov A,SBUF
                   anl A,#0C0h
                   jnz dalej1
                   mov SBUF,<jakas dana>
                   ljmp koniec
    dalej1:
                   cjne A,#40h,dalej2
                   <zrob cos innego>
                   ljmp koniec
    dalej2:
                   cjne A,#0C0h,dalej3
                   <obsluz blad>
                   ljmp koniec
    koniec:
                   ret
    

    Mniej więcej coś takiego. I z innymi bitami postępujesz identycznie, tylko inne maski nakładasz. Dla trzech następnych będzie to maska 0x38, a dla trzech najmłodszych 0x07 :]
    Pozdrawiam :)
  • #3 2828424
    Nisser
    Poziom 11  
    Posty: 8
    Dziękuję zaquadnik dobry pomysł łatwy i dobry spróbuję i zobaczę co z tego wyniknie. Pozdrawiam
REKLAMA