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

[BASCOM] Jak odwrócić bity w BASCOM, np. 10100000 na 00000101?

rekinisko 03 Lut 2013 02:48 3042 14
REKLAMA
  • #1 11880910
    rekinisko
    Poziom 22  
    W jaki sposób odwrócić w bascomie bity, np 10100000 na 00000101?
  • REKLAMA
  • #2 11881301
    Press
    Poziom 24  
    Pewnie trzeba na piechotę. Bit po bicie. Tylko to nie jest odwracanie tylko zamiana. Odwracanie to zamiana 1 na 0 i odwrotnie. Odwracanie realizuje funkcja NOT
  • #3 11882130
    Mundi1970
    Poziom 24  
    Cytat:
    W jaki sposób odwrócić w bascomie bity, np 10100000 na 00000101?

    Zaglądnij do helpa i zainteresuj się instrukcją ROTATE.
  • #4 11882460
    rekinisko
    Poziom 22  
    ROTATE nic mi nie da, jeżeli znam zmienną to spoko, mogę sobie przesunąć ją o tyle miejsc ile potrzebuje. Ale zmienna za każdym razem jest inna.
  • REKLAMA
  • #5 11882737
    Mundi1970
    Poziom 24  
    To można poświęcić 256 bajtów flasha lub eprom'a na tablice, lub zrobić to na 8 IF'ach :). Jeżeli jest to jakaś nowsza ATmega i posiada rejestr GPIOR to 16 rozkazów asemblera powinno załatwić sprawę.
  • #6 11882921
    rekinisko
    Poziom 22  
    Kombinuje tak:
    bajt = 10000000
    zmienna = bajt.1
    zmienna = 1
    ... i tak osiem razy rozkładając bajt na bity i później tylko je poskładać w odwrotnej kolejności. Oczywiście prosto nie jest. O tablicach myślałem ale musiałbym je ręcznie rozpisać na kartce 256 i zrobić obok lustrzane odbicie i przeliczać :D
  • #7 11883020
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #8 11883038
    Mundi1970
    Poziom 24  
    rekinisko napisał:
    Kombinuje tak:
    bajt = 10000000
    zmienna = bajt.1
    zmienna = 1
    ... i tak osiem razy rozkładając bajt na bity i później tylko je poskładać w odwrotnej kolejności. Oczywiście prosto nie jest. O tablicach myślałem ale musiałbym je ręcznie rozpisać na kartce 256 i zrobić obok lustrzane odbicie i przeliczać :D


    Można tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #9 11883057
    rekinisko
    Poziom 22  
    atom1477 napisał:
    Nie musiałbyś tego ręcznie rozpisywać. Można w excelu.

    Atom a jak w exelu zrobić lustrzane odbicie? :)

    Dodano po 13 [minuty]:



    Mundi1970 Twój kod działa super :) dzięki wielke. Wykombinowałeś to prościej niż myślałem, że to możliwe. Musiałem tylko usunąć ten kawałeczek:
    Cytat:
    $hwstack = 64
    $swstack = 64
    $framesize = 64
    $baud = 19200

    Tematu jeszcze nie zamykam, może komuś się przyda. A tak w ogóle to pracuje nad zegarkiem sterowanym po i2c PT7C43390. Ktoś wymyślił, że bity można wysłać od tyłu i zadowolony a ty się męcz.
  • Pomocny post
    #10 11883445
    Mundi1970
    Poziom 24  
    Tak się teraz patrzę i sprawdzanie bitów jest niepotrzebne, można kopiować bity :

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #11 11884152
    lelekx
    Poziom 30  
    To jest ten obszar, gdzie Bascom nie daje rady. W assemblerze Bascoma to by było mniej więcej:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Albo szybciej kosztem wielkości kodu:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #12 11887258
    BlueDraco
    Specjalista - Mikrokontrolery
    A tak poprawnie i szybko, to robi się to tak (w C, pewnie łatwo przepisać na Bascom)

    a = (a & 0b10101010) >> 1 | (a & 0b01010101) << 1;
    a = (a & 0b11001100) >> 2 | (a & 0b00110011) << 2;
    a = (a & 0b11110000) >> 4 | (a & 0b00001111) << 4;

    To ostatnie można zamienić na rotację o 4.
  • #13 11896204
    SylwekK
    Poziom 32  
    @lelekx - a czy w Twoim kodzie nie powinno być na początku CLC... nigdy nie wiadomo w jakim stanie będzie znacznik kiedy akurat nadejdzie czas wykonywania tego fragmentu kodu.
  • #14 11897527
    Konto nie istnieje
    Poziom 1  
  • #15 11898135
    SylwekK
    Poziom 32  
    W sumie racja... umkło mi to. Faktycznie znacznik przeniesienia przyjmie wartość w zależności od tego co wyjdzie poza bajt. Dopiero zaczynam assembler na AVR przypominając sobie tłuste czasy programowania procesorów 6502 :)
REKLAMA