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 przesuwać pojedyncze bity przez wiele zmiennych Byte (A, B, C, D, E) w pętli FOR?

pawlik118 30 Cze 2025 12:05 525 7
REKLAMA
  • #1 21593669
    pawlik118
    Poziom 34  
    Posty: 2430
    Pomógł: 202
    Ocena: 609
    Cześć
    Mam 5 zmiennych typu Byte: A, B, C, D, E
    Potrzebuję pętlą FOR I = 1 to X przesuwać jeden bit jako logiczną 1 (lub dwa bity) od najmłodszego miejsca pierwszego bajtu, aż do najstarszego.

    Załóżmy, że X = 10 i "jeden bit" , wówczas chcę uzyskać

    A = &B00000000
    B = &B00000010
    C = &B00000000
    D = &B00000000
    E = &B00000000

    Załóżmy, że X = 5 i "dwa bity" , wówczas chcę uzyskać

    A = &B00011000
    B = &B00000000
    C = &B00000000
    D = &B00000000
    E = &B00000000

    Jak to zrobić?

    Funkcja shift nie "carry bit" więc się nie nadaje?
    ASM ROL ?
  • REKLAMA
  • #2 21593758
    bart-projects
    Poziom 30  
    Posty: 836
    Pomógł: 200
    Ocena: 261
    Shift obsługuje Dword, tak jak tu w przykładzie, który ma cztery bajty.

    Bierzesz zmienną która pomiesci to co chesz i potem nakładasz na tę zmienną bajty poprzez Overlay. W ten sposób masz dostęp do poszczególnych bajtów.
    Tu wyświetlam wszystkie cztery, ale równie dobrze możesz sobie wyświetlić tylko B.

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    [BASCOM] Jak przesuwać pojedyncze bity przez wiele zmiennych Byte (A, B, C, D, E) w pętli FOR?

    Jeśli nie chcesz na raz 10 tylko musi być ta pętla For-Next bo za kazdym razem to ma czymś sterowac to po prostu robisz Shift Mydword , Left , 1
  • REKLAMA
  • #3 21593765
    pawlik118
    Poziom 34  
    Posty: 2430
    Pomógł: 202
    Ocena: 609
    Tak byłoby najprościej, ale bajtów mam 5 szt. PRzydałaby się większa zmienna.
  • REKLAMA
  • #4 21593779
    bart-projects
    Poziom 30  
    Posty: 836
    Pomógł: 200
    Ocena: 261
    Jesli to jest zawsze od najmłodszego bitu do najstarszego to można mieć tablicę pięciu bajtów i tam sie można odwoływać do kazdego bitu takiej tablicy.
    Na przykład:

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Chyba działa ;)

    [BASCOM] Jak przesuwać pojedyncze bity przez wiele zmiennych Byte (A, B, C, D, E) w pętli FOR?

    W nowym Bascom jest mozliwość formuowania TYPÓW (Dim MyType As Type) i z tym pewnie tez by mozna coś pokombinować bo w takim typie tez sie mozna odwoływać do poszczegolnych składników.
  • REKLAMA
  • #5 21593784
    pawlik118
    Poziom 34  
    Posty: 2430
    Pomógł: 202
    Ocena: 609
    Wydaje się ok.
    Celem programu jest sterowanie wyświetlaniem jednego (lub dwóch obok siebie) segmentów wyświetlacza BAR LED jako cyfrowej skali częstotliwości do tunera 88-108.
    Stąd, pozycja na "skali" zależy od zmiennej (powiązanej z odbieraną częstotliwością). Kierunek "przesuwania" jest jeden, bo i tak po zmianie częstotliwości przeładowane zostaną wszystkie dane sterujących wyświetlaczem rejestrów 74HC595.
  • #6 21593789
    bart-projects
    Poziom 30  
    Posty: 836
    Pomógł: 200
    Ocena: 261
    Tak mi tez przyszło do głowy że to do rejestrów przesuwnych.
    A może pokusić się sprzętowo to przesuwać :D
    Nie odswieżasz wszystkich pieciu bajtów tylko na początku jedynkę a potem na bezczelnego tylko sobie taktujesz zegarem i potem ciach Latch :D

    Nie bawiłem sie tak nigdy, ale to powinno się przesuwac o jedno miejsce z każdym taktem.
  • #7 21594109
    pawlik118
    Poziom 34  
    Posty: 2430
    Pomógł: 202
    Ocena: 609
    Tak, zapewne tak się skończy. Ustawić "1" a potem przesunąć ją na odpowiednie miejsce w 74HC595. Tak wydaje się najprościej.
    Dziękuję za pomoc i zaangażowanie.
  • #8 21594114
    bart-projects
    Poziom 30  
    Posty: 836
    Pomógł: 200
    Ocena: 261
    Nie musisz się w to bawić "ręcznie"
    Możesz wziąć zmienną i ustawić w niej 1 jako wartośc a potem zrobic Shiftout gdzie można ustawiać ilość bitów do wypchniecia czyli taktów.
    Nominalnie Bascom robi dwa NOP`y pomiedzy zmiana stanów zegara.

    Czyli potem możesz brać jakiś Bajt z wartością 0 i wypychać tylko jeden Bit ;)

    Potem sobie mozesz napisac makro na Latch ;)

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    I jak to puścisz za komendą Shiftout to Bascom sam zalatch`uje :D ahahahaha :D

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy przesuwania pojedynczych lub podwójnych bitów jako logicznej "1" przez pięć zmiennych typu Byte (A, B, C, D, E) w pętli FOR w Bascom. Problem polega na przesuwaniu bitów od najmłodszego bitu pierwszego bajtu do najstarszego bitu ostatniego bajtu. Zaproponowano użycie zmiennej typu Dword lub tablicy bajtów z dostępem do poszczególnych bitów, co umożliwia manipulację bitami w wielu bajtach jednocześnie. Wskazano, że funkcja Shift w Bascom obsługuje Dword i może być użyta do przesuwania bitów, jednak nie przenosi bitu przeniesienia (carry). Alternatywnie zasugerowano użycie rejestrów przesuwnych 74HC595, gdzie przesuwanie bitów można realizować sprzętowo, sterując wyświetlaniem segmentów LED jako cyfrowej skali częstotliwości. Zaproponowano także wykorzystanie funkcji SHIFTOUT do wysyłania bitów do rejestru oraz makra Latch do synchronizacji wyjścia. Dyskusja obejmuje przykładowe fragmenty kodu Bascom z wykorzystaniem overlay dla dostępu do bajtów w Dword oraz manipulację bitami w tablicy bajtów. Całość ma zastosowanie w sterowaniu wyświetlaczem BAR LED dla tunera FM 88-108 MHz.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA