Witam, mam podobny problem więc pozwoliłem sobie odkopać temat. Problem dotyczy on jednak zmiennej aa. Kiedy chce za jednym razem przesunąć o 8 bitów to wynik jest niepoprawny, jednak jeśli przesunę najpierw o 7 a później o jeden to wynik jest poprawny. [syntax=c]uint32_t xxxx; uint8_t aa; aa = 255; xxxx = (aa << 8); //0xFFFFFF00 xxxx = (aa <<...
Nie napisałeś ilubitowe są liczby A i B. A realizacja twojej funkcji powinna wyglądać tak: 1/ Na jeden sumator na wejście pierwszej liczby podajesz liczbę A. 2/ Na wejście drugiej liczby podajesz liczbę A przesuniętą o 2 bity co daje że defakto wprowadziłeś iczbę 4*A. 3/ Na wyjściu tego sumatora otrzymujesz 5*A. 4/ Wynik z tego sumatora podajesz na...
1. VRef + kondensator, Vcc można wybrać jako VRef programowo. 2. To zależy od rozdzielkczości ADC, dla 10 bitowej masz zakres 0..2^10-1 3. To fragment niepotrzebny, gdyż pisze się po prostu dana=ADC lub ADCW. << to operacja przesunięcia bitowego.
Nie do konca, o ile SP, czy PC jest sterowany przez jednostke sterujaca, to na pozostalych operuje ALU - tak wynika ze schematu blokowego AVR. Wiec skoro istnieja operacje arytmetyczne, ktorych operand jest 16-bitowy (ADIW, SBIW, pre i postinkrementacja rejestrow X, Y, Z, adresowanie z przesunieciem tych rejestrow) to ALU musi byc do tego dostosowane....
Jeżeli chcesz uzyskać pomoc, to wstaw właściwy program. Deklaracja zmiennej nie ma nic wspólnego z tym co wysyłasz. W podanym programie wysyłasz tylko 8 bitów. Rejestr sprzętowego SPI nie przyjmuje więcej niż 8 bitów, a w funkcji programowego SPI inicjujesz "licznik" na 8 bitów, przez co nie możesz wysłać więcej. Najprostszym sposobem jest wysłanie...
No więc tak: (zakładam liczby w kodzie NKB (tj. bez znaku)) - ponieważ mnożysz liczby 4 bitowe więc wynik może być 8 bitowy: 15*15=225 (11100001) z tego wniosek, że akumulator wyjściowy powinien być 8 bitowy (2 sumatory 4 bitowe, 2 rejestry 4 bitowe pamiętające wynik) Wyjście sumatorów podajesz na wejście powyższych rejestrów, Na jedne z wejść np a0,a1,a2,a3,a4,a5,a6,a7...
Witam , mam nadzieję iż nie zanudziłem bez reszty.. W zestawieniu z moimi "dokonaniami asm." kolega michalko12, jest najbliższy temu co ja kiedyś robiłem . Oto wersja asm z przełącznikiem kompilacji aby kompilować jako samodzielny plik - kto chce ->ten może :D ( ta wersja to 16-timerów, 16-nasto bitowych, każdy cztery tryby konfiguracji, oczywiście...
Tu masz dzielenie liczb czterobajtowych przez dwu bajtowe (16 bit).Co prawda nie moje opracowanie, podaję w orginale. ;procedura dzielenia 4-BAJTOWYCH liczb przez 2-BAJTOWE ; wejscie: ;r0 - adres najstarszego bajtu dzielnej, ;r1 - adres najstarszego bajtu dzielnika, ; wyjscie: ;R0 - adres ilorazu ;R6:R5 - reszta ;W deklaracji zmiennych programu wykorzystujacego...
Niniejszy projekt opisuje sposób realizacji sprzętowej i programowej detekcji pojedynczej częstotliwości z wykorzystaniem niewielkiego, 8-bitowego mikroprocesora z rodziny PIC. Taki układ może być wykorzystywany do wykrywania obecności konkretnej częstotliwości w sygnale analogowym, na przykład w sygnale audio. Znajdzie on zastosowanie w urządzeniach...
Zasada jest prosta: albo stosujesz nawiasy albo masz tabelkę priorytetów wykutą na pamięć. Przesunięcia bitowe mają niższy priorytet od negacji, tak więc: ~1>>MUX4 będzie różne od ~(1>>MUX4) kiedy na pewno zależy Ci na tym drugim. Przy okazji przesunięcie w lewo to "<<" (nie ">>") Druga rada: jeśli zmieniasz wszystkie bity bez...
Witam Mam za zadanie zbudować rejestr 6 bitowy z przesuwem informacji w prawo Do wykorzystania mam układ 74LS174 ,47LS175 oraz podstawowe brami logiczne. powyżej wymienione układy to scalone przerzutniki tupu D z czego 74LS174 zawiera 6 takich przerzutników, Wiec skoro rejestr ma być 6 bitowy to powinienem użyć tego układu. Tylko teraz pytanie jak na...
Dzięki za odpowiedzi, mam jeszcze pytanie, w jaki sposób można by zrealizować sekwencyjne wyświetlenie wszystkich znaków na wyświetlaczu LCD? Próbowałem napisać prosty program i kombinowałem w ten sposób, jednakże średnio to działa, ponieważ przesuwają się obydwie linie i na wyświetlaczu panuje chaos. Chciałbym by linia 0 była nieruchoma (podany numer...
zerujesz zmienną przepisujesz pierwszą liczbę bez przesunięcia dodajesz binarnie (or) drugą z przesunięciem 16 itd...
Tutaj nie ma problemu z nadpisaniem, ponieważ jest inny sygnał(bank) CS. Mam płytkę z NET+ARM, tam właśnie jest podłączony "inny Flash" i CS tego flash'a do masy (pin CS0 ARM'a jest wolny) - czyli cały czas aktywny i przesunięty o jeden do góry na szynie. Kolejny "Flash ROM" - jest podpięty pod CS1 ARM'a. Teraz mnie ciekawi jak to działa skoro adres...
(...)idę na pieszo (...) Transmisja 16-bitowa chociaż rozważałem użycie 8-bitowej i wykorzystanie wtedy po 6 bitów z każdego koloru. Zrób to - jak masz działające (no, prawie) 16 bit, to przejście na 8 bit to zmiana chyba tylko jednego bajtu w konfiguracji wyświetlacza i później zamiast 16 bitowego słowa wysyłasz 3 bajty RGB. Na dolną połówkę portu...
Słabo znam składnię VB, ale poszukaj sobie operatorów bitowych. W większości języków (może wszystkich) są, bo procesory mają takie rozkazy. Ogólnie zasada jest taka liczba <iloczyn bitowy> maska = zero (gdy wszystkie bity wyznaczone przez maskę są 0) lub nie zero (gdy którykolwiek jest 1). Jeżeli maska ma dokładnie 1 bit (kolejne potęgi dwójki)...
Cześć jakiś czas temu spotkałem się z takim zapisem mapowania rejestrów: C gives no guarantee of the ordering of fields within machine words , więc może być problem z portowaniem. Nie mam zamiaru "wynajdywać koła na nowo" tak pytam się z ciekawości o wasze opinie. Ewentualnie tak myślę że dałoby rade to zrobić też w C++ z template w taki sposób żeby...
Dziś siedze całą noc nad tym jak wymyśleć algorym prostego dzielenia liczby 16bit przez liczbe 8bit ze wzracaniem reszty na procesor 8bit i szczeże mówiąc nic nie wymyśliłem.... Jedynym sensownym rozwiązaniem jest realizacja klasycznego sposobu dzielenia:( Moje pytanie brzmi... czy da sie jakoś inaczej zrealizować funkcje dzielenia?? np tak jak w mnożeniu...
mnożenie przez 3 Na wyjściu podstawowego sumatora dajesz następny dodający do siebie: sygnał wyjściowy i sygnał wyjściowy przesunięty w lewo o jeden bit (czyli pomnożony przez 2) Y=(A+B)+2*(A+B)=3*(A+B) 1 sumator wejścia a0,a1,a2 i b0,b1,b2 wyjścia c0, c1, c2, c3 (4 bity bo max wynik to 14 - 4 bit to przeniesienie z 3 stopnia) drugi sumator (6 bitowy...
" >> " i " << " to są operacje przesunięcia, a przepisu na rotate w C nie znam... ;) Proponuję programik wykorzystujący przesunięcia bitowe do efektów z 8 LED : Pozdrawiam, Light'I
Daj sobie spokuj z dzieleniem liczb 16bitowych w 8 bitowym procesorze, bo jeśli nie chce Ci się zrozumieć tego banalnego algorytmu zamiany na BCD to na pewno nie będzie Ci się chciało przekopać przez algorytm dzielenia liczb dwa razy dłuższych niż procesor ;) Algorytm jest bardzo prosty, przesuwasz w lewo a to co odpada wrzucasz do jednostek, robisz...
Tak jak w temacie poszukuje do projektu licznika 8 bitowego z mozliwoscia wpisania wartosci poczatkowej. Patrzylem na 74191 ale niestety nie moge znalezc zadnego schematu jak go podlaczyc wiec jezeli ktos ma jakis licznik ze schematem zapraszam. Bo licznik tak w sumie potrzebny i jest do wiekszego projektu dzieki niemu bede mogl zrealizowac przesuniecie...
mariusz102102: Jeśli zastosujesz x <= a * b; to domyślnie narzędzia zsyntezują układ wykorzystujący sprzętowy układ mnożenia 18x18 bitów. wykorzystanie sprzętowego układ mnożenia to jest jedna z zalet zapisu mnozenia przez "*". Sugeruje rowniez sprawdzic czy po wylaczeniu w syntezie "sprzętowych ukladow mnożenia" zaimplementowanie mnozenia operandow...
Przetwonnik zlicza napięcia tylko do 2047, pokazując ujemne napięcie nie ma znaku minus i wartość, tylko np 65320. Czyli przetwornik zwraca wyniki w kodzie U2. Tam nie ma znaku minus. Jest za to przesunięcie poziomu. Najprościej mówiąc, zastosowanie takiej funkcji do konwersji: Napiecie = Zmierz1 * 256 Napiecie = Napiecie + Zmierz2 da Ci złe wyniki....
Układ DAC AD5722R to podwójny, szeregowy, 12-bitowy cyfrowo-analogowy konwerter (digital-to-analog converter) DAC z wyjściem napięciowym. Moduł ten może być zasilany napięciem z zakresu od + 4.5 V w górę, do + 16.5 V, a nawet napięciem symetrycznym z zakresu od ± 4.5 V w górę, do ± 16.5 V. Poziom napięcia wyjściowego jest sterowany oprogramowaniem...
Myślę, że mojemu prowadzącemu chodziło o wykorzystanie sumatora jednobitowego (do którego dostęp mam na płycie czołowej w laboratorium), więc zapewne powinienem brać pojedynczą wartość z rejestru A (przesuniętego o jedno miejsce w lewo) oraz pojedynczą wartość z rejestru B (przesuniętego o 2 miejsca w lewo), sumować je, a wynik zapisywać w jakimś trzecim...
Chyba normalnie, tj. przez polozenie i nr_serwa, jednak takie nienazwane unie i struktury są niezgodne z ISO C. Radziłbym używać nazwanych, kod będzie wtedy czytelniejszy i przenośny. Standard nie gwarantuje też sposobu przydziału bitów w polach bitowych. Jeśli jest to określone w ramach WinAVR i zaznaczysz, że kod działa tylko w WinAVR, to ok. W ogólnym...
Texas Instruments Incorporated wprowadził nowe moduły ADS62Px9 /x8 . Są to analogowo-cyfrowe konwertery 14-bitowe i 12-bitowe ADC (analog-to-digital converter) pracujące z częstotliwością próbkowania rzędu 250MSPS. Układy te łączą wysoce dynamiczne osiągi i niskie zużycie energii w kompaktowej, 64-wyprowadzeniowej obudowie typu QFN. Są idealne dla...
Witam skrobię mały program na armie. Problem jest następujący: Z ADC'a dostaję 12bitową paczkę danych zakodowaną w U2, program w procku przepisuje ją do zmiennej typu int. Kodowanie U2 jak wiecie zależy od tego ile bitów ma dana, int ma 32 a ja mam daną 12 bitową. Jak to ugryźć by tą daną do tego int-a właściwie włożyć. Metoda naokoło tj wygląda następująco...
Możesz użyć przesunięć bitowych shl i shr. Poczytaj: i tutaj: Nie napisałeś nawet w czym kodujesz! Pozdrawiam!
eeeh no bo zapomniałem przed każdą nazwą bitu dodać uint8_t czyli ma być uint8_t z0:1 uint8_t z1:1 itd - spróbuj Dodano po 1 Ma to działać tak, że po podłączeniu 5v do PA0 zapali się dioda podłączona do PC7, a jeśli nie to zapali się dioda podłączona do PC6. Eeeee - no to na prawdę nie wiem po co ci te pola bitowe ;) - toż to przesada na maxa - chociaż...
Na pewno język C. Gościu bezsensownie nam wytłumaczył jak działają przerzutniki w rejestrach i kazał zrealizować wyżej wymienione układy wejść/wyjść Podajemy liczbę w systemie dziesiętnym a potem dokonujemy przesunięć bitowych.
Podwójny przetwornik analogowo-cyfrowy, zaprojektowany do odbiorników cyfrowych. AD9648 jest monolitycznym, dwukanałowym przetwornikiem ADC o rozdzielczości 14-bitów. Zasilany jest napięciem 1.8V (pobór mocy jest niewielki i wynosi zaledwie 78mW na kanał przez pracujący jądro ADC) i pracuje z prędkością 105/125 MSPS. Posiada w swojej strukturze wzmacniacz...
[syntax=c]uint32_t dane;[/syntax] Prościej się nie da. Dostęp do poszczególnych bitów przez operatory bitowe koniunkcji, alternatywy i przesunięć bitowych. Ale mam wrażenie, że to, co próbujesz osiągnąć, to sztuka dla sztuki. Na jaką maszynę piszesz? Poza mikrokontrolerami i naprawdę starymi komputerami to tylko niepotrzebna komplikacja kodu dla znikomego...
No nie jest poprawna, bo kolejne zapisy kasują poprzednie. Musiałbyś użyć operacji sumy bitowej (|). Kolejna sprawa, że coś przesunięte o więcej niż 8 bitów po operacji & 0xFF da zero, więc maskę też trzeba odpowiednio zmienić. IMHO o wiele przejrzyściej jest wykorzystać unie.
Rozwijając to co pisał snnaap o nadpisywaniu, dla pewności lepiej wszystkie wartości maskować/warunkować, wtedy nie ma żadnych nieprzyjemności, jeśli zapomni się o dozwolonych wartościach. Dodatkowo, coś mi nie pasuje przy wysyłaniu danych po SPI. Zakładając, że funkcja wysyła bajt, to w pierwszej linii wysyłasz młodszy bajt słowa, a za drugim razem...
Albo napiszesz to w C, albo musisz napisać procedurę dzielenia liczby 16-bitowej przez 10 (a właściwie przez 5, bo przez dwa dzieli się trywialnie - przez przesunięcie w prawo.
Zastanów się co się stanie, gdy zwiększasz wartość zapisaną w rejestrze PORTB na początku pętli nieskończonej: PORTB = 0b00001000 - mamy włączone podciąganie W czasie przyciskania: PORTB = 0b00001000 PORTB = 0b00001001 PORTB = 0b00001010 PORTB = 0b00001011 PORTB = 0b00001100 PORTB = 0b00001101 PORTB = 0b00001110 PORTB = 0b00001111 PORTB = 0b00010000...
XOR to nie jest odejmowanie. negacja z dodaniem jedynki a pozniej OR to jest odejmowanie. Żebyś lepiej zrozumiał, xor nie daje ci przesunięcia, w związku z tym jeśli przesuniecie w działaniu powinno nastąpić to xor nie zadziała jak odejmowanie. przykład: 12 - 8 = 4 i 12 xor 8 = 8, to tak jak byś w systemie dziesiętnym próbował odjąć od 2 liczbę 8....
Bitowe OR czyli ustawi najmłodszy bit na 1 czyli będzie nieparzyste np. 2 binarnie to 10 3 binarnie to 11 Dodano po 2 same parzyste liczby k=( (rand()%118) -9) &(~1); ~ oznacza negacje bitową.
Nie wiem jak się zabrać do tego zadania. Książka od Javy do ręki i czytasz. Poszukaj informacji na temat reprezentacji liczb binarnych, dziesiętnych i szesnastkowych, oraz o przesunięciach bitowych. Tyle mniej więcej powinno Ci wystarczyć do rozwiązania tego zadania.
Najpierw zapisujesz młodsze 8 bitów a następnie starsze 8 bitów z przesunięciem o 8 bitów. [syntax=c] tab[n] = byte1+(byte2<<8); [/syntax]
Witam Jestem biegły w C, ale Kotlin to dla mnie nowość. Mam tablicę z trzema elementami bajtowymi. Pierwszy (zerowy) sobie ładnie odczytuje i wrzucam do strValue poleceniem: val strValue = characteristic.value[0].toUByte&... Natomiast drugi i trzeci element zawiera liczbę 16 bitową podzieloną na dwie części. Chcę te części złączyć i również...
Witam. Mam pewien problem. Mam wykonać (na papierze - prowizorycznie) przesunięcia cyklicznego w prawo i w lewo (jak dotąd rozumiem, umiem) z uwzględnieniem bitu C. No i tu zaczynają się schody. Wymęczyłam wujka google i nic nigdzie nie znalazłam.. :( Zadanie to mam wykonać na kartce, dla 8 bitowego kodu binarnego. I przesuwać kolejno o 1, 2, 4, 5 bitów....
Unsigned Char to 8 bitów czyli Bajt a nie Word, to po pierwsze. Przesunięcia bitowe robi się za pomocą Shift [variable], 8*, Right ale tutaj to chyba nie ma zastosowania. To po drugie. * ilość bitów oczywiście do wyboru. ..a po trzecie wystarczy tak: [syntax=vbnet]sub Wraddr(byval x as integer, Byval y as Word) Local Dim Xh As Byte , Xl As Byte Xh =...
Witam, Korzystam z klawiatury matrycowej (membranowej) 4x4. Niestety nie mogę zamieścić linku, ale łatwo ją znaleźć, np. na botlandzie pod hasłem klawiatura numeryczna membranowa - 16 klawiszy. Postanowiłem, że napiszę prosty kod do obsługi tej klawiatury, jednak po drodze napotkałem na błąd. Zakomentowana instrukcja switch(PINB) w funkcji pobierz_klawisz()...
Można również wykonać mnożenie bitowe z maską 2#0000_0011_1000_0000. Następnie wynik mnożenia przesunąć o 7 miejsc w prawo ;) Ale mało kto tak robi. Powyższy sposób jest bardziej czytelny.
Witam, Mam zmienną Q_ZAWORY_OGRZEWANIE typu WORD - 16 bitów i zmienne typu BOOL: Q1_OFF_V0... Q1_OFF_V15 Konwertuję zmienne bitowe i zapisuję na odpowiednie bity 0-15. Przy moim zapisie przesunięcie bitów 8-15 daje wynik 0. Dla bitów 0 do 7 wszystko jest OK. Jaki jest poprawny zapis? Czemu nie ustawia mi bitów 8-15? [syntax=c] Q_ZAWORY_OGRZEWANIE :=...
Witam dziś po resecie komputera napotkał mnie problem. Problem ten napotkał mnie w grze GTA V .zainstalowałem go i uruchomiłem aż nagle wywala mnie na pulpit. Gre mam orginalną specyfikacje komputera Procesor - Intel(R) Core(TM) i3-9100 CPU (at) 3.60GHz 3.60 GHz Karta Graficzna - Gigabyte GeForce GTX 1650 OC 4GB GDDR5 Ram - 8 GB nie pamiętam dokładnie...
Możesz wysłać do wyświetlacza te same dane, tak żeby nadpisały tamte, z przesunięciem o jeden. To maks jaki da się zrobić w bascomie :)
hmm faktycznie..... czyli przy drógim dzieleniu trzeba mianownik podzelić prze 256, usunąc młodszy bajt i w jego miejsce wpisac starszy a msb trzeba by wyzerowąć. tylko że wtedy powstaną przekłamania:/ nieduże i tylko po przecinku ale tego juz chyba nie przeskoczymy, gdyż brakuje dokładności Dodano po 12 chociaż jest sposub na to drógie dzielenie, zeby...
( PORTC & ~0x3f ) Operator ~ powoduje dopełnienie jedynkowe liczby 0x3f - zamienia bit 1 na 0 i odwrotnie. Wynik tej operacji to 0xc0 = 0b11000000 & realizuje iloczyn logiczny wartości w rejestrze PORTC i ~0x3f Oprócz tych działań tak jak napisałeś ustawiana jest jedynka logiczna na PC1 1 << PC1 oznacza przesunięcie logiczne w lewo 1 o...
Ewentualnie można zrobić przesuwnik napięcia (źródełko prądowe i rezystorek ) Przez rezystor płynie stały prąd wywołujący spadek napięcia na nim, na górny koniec rezystora podajesz napięcie z wymienionego już układu (nie wpływa ono na wydajność źródła prądowego) a na drugim końcu rezystora masz to napięcie przesunięte o Iźr*R w dół.
Spróbuj tak: uint32_t Reg, n; for (n=0; n!=31; n++) { Reg = (uint32_t)1 << n; //albo Reg = 1UL << n; } Być może to błąd. U mnie (gcc 3.4.3), kod jest "nadoptymalizowany" - ponieważ przesunięcia większe niż 32 nie generują nic nowego, to n jest zawsze traktowane jako bajt. W rezultacie argument po lewej stronie nie...
Nie potrzebne mi przerwania tych 2 timerów. Uzyskać chcę 3 jak najbardziej symetryczne kanały (falownik 3f). Przesunięcie jednego pwm-a w fazie mi nie przeszkadza. A dlaczego częstotliwość będzie inna? Przecież preskaler będzie taki sam...
1. shift=0, akumulator=0 2. if(zmienna1&(1<<shift)) akumulator+=(zmienna1<<shift) 3. shift++ 4. jesli shift < 64 - goto 2. 1. To nie jest napisane w "c", bo takie "goto" to jest w basicu! 2. Wyłącznie w edytorze "c" wygląda, że akumulator ma 128b i zmienna 8 - po kompilacji nie będzie tak pięknie. 3. Chyba powinno być: "2. if(zmienna1&(1<<shift))...
Może mi ktoś powiedzieć co zrobiłem źle (czego nie zrobiłem), że wynik po podzieleniu nie jest prawidłowy. Chciałem podzielić liczbę 401 (dziesiętna) przez 16 (dziesiętna), ale po wykonani procedury tylko wynik w części całkowitej jest poprawny. W części ułamkowej powinno być 0625, a jest 1. Bardzo proszę o pomoc. Do dzielenia użyłem procedurki którą...
...ale też tylko po to, żeby je od razu wygonić - wylądujesz na bruku, jeśli na nowy rok będziesz miał duże stany magazynowe. Ale zawsze jest to sposób na przesunięcie części PITa (w przypadku działalności osób fizycznych) o 4 miesiące (z grudnia na koniec kwietnia), co w dzisiejszych czasach jest też nie do pogardzenia, zwłaszcza, że przez ten czas...
Witam. Jak co 2 tyg mam wejściówkę z vhdla i wszystko szło dobrze do czasu napisania pewnego programu STRUKTURALNIE bo funkcjonalnie zrobiliśmy z kumplem. Zadanie polega na napisaniu strukturalnie rejestru 9 bitowego na przerzutnikach typu D. Czyli muszę zaprojektować zapewne 9 przerzutników typu D STRUKTURALNE. oprócz tego rejestr musi zapisywać informacje,...
Źle rozumiesz pojęcie atomowości przy dostępie do zmiennej. Instrukcja "v--" składa się z dwóch odwołań do zmiennej v: odczytu oraz zapisu. Dostęp jest atomowy, nie cała instrukcja zawierająca ten dostęp. To co zacytowałeś mówi mniej więcej tyle, że odczytując zmienną mającą 4 bajty kompilator użyje instrukcji ldr aby odczytać całość w jednej instrukcji,...
Przetestowałem rozwiązanie zaproponowane przez Kolegę nsvinc . Napisałem swój program testowy tak: adc_value=adc->dat; jest równoważny zapisowi: adc_value=*adc.dat; ?
Cześć, mam pytanie jeżeli chodzi o rejestry oraz taki zapis [syntax=cpp]DDRD |= (1<<PD1)[/syntax] Rejestr DDRD jest 8 bitowy i rozumiem, że na początku wygląda tak: 0000 0000 używamy operacji sumy bitowej. Nie rozumiem tylko zapisu przesunięcia bitowego w lewo (1<<PD1). PD1 jest jedno bitowe i ustawione na początku na 0 ? Przesuwamy 0000...
(at)GrzegorzKostka Przez jednych nie są, przez innych są - gdyby wszyscy ich nie lubili to by ich nie było :) Prosty przykład, żeby ktoś kto czyta ten wątek mógł sam zdecydować. Czy zapis poniższego kodu bez pól jest czytelniejszy? Dodano po 16 BTW, co do wypowiedzi Linusa - oni w kernelu stykają się z sytuacją o której pisałem na początku - wiele...
Problem wynika z reguł promocji typów występujących w języku C. W AVRGCC typ int jest 16 bitowy i do takiej wartości następuje promocja typu przy przesunięciu bitów w lewo. Powinno pomóc rzutowanie: [syntax=c]uint32_t mask = (uint32_t)((uint32_t)1<<(uint32_t)... Pozdrawiam Wojtek
Faktycznie przeoczyłem to przesunąłem dane o 2 bity i wszystko działa dziękuję!
Flaga carry (c) ustawiana gdy wynik sumy dwóch rejestrów - kolokwialnie mówiąc- nie mieści się w rejestrze 8-mio bitowym. To jest tzw. przeniesienie.
Jeśli chce powiększyć fragment przebiegu, to robię to metodami jakie sprzęt daje. Nie ma sensu zoomować cyfrowo przebiegu, nawet z 12 bitową rozdzielczością, skoro przebieg o amplitudzie 100mV na przykład mogę precyzyjnie(!) przesunąć i zobaczyć na np 100x większej czułości jego szczegół. Wszystko ładnie, pięknie jak tak badasz przebieg powtarzalny....
W symulacji AvrStudio to mi tez dziala, a jak wgram program do uC to pierwszy sposob dziala,a z przesunieciem bitowym nie dziala...To jest dopiero ciekawe...A wioskuje po tym, ze mam urzadzenie na magistrali I2C, gdzie za pomoca 3 zworek moge zmieniac adres i widze kiedy układ dziala, a kiedy nie .
No i widzie że Lip-ton Może jeszcze jakieś wskazówki Pewnie, cała gama wskazówek: podwieszonych tematach ?) Wolał bym pozostać przy opisie ( z poprawkami ) co mam, tylko właśnie mam tam jakiś błąd i nie wiem jaki? Jeśli traktować VHDL jak jeden z języków narodowych, to Twój opis prowadzi do nieporozumienia i anarchii społecznej. Ludzie poświęcają Swój...
Zmienna, która będzie od razu zawierać odpowiednią wartość - to jest najrozsądniejsze rozwiązanie w tym przypadku, przy okazji kompilator nie będzie musiał rozstrzygać przesunięcia o -1 (które może zostać zinterpretowane jako 255, co uniemożliwia zoptymalizowanie przesunięcia - stąd na pewno pojawi się pętla). Zawsze można też zastosować LUT (256 bajtów...
Dodaj do jedynki ul i powinno działać: 1ul<<i Domyślny rozmiar zmiennych to zapewne 16-bitów i do tego jeszcze standard mówi o zmiennych ze znakiem, więc twoja liczba (1<<cokolwiek) nie może być większa niż 32767. Jedynka na ostatniej pozycji oznacza liczbę ujemną, więc kompilator dokonuje dopasowania 16-bitowej liczby ujemnej do 32-bitowej...
A mógłbyś powiedzieć dlaczego tak akurat działa? Bo liczby wpisane na stałe do kodu mają domyślnie jakąś wielkość. Tą domyślną wielkością zawsze jest int, który dla AVR-GCC ma akurat 16-bitów. 16-bitowa liczba po przesunięciu jej o 16-pozycji będzie zawierać same zera. Mam też inne pytanie. Mam oto liczbę float e To co napisałeś powinno działać, jeśli...
Dodałem static i czas dalej jest taki sam Zarówno ze static inline jak i samo inline jak i bez dyrektywy inline. Więc czego powinienem użyć przy tej funkcji: [syntax=c] uint8_t przesuniecie_w_lewo(uint8_t liczba,int8_t oile) { return (oile>0) ? liczba<<oile : liczba>>-oile; } [/syntax] Samego inline, czy static inline?
Witam, język programowania C oferuje operację arytmetyczną powodującą przesunięcie bitowe, np: a | a<<1 | a<<2 | a>>1 ------+------+------+------- 0001 | 0010 | 0100 | 0000 chciałbym aby przesunięcie następowało w sposób cykliczny, bez zgubienia "1" czyli np 1000 << 1 = 0001; W AVR były do tego specjalne instrukcje w assamblerze,...
Operacja zmiany znaku polega na zanegowaniu wszystkich bitów i powiększeniu wartości o 1. Stąd 1 ma postać '0001', a -1 to '1111' ('0001' -> '1110' -> '1111'). Z poziomu języka C, spełniona jest równość (-x) == (~x + 1). To z takich prostych faktów. Co do przesunięcia w prawo, wyróżnia się zasadniczo dwa przesunięcia w prawo: logiczne (wolne miejsca...
Przy włączaniu diod jest po przesunięciu dodany OR po to żeby ustawić logiczną "1" w miejscu "0" które powstało po wcześniejszym przesunięciu jedynki w lewo. Gdy są gaszone diody, to nie ma takiej potrzeby gdyż przesuwana w prawo wartość rejestru jest po prostu z niego wysuwana. Obrazowo: 1. Rejestr PORTD w pierwszym kroku zawiera wartość: PORTD=0b00000000...
Przecież ten uC ma timer - wyśietlanie w pętli z opóźnieniami to zbrodnia. Tak mam TCC, ale wykorzystuję go do animacji. Właśnie w jego przerwaniu robię te wszystkie przesunięcia bitowe itd. Uznałem, że tak będzie prościej, jeżeli część funkcji wstawić w przerwanie, a resztę w pętli głównej. Kod wyświetlania jest skomplikowany, ale inaczej nie dało...
mam problem z przesunięciami bitowymi i nie wiem jak sobie z tym już poradzić. prosta funkcja, zamienia pierwsze cztery bity z ostatnimi czterema. edit: pomyłka
a jak zrobić przesunięcie w prawo? Dodano po 43 Poradziłem sobie w ten sposób; [syntax=c]row_buffer[0] = ((row_buffer[0]>> 1)|0x80);[/syntax]
dlaczego a=255, a nie 256 i b=2 ? Najpierw rozpiszmy dodatnią część liczb całkowitych. W Javie "int" może mieć wartości od -(2^31-1) do (2^31-1) czyli: od -2147483647 do 2147483647. Nie będę wyjaśniać jak zapisuje się liczby ujemne bo to się mija z celem na tym etapie. Zapiszmy więc dodatnią część liczb całkowitych: 111 1111 1111 1111 1111 1111 1111...
Ponieważ liczby ze znakiem są kodowane w U2 -2 w U2 to (...)111111111111110 po przesunięciu w prawo otrzymujemy (..)1111111111111111 co daje -1
Tak, ale autor chce do tego użyć przesunięcia bitowego właśnie. Wyraźnie to zaznaczył. Dokładnie tak, chodzi o przećwiczenie zagadnienia. Próbowałem napisać to co proponowałeś, Dżyszła. [syntax=c] #include<iostream> int main(void){ char tab[6] = {'1','2', '3', '4', '5', '6'}; char *p = tab; for(int i = 0; i < 6; i++){ std::cout << tab[i];...
Witam. Mam kawałek kodu z avr który chciałbym użyć w stm32 niestety moją pietą Achillesa są przesunięcia bitowe. Czy mógłby ktoś pomoc z przepisaniem tego na stm32 ? [syntax=c] #define OW_PIN PD5 #define OW_IN PIND #define OW_OUT PORTD #define OW_DDR DDRD #define OW_GET_IN() ( OW_IN & (1<<OW_PIN)) #define OW_OUT_LOW() ( OW_OUT &= (~(1...
Jakiego typu jest time.data? 64 bitowy bez znaku: Rozumiesz warning który Ci pokazał kompilator? Przeczytaj uważnie co piszę w pierwszym poście.
Nie testowałem kodu w całym zakresie liczb. Mój zbiór jest mniejszy. Jak widzisz jest tam przesunięcie 16 bitowe. Szacunkowo nie powinien nawet przekraczać 32 bit lub tylko troszke, zmienna "a" może mieć nawet w okolicach 17-18 bitów. Używam 32 bitowych bo 17-18 bitów się nie zmieści w 16. A mnożenie 24bit*16bit nie zmieści się w 32 bitach. Jak wyjdą...
A jaka duża ta liczba ? bo jak maks 10bit, to w prościutki sposób można to zrobić na jakiejs 51, bo wtedy pierw dzielimy przez 4 przesunieciem bitowym, a pozniej operacja DIV przez 15. Jesli to ma być podzielenie jakiegoś sygnały przez 60 (częstotliwość) to się znajdzie jakiś układ HC. Licznik z komparatorem. Pozdrawiam Boogie
zmienna |= _BV(numer_bitu); // ustawienie bitu zmienna &= ~_BV(numer_bitu); //zgaszenie bitu zmienna ^= _BV(numer_bitu); // przełączenie bitu BV(bit) to jest makro #define _BV(bit) (1 << (bit)) _BV(bit) jest zwyklum przesunieciem bitowym
Więc odpowiedź już masz wyżej. Mam taki problem, jak z tablicy liczbowej z uint8_t wyłuskać (przez złożenie) zmienne uint16_t? Rzutuj na int16_t i masz zmienne ujemne. To co pokazałeś niby działa tak samo, ale po co udawać, że chodzi Ci o mnożenie i dodawanie, skoro chodzi Ci o przesunięcie i bitowy OR? Zresztą to działa tylko "przypadkiem", bo tak...
Owszem do tego Parzystość: NONE, następnie jakie rejestry odpytujesz jeżeli jest nieprawidłowy to nie będzie odpowiedzi. Nie można odpytywać 10 rejestrów tylko 1 z przesunięciem 1 bitowym. Przykładowe rejestry z falownika LG LS100 jakie ja zawsze odpytuję przeliczone HEX i DEC Widać że HEX 00A nie czytam jako 10 tylko 09 Następnie czytasz jako INPUT-...
Ok, dziękuję wszystkim za chęć pomocy, właśnie rozwiązałem problem i chcąc oszczędzić czas przyszłym potencjalnym osobom błądzącym w tym samym rejonie postaram się trochę przybliżyć temat: 1. Pierwszą rzeczą, jaką zrobiłem było napisanie programiku działającego na zasadzie obliczania, a następnie sprawdzania sum kontrolnych. W internecie były dostępne...
Aaaaa, no to wiele tłumaczy :) Musisz zastosować przesunięcie bitowego. Twoja 16 bitowa wartość jest zapisana w dwóch rejestrach 8 bitowych. Czyli została podzielona na młodszy i starszy bajt. Gdybyś zrobił normalne przypisanie: rejestrH o osiem bitów w zmiennej doWysłania , to spowoduje że dostaniemy wartość: 1111111100000000 Zamiast (tak jak na początku):...
Witajcie moi drodzy Oto druga część mojego praktycznego tutoriala dla ośmiobitowego mikrokontrolera PIC18F2550 od Microchipa i programatora SDCC . W tym temacie omówię podstawowe operacje cyfrowego IO na prostych przykładach. Spis części (osobnych tematów) tutoriala Tutorial podzielony jest na osobne tematy i tutaj znajdują się do nich linki. Część...
Mimo upływu lat w dalszym ciągu lubię od czasu do czasu odświeżyć sobie w pamięci elektroniczne brzmienia lat 80tych, kiedy to po raz pierwszy miałem okazję usłyszeć „syntetyczną” muzykę pochodzącą z wielkich drewnianych „szaf” (automaty arcade) lub trochę mniejszych plastikowych pudełek zwanych komputerami osobistymi. W tamtym...
Witamy kolegę. Jak widać na naukę nigdy nie jest za późno. Cyfrowy świat nie jest tylko dla młodych. M. S. 52l. Nie znam narzecza arduino ale zapoznaj się z pętlą for, której przebieg "programuje" się na konkretną ilość razy. Np. [syntax=c]for(x=0;x<X;x++) { } //Rozpocznij od x=0; jeśli x<X ponownie wykonaj pętlę i zwiększ x o 1, w //przeciwnym...
bo operacje 8-bitowe są na ARM kosztowne eeeeee? Od kiedy? Przecież można czytać/zapisywać na ARM także pojedyncze bajty. Przejrzyj zestaw instrukcji bo bzdury gadasz. Czytać i zapisywać możesz. Ale jak wygląda mnożenie dwóch 8-bitowych zmiennych? Raczje trzeba najpierw znormalizować wartość w rejestrze. Nie wiem, czy jest w asemblerze instrukcja typu...
Wystarczy po stronie nadajnika rozbić 16bit na dwie liczby 8bit: Na tym etapie nauki warto dodatkowo zaznajomić się pojęciem unii, która pozwoli pozbyć się dodatkowych przesunięć i maskowań. Na tak prostym przypadku to może jeszcze przerost formy nad treścią, ale łatwo będzie można załapać o co chodzi, a później do większej porcji danych przyda się...
A czytałeś może noty katalogowe :?: Bo wygląda na to że w wyświetlaczu w ogóle nie ustawiasz trybu 4 bitowego. Na początek proponuje sterować linią RW i RS a nie podpinać RW do masy :idea: Po drugie w czasie inicjacji (w miejscu zmiany trybu z 8 na 4 bitowy) brakuje ci pętelki która powinna wysłać do wyświetlacza 3 razy ustawienia trybu 8 bitowego i...
Jakbyś zajrzał tam, gdzie Ci napisałem to byś wiedział co to oznacza :) NVIC->ISER to jest Interrupt set enable register w stmie zorganizowali go na zasadzie tablicy, przerwania: 0-31 uruchamia się w pierwszym jej elemencie 32-63 w drugim 64-67 w trzecim przesunięcie bitowe w prawo ma pewnie na celu "wstrzelenie" się w odpowiedni element tej tablicy,...
Takie operacje na bitach w strukturach nazywane są polami bitowymi. Jeżeli chcesz gdzieś zmieścić wartość 10 bitową, to przecież możesz przechowywać tę wartość w zmiennej o wielkości 16 bitów. Co do używania struktur z polami bitowymi i rzutowania na nie innych wartości, to zwróć uwagę, że są to elementy wrażliwe na kolejność przechowywania bajtów w...
Witam. Czy potrafi ktoś pomóc mi z zadaniem z assemblera? Mam do napisania program, który mnoży dwie liczby 5 bajtowe (40 bitów) szesnastkowe oraz podaje wynik również w tym systemie (tylko wynik będzie wtedy 80 bitowy). Problem polega na tym, że do tego mnożenie trzeba wykorzystać algorytm, ponieważ instrukcja mul nie działa dla tak dużych liczb. Mnożenie...