Samo przesuniecie jest ok, tylko, że 4 starsze bity zostały dopełnione zerami, a chciałbym żeby były jedynkami, jak to zrobić? Nie da się zrobić (po przesunięciu) sumy logicznej z czterema jedynkami na najstarszych pozycjach?
1. Kod można skrócić o połowę. 2. Stosuj sobie przesuniecie bitowe zamiast liczb szesnastkowych bo można się pogubić. 3. To nie C++ tylko C.
Czy takie całkowanie "trapezowe" ma sens w przypadku równomiernego próbkowania? Jest dokladniejsze, rownomierne probkowanie nie ma tu nic do rzeczy. Co do samego sposobu calkowania to wystarczy sobie wyprowadzic wzor na pole obszaru pod funkcja liniowa. Sklada sie to pole z sumy pola trojkata prostokatnego i prostokata czyli wzor podany powyzej. programowo...
Przede wszystim, jesli oczekujesz pomocy, musisz podac na jaki procek ten assembler. Po komendach widze ze nie jest to x86, czyli PCet. Byc moze chodzi o jakis mikrokontroler. Nie wiem czy wiesz, ale assembler nie ejst przenoscym jezykiem i nie ma jakies jego standardu - w przeciwienstwie do Ansi C czy pascala. Dalej nie wiem czy wiesz, ze nawet jesli...
mozesz mi tylko wytlumaczyc jak dziala ta petla while a raczej to w niej bo jakos nie moge tego rozszyfrowac :] Moze w ten sposob bedzie bardziej czytelne: while(rozmiar >= (1 << i)){++i;} (1 << i) to po prostu przesuniecie bitowe (przesuniecie "1" o i bitow w prawo). Aby wiedziec, ile bitow wystarczy do zapisania...
powiedz prowadzacemu zajecia, ze nauka ahdl to czysta strata czasu; a moze lepiej nic nie mow ... :) /.../wydaje mi się że dobrze/.../ troche bledow jest :) 1. variable A S powinno byc zadeklarowane jako 5 bitowe DFF, a obliczane tak samo jak powyzej: S[] = ( 0, S_ab[] ) + ( ... 4.wyj[]=S[] div B"0100"; ahdl nie pozwoli ci na dzielenie niczego poza...
Napisz z jakiego kompilatora korzystasz i na jakim poziomie optymalizacji kodu wynikowego. Jeśli chodzi o standardy C to ISO99 mówi o ujemnym przesunięciu bitowym " the behavior is undefined" i właśnie dlatego lepiej unikać takich operacji. Jeśli koniecznie musisz być przygotowany na ujemne przesunięcia może utwórz własną funkcję: [syntax=c] uint8_t...
Jedyną "trudnością" jaką musisz pokonać to to, że przesuwać tak da się tylko w prawo :)
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 to jeszcze lepiej - wzór na zastąpienie prawostronnej jedynki zerem: x = x & (x - 1); co można też zapisać tak: x &= x - 1;
operacje mnozenia i dzielenia dumnie opisane jako przesuniecie bitowe lepiej zrealizowac jako przesuniecie bitowe ;) polecenie Shift, szczegóły w helpie... inne propozycje jak bede mial wiecej czasu ;) Pozdrawiam
Dzięki za pomoc BlueDraco, podziałało 1ul << x : ) , nie przyszło mi na myśl że przesuniecie bitowe działa tylko dla 16 bitów, ciągle człowiek się czegoś uczy. Jeszcze raz dzięki i pozdrawiam!.
wlasciwie te dwa sposoby to identyczne sa :D... tylko oczywiscie, jesli chodzi o iplementacje, to lepiej stosowac przesuniecie bitowe (pomnozyc przez 2^n to to samo co przesunac liczbe o n miejsc w lewo... dzielenie w prawo :)), gdyz procesor szybciej to liczy :)...
Cześć, mam przykładową tablicę znaków: [syntax=c] char tab[6] = {'1', '2', '3', '4', '5', '6'}; std::cout << tab[0] << std::endl; // wyswietla 1 [/syntax] czy można na takiej tablicy zastosować operacje przesunięcia bitowego? Jeśli tak, to w jaki sposób to zrobić? Chciałbym, żeby pierwszym elementem tablicy po zastosowaniu przesunięcia bitowego...
Tez mi sie wydaje dziwne ze nie mozna tak zrobic ale niestety tak jest.Zrozumielem dokladnie o co ci chodzilo jako ze kiedys sam lamalem sobie glowe nad asmem ale w razie jakby chciec to zrobic w ten sposob lepiej jest dac przesuniecie bitowe bo bedzie ono efektywniejsze.
Tak na wszelki wypadek mozesz poczekac wiecej niz 250 ms (sugeruje poczekac 750 ms tyle co dla DS18S20).Moja uwaga co do samego programu: nie znam sie na bascomie ale nie ma tam przypadkiem czegos takiego jak przesuniecie bitowe >> i << ? Przeciez zarzynasz ten biedny procek dzieleniem i mnozeniem arytmetycznym !
Witam Muszę sprawdzić, czy zawartość rejestru jest większa, czy mniejsza od pewnej stalej (z zakresu 110-120). Zakres wartosci sprawdzanego rejestru rozciaga sie od 0 do 255. Zrobiem to korzystajac z subi, ale w wyniku zawsze dostaje wartosc ujemna i brpl (branch if plus), czy brge (branch if greater) nie dzialaja tak jak ja chce. Rozchodzi sie o to,...
żeby po samym naciśnięciu switcha Co Masz na myśli ? By zmienić kolejność przesuwania bitów Musisz albo nacisnąć drugi raz ten sam przycisk, lub też nacisnąć inny, ewentualnie jeśli skończy się przesuwanie w lewo, nastąpi przesuwanie w prawo. Jeśli ma być to ten sam przycisk to Musisz dodać informację, która będzie widoczna dla podprogramu, który z...
Ale tablica potrzebna do wyznaczenia wartości elementów ciągu ma rozmiar tylko taki, który element ciągu chcesz poznać. Jak chcesz 50-ty, to potrzeba tablicy 50-elementowej typu long long. Co więcej - po wyznaczeniu wartości elementu ciągu można śmiało ją usunąć. W algorytmie sita nie ma możliwości efektywnego skrócenia wielkości tablicy o więcej, niż...
Co do teorii mamy 24 bitowy kolor czyli w przelozeniu na bity RRRR RRRR GGGG GGGG BBBB BBBB a tu 16 bitowy czyli RRRR RRGG GGGB BBBB czyli literka R odpowiada za wartosc koloru czerwonego (np. 1011 0110 - czysty przyklad z kalosza ciagniety) G i B analogicznie - z takiego czegos sklada sie caly kolor Skupmy sie na R (reszta analogicznie) w 24 bitach...
Chcialbym zauważyć kolego DR.Vee, że twój algorytm choć poprawny, to jednak nie jest optymalny. Spróbuj nim obliczyć np NWD(100000000, 1) :) Lepiej użyć jednego z nastepujacych algorytmow NWD(a,b) := { jesli ktoras z liczb jest rowna zero, zwróć tą drugą, w przeciwnym wypadku zwroc NWD(min(a,b), max(a,b) modulo min(a,b))...
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...
Wiem że jest to zależne od typu mikrokontrolera. Mnie interesuje AVR.. a w jakich prockach przesuniecie w lewo dodaje 1? 4\/3!!
jak sie nie myle to jest przesuniecie bitow w lewo w pierwszym przypadku o jedna pozycje w drugim o dwie
Na pewno będzie szybciej 3 razy mnożyć niż 4 A jeszcze szybciej dwa razy mnożyć i wykonać przesunięcie bitowe w prawo, bez jakiegokolwiek dzielenia.
Tony, Dziekuje za odpowiedz. Bledy w ISE sa malo intuicyjne. ISE WebPack nie wystarczy, musze ISE Fundation zalatwic :(. Grave, Licze sie z takim czasem. Synteza pol dnia, implementacja pol dnia i akurat z pracy wroce. ;) Potrzebuje czegos naprawde ogormnego - implementuje siec neuronowa :). W chwili obecnej chce sprawdzic jaka najwieksza architekture...
Hunterhouse ten sposób z liczeniem liczby modulo jest genialy :) Sam na to wpadles?? Na koncu jest jeszcze obliczany pierwiastek,tez to jest dosc czasochlonne dla procka , zastanawiam sie czy na niego nie ma podobnego sposobu :) Czyli beta przyjmuje wartosci od 0- 31, i zmienia sie w zaleznosci od k ,ale caly czas w zakresie 0-31 . Jak dokladnie obliczone...
Zrobilem kilka prostych doswaidczen i moje wnioski to: 1) dlugosc hasa nie wplywa w zaden sposob na wielkosc pliku wynikowego (nawet przy znacznych roznicach dlugosci hasel plik wynikowy ma rozna dlugosc co do bajtu) --->haslo raczej nie jest zpisywane w pliku rar 2) Jest roznica dlugosci miedzy plikiem wynikowym spakowanym bez hasla i z haslem --->...
w pierszym przypadku dla rozwinięcia i czytelności - przesunięcie bitowe w lewo - shl - powinno się znaleźć ;)
1.Masz błąd w kodzie Zauważ, że jak czujnik wyśle wartość 100,200,300,400,505 to wszystkie diody się zapalą i tak zostanie. PORTC musisz zerować przed każdym zapaleniem diod, bo inaczej one nie zgasną dopóki W nie przyjmie wartości z zakresu 506..1023. 2.Lepiej gdyby kod był taki Do W=Getadc(5) Portc= &B00000000 //ustawiamy wszystkieg diody na 0 Portc.4=(W/512)...
Witam muszę nauczyć tworzyć rejestry n bitowe z przerzutników typu D i T z funkcjami przesunięcia w lewo lub w prawo, zapis, i np suma. Wszyto ma być w zapisie VHDL walczę już z tym od 2 tygodni mam problem z odwzorowaniem wszystkich sygnałów dla przykładu rejestr 5 bitowy na przerzutniku D z funkcjami zapis , xor, przesunięcie w lewo przyjąłem y1(SW7)...
Procedura odczytu wartości jest całkiem zła, a ustawień przetwornika nie pokazałeś. Obecnie masz coś takiego: czytasz bez potrzeby w kółko nieważną wartość z ADC, a czytanie przerywasz po ustawieniu bitu gotowości, który być może został ustawiony już po odczytaniu nieważnej danej. Nie rozumiem dlaczego bit "DONE" miałby być ustawiony po odczytaniu...
Nie wiem dokładnie jak to działa... Działa to tak: Przetwornik w LPC1768 na ustawione próbkowanie na wartość np. 100,0 kHz. Ustawiam ten odczyt w pętli for (;;), która wykonuje się 20 razy (oznacza to liczbę próbek). W rezultacie daje to okno częstotliwościowe równe 5,0 kHz, czyli że w tym oknie zmieści się dokładnie 1 okres przebiegu o częstotliwości...
zamienić moją zmienną na system dwójkowy Piszesz tak: "Integer.toBinaryString(a)". Tu masz przykład do zabawy: 255<<3 = 2040 11111111<<11 = 11111111000 255>>3 = 31 11111111>>11 = 11111 255>>>3 = 31 11111111>>>11 = 11111 Zacznij od zrozumienia przesunięć bez przypisania, a zrozumiesz o co chodzi. Różnica między...
Przeanalizowałem kod z przykładu pobranego ze strony NXP "Sample Code ADC" (kod niestety nie działa... ;/) i z dokumentacją napisałem kod, który zatrzymuje się w funkcji int ADC_GetData (uint8_t ChannelNumber) przed linijką [syntax=c]LPC_ADC->ADCR |= (1<<ChannelNumber);[/syntax] i nie wiem dlaczego tak to się zachowuje :?:. [syntax=c]#include...
Dzięki za chęć pomocy, oto program który wysłałem na maila: #define F_CPU 1000000UL // oscylator wewnetrzny AtMega8 #include <avr/io.h> #include <stdlib.h> #include <util/delay.h> #define WE 5 // przypisanie linii 1-Wire dla pinu PC5 #define PORT_1WIRE PINC #define CLEAR_1WIRE DDRC&=~_BV(WE) // stan niski magistrali #define...
Witam, problem tkwi w wyświetleniu temperatury na LCD. Czujnik działa w trybie 12 bitowym. Szczytuje pierwsze 12 bitów z pamięci scratchpada, sprawdzam czy temperatura jest + czy -, a następnie dokonuje konwersji temperatury na string. Na wyświetlaczu pokazują się jednak dziwne rzeczy. Użycie funkcji typu sprintf odpada (zajmuje za dużo miejsca). Konwersja...
Witam. Od niedawna uczę się ARMów i mam problem. Kiedyś napisałem funkcję do obsługi ds18b20 na AVRy, teraz chciałem ją zaimplementować pod LPC2142 w środowisku Keil i niestety mi nie wychodzi. Poniżej przedstawiam kod źródłowy już zmodyfikowanej funkcji pod LPC. ds18b20.h #include <stdio.h> #include "lpc214x.h" #define WE 20 #define...
Nie wiem czy dobrze wybrałem dział, ale nie wiem czy błąd tkwi w oprogramowaniu czy w podłączeniu :D Na razie podłączałem jeden czujnik do portu D0 docelowo mają być dwa czujniki temp jeden przy całym układzie a drugi dalej by móc mierzyć temp na zewnątrz, wyświetlacz 8-segmentowy razy 2, temp będzie mierzył od 0 do 99 stopni, za pomocą przełącznika...
jak zadajesz takie pytanie, to zawsze podaj: -jaki procesor -ile ew. masz miejsca w pamieci (na tablice itd.) -raczej podawaj dokladnie problemy, bo to jest dosyc ogolne... -jaka ma byc dokladnosc tego jest cos takiego jak fixedpoint math - to taka matematyka na liczbach ulamkowych z uzyciem liczb calkowitych. Polega to na tym, ze zamiast...
Program przepisałem całkowicie z http://student.agh.edu.pl/~coni/avr_1wir... zmieniłem tylko port na PC5. Najpierw podłączyłem dobrze i otrzymywałem takie coś: -16.1\0x00\0x00\0x00-16.1\0x00\0x00\0x00... No w moim mieszkaniu to tak ok 24°C. Potem wyciągnąłem...
Witam! Od jakiegoś czasu staram się oprogramować żyroskop, który znajduje się w zestawie rozwojowym Stm32f3-discovery. Jest to żyroskop L3GD20. Komunikuje się z uC poprzez interfejs SPI (narzucone przez konstrukcję zestawu). Generalnie komunikacja działa, ale bardzo chaotycznie. Przykładowo: - na zapytanie o rejestr WHO_AM_I dostawałem kiedyś odpowiedź...
Dzielenie zmiennej int16 na dwie mniejsze możesz zrobić tak:[syntax=c]int 16_t zmienna, zmienna1; int8_t mala_zmienna, mala_zmienna1; mala_zmienna = zmienna >> 8; //przesuniecie bitowe skopiuje 8 bitów starszych mala_zmienna1 = zmienna; // skopiuje tylko 8 bitów najmłodszych zmienna1 = (mala_zmienna << 8) + mala_zmienna1; [/syntax]
Witam ! Przyklad dla zmiennej 8 bit unsigned char dana=0; //deklaracja zmiennej 8bit unsigned char a,b; //wartosci odczytane z przetwornikow signed char x; //roznica dana=dana<<1; //przesuniecie bitowe w lewo if( (a-b)>x) //sprawdzenie warunku dana=dana|1; //wpisz "1" Mysle ,ze o to chodzilo. Pozdarwiam ogr
Witaj [syntax=c]#include <avr/io.h> // jak tego nie dodam to wywala błąd, tak powinno być ? [/syntax] Dołącza plik nagłówkowy do sterowania wyjściami/ wejściami dla mikrokontrolera AVR. [syntax=c]for(i=0x80;i;i>>=1){ //tej pętli nie rozumiem, jak to może działać ? : )[/syntax] Pętla działa dopóki i jest prawdą, czyli jest różne od zera....
Witam. Skoro tak to zastosuj układ CD40194. Pozdrawiam.
Dokumentacja mikrokontrolera EM78P153S znajduje się [url=http://www.emc.com.tw/eng/database/... Problem niby trywialny. Mam taki kod, realizowany w przerwaniu od timera: [syntax=asm]rlc W1_POM rlc W1 rlc W2_POM rlc W2 rlc W3_POM rlc W3 rlc W4_POM rlc W4 rlc W5_POM rlc W5 rlc W6_POM rlc W6 [/syntax] W1...W6 i W1_POM...W6_POM...
Rejestry GPIOx->BSRRH i GPIOx->BSRRL to "połówki" rejestru BSRR opisanego w manualu, a więc wpisywanie tam wartości większych niż 16-to bitowe nie odniesie żadnego skutku. Zobacz czy w nagłówkach nie ma albo dostępnego rejestru GPIOx->BSRR (bez ...L albo ...H) albo odpowiednich makr GPIO_BSRRx_Bx_xx (z ...L... lub ...H...). W ostateczności w liniach...
Witam. Mam problem z przesunięciem bitowym. Mam taki kod: long int wire_temp(void) { long int zmienna_w; int temp1, temp2; temp1 = 0xCBCF; temp2 = 0xEBAA; zmienna_w = ((temp2 << 16) | temp1); return zmienna_w; } i wynik działania jest błędny. zamiast 0xEBAACBCF jest 0xFFFFCBCF. Widać, że dwa najstarsze bajty się...
Mnożysz lewą cyfrę przedstawiającą wartości dziesiątek x10 i dostajesz 10100 binarnie mnożenie warto zrealizować jako odpowienie przesunięcie bitowe, gdy mnożysz x10 to tak jakbyś mnożył x8 i mnożył x2 27x10 = 27x(8+2)= 27x8 + 27x2 = 27x2^3 + 27x2^1 czyli wynik mnożenia dowolnej liczby x10 jest rowny sumie jej przesuniecia w lewa o 3 bity i przesuniecia...
a czemu dwa razy na bcd?
Widzę tam trochę dziwne założenia: W definicjach masz podane, że wykorzystujesz piny D3-D6, co prawda kolejno, ale nie na granicy nibble, natomiast w kodzie: [syntax=c] // Funkcja wysyłająca 4 bity danych do wyświetlacza LCD void Send4BitsLCD(uint8_t data) { PORTD &= 0xF0; // Wyczyszczenie starszych 4 bitów PORTD |= (data & 0x0F); // Ustawienie...
for - pętla, tak jak napisałeś bit= (buf>>j)&1; Operacje bitowe: ">>" przesuniecie w prawo,"&" operacja AND-owania. Poczytaj o operatorach w c i będziesz wiedzial
Napisałem zanim się domyśliłem - dlatego wykasowałem pytanie o optymalizację :) Takie rzeczy ćwicz w Cmaniaku, bo kod kompilatora dla AVR może robić różne uproszczenia.
Nie znam składni pascalowej, więc napiszę w pseudokodzie: a = 10000011; b = 10000000; for (i=0;i<8;i++) { if ((a and b) == 0) then tablica[i] = false; else tablica[i] = true; przesuń "b" bitowo w prawo; }
Czy mógłbyś napisać dlaczego 0x38 i 0x39 ? Bo adres musisz bitowo przesunąć o jeden w lewo (czyli przemnożyć x2) ze względu na bit R/W, który znajduje się na końcu transmisji.
Jak piszesz: if (PINB7!=0) to tak jakbyś napisał: if (0x80!=0) Wynika to z faktu że PB7 to makro odwołujące się do nogi procesora a dokładnie do bitu rejestru który trzyma stan tej nogi. Dlatego nie działa. Następne co cię trapi: 1<<PB7 Tak to przesunięcie bitowe. Więc jeśli piszesz: if (PORTB & (1<<PB7))...
Tu masz troszkę prościej, z użyciem operacji przesunięcia bitowego (krótszy kod, łatwiejsza zmiana prędkości linijki led) Dim Led As Byte Dim Kier As Bit Config Portb = Output 'wszystkie porty b jako wyjścia' Portb = &B00000000 'wszystkie porty b w stanie niskim Config Portd = Output 'wszystkie porty d jako wyjscia Portd = &B0000000 'wszystkie porty...
Dzielenie zrobiłem jako przesunięcie bitowe , więc teraz chyba na pewno nie będzie problemów z atomowością. Dziekuje za pomoc wszystkim.
Przesuń w prawo o 2 bity.
Jedyne, co mi przychodziło do głowy, to przesunięcie bitowe w prawo i tak właśnie napisałem, jednak albo moja odpowiedź była zbyt ogólnikowa, albo nie o to chodzi wykładowcy. To jest ośmiokrotne przesunięcie bitowe w prawo. Ten sam efekt uzyskamy, odrzucając cały młodszy bajt. Jeżeli zaokrąglenie ma być zgodne z zasadami arytmetyki, to gdy młodszy...
Ale projektuję nową wersję swojego urządzenia i nie wiem czy lepiej będzie stłumić sygnał dzielnikiem hardware-owo czy software-owo. Zwykle lepiej jesty wykorzystywać pełną rozdzielczość ADC, a potem ew. robić przeliczenia softwarowo. Czyli tak jak ci kolega doradzał - przesunięcie bitowe i tyle. Jeśli z 24 bitów robisz 16 to nie ma siły - jakoś te...
nieprawda przesunięcie bitowe "zwróci" liczbę 16 bitową
To po twojej stronie masz problem, zmienne pewnie są 32bitowe a ty czytasz 16bitowe rejestry tak ustawiłeś w Logo. Zmień na Dword i zrób przesunięcie bitowe. Większość liczników odczytuje się jako Real 32 bit lub wodomierze 64 bit
Chciałbym zwrócić uwagę na odczyt wyniku konwersji: [syntax=c] ... uint16_t ConversionResults[ADC_CHANNELS]; // zmienna 16bitowa ... ADMUX = 0x60; // AVCC with external capacitor at AREF pin, left adjust result; // left adjusted, czyli przesunięty o 6 bitów w lewo !!! ... static const uint8_tChannelMUX[ADC_CHANNELS] = {0x61, 0x62, 0x63}; // włączony...
<< - przesunięcie bitowe w lewo (na polski - pomnożenie razy 2) >> - przesunięcie bitowe w prawo (na polski - podzielenie przez dwa do części całkowitej) ~ - negacja logiczna (NOT) & - iloczyn logiczny (AND) *x - wskaźnik na element (podczas definiowania; podczas użycia - jest to wartość elementu wskazana przez wskaźnik)
To jest przesunięcie bitów w prawo. Czyli bitowo 0b00010000 >> 1 da 0b00001000 . Często użyte jako optymalizacja w kodzie zamiast dzielenia (chociaż nowoczesne kompilatory powinny to robić same) gdzie >>10 będzie równoznaczne z /1024. Gdybyś policzył 5115000/4995 to byś to zauważył.
Poniżej przedstawiam działającą procedurkę jaką sobie napisałem do obliczania CRC16 w komunikacji po ModBusie z falownikami. Nie wiem tylko pojęcia czy algorytm obliczania dla ModBus jest jednakowy np z tym dla czujników dallasa z 1-wire ale CRC to CRC :) ;crcl, crch - zmienne zdefiniowane w wewnętrznej RAM ;-----obliczanie CRC16----r0, r1, acc----...
To co chcesz osiągnąć robi się poprzez tzw przesunięcie bitowe i na twoim przykładzie wygląda to tak: [syntax=csharp] short wynik = (short)((147 << 8) | 7) [/syntax]
Jesteś pewien, że działa prawidłowo? Domyślnie kompilator wpisuje wartości stałe do jak najmniejszego możliwego typu, czyli stała "1" będzie uint8_t (dla procesorów 8-bitowych). Przesunięcie w lewo "ośmiobitowej jedynki" o wartość większą niż 7 w wyniku da 0. Najlepiej będzie tak jak napisał kol. BlueDraco, tylko, żeby bezpośrednio zamienić to co masz...
Racja - ale myslałem ze tam stała moze byc 16 bitowa. To nie chodzi o to ilu jest bitowa, tylko jaka ma "szerokość". Stały operand w takich instrukcjach może być 8-bitową stałą przesuniętą o dowolną ilość bitów. Tak wiec 0xff000000 też może być zawarte w takiej instrukcji, ale już 0x80000001 - nie. Dodatkowo ten 8-bitowy operand może być też w formie...
Dzieki wielkie, ustawilem przesunięcie bitowe tak jak powiedziales i zadziałało :)
chyba w AVRach w takim razie w adresie ostatnia cyfra 0 oznacza ramkę "write", a ostatnia cyfra 1 oznacza "read", czyli adres 0x62 w nocie SCD41 oznacza 0xC4 dla nadawania i 0xC5 dla odbioru Nie w AVR tylko ogólnie w I2C. Najmniej znaczący bit określa typ operacji zapis/odczyt. 7 bardziej znaczących bitów to adres urządzenia. Autorzy not urządzeń I2C...
Bo zmienna BOOL jest 8-bitowa. W pierwszej kolejności konwersja na WORD a następnie przesunięcie.
Nie pomyślałeś ;-( Sprawdź: 1. co daje przesunięcie bitowe liczby 0 o 5 pozycji 2. jak działa operator bitowy | lub |= Albert
TCCR0 = _BV(x<<CS00); Źle użyłeś makra _BV. _BV(x) jest równoznaczne z ( 1 << x ), czyli w Twoim przypadku próbujesz wykonać podwójnie przesunięcie bitowe. Jeżeli x = 3 (CS00=0): _BV(3<<CS00) = _BV(3) = (1<<3) = 0b00001000 czyli TCCR0 będzie równe 0b00001000 . Innymi słowy, próbujesz ustawić bit tylko do odczytu, zamiast...
Dzięki za sugestie. Znalazłem błąd. Błędna była ustawiona kolejność portów. W moim przypadku największym utrudnieniem w programowaniu jestem na tym etapie sam ja. Przesunięcie bitowe, które wskazał Freddie Chopin również było błednie przeze mnie ustawione, zmieniłem i wszystko funkcjonuje jak powinno.
Witam Mam następujący kod: [syntax=c] int main() { DDRD = 0xff; PORTD = 0x00; DDRB = 0x00; PORTB = 0xff; while(1) { if(!(PINB & 0x02)) { PORTD <<= 1; PORTD |= 1; _delay_ms(100); } if(!(PINB & 0x04)) { PORTD >>= 1; _delay_ms(100); } } } [/syntax] Oczywiście na początku są includy do io.h i delay.h - mam podlaczone diody pod port D...
Nie, ale komunikacja jest bardzo prosta. https://obrazki.elektroda.pl/7419975100_... To samo z SM2185: https://obrazki.elektroda.pl/2023822600_... Porównaj obrazki, wygląda na to, że się zgadza. (at)lesnyziutek może jest jakieś ewidentne niedopatrzenie lub popełniony błąd, np. czy podczas testów masz uruchomiony sterownik...
To przesunięcie bitowe nie działa jak powinno ... Tz wychodzi jak by przechodziło tylko od T11 do T15 i w T15 się zatrzymuję... Jak to zrobić w pętli ? Tz T1,T2,T3,T4,T5,T1,T2 ...itd ?
Kłopot w tym, że ja wcale nie rozumiem tego fragmentu kodu: [syntax=c] if ((przechowuje = ((przechowuje << 1) & 0x0F) | ostatnia) == 1) { keypin_pressed = 1; } [/syntax] operator "&" - bitowa koniunkcja (AND), << przesunięcie bitowe. Wartość zapisana w przechowuje musi być możliwa do zapisania w formie zero jedynkowej, aby można...
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. Jeśli...
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....
Może mało eleganckie rozwiązanie, ale: 1. Skopiować zmienną Kontrola_produktu do zmiennej tymczasowej. 2. Użyć rozkazu przesunięcia bitowego w prawo na zmiennej tymczasowej. Przesunięcie o N bitów, gdzie N to zmienna Miejsce_kontroli. Wynik zapisać do zmiennej tymczasowej 3. Użyć rozkazu iloczynu bitowego z 2 zmiennych: zmiennej tymczasowej i liczby...
Przesunięcie bitowe jedynki w lewo o PD1 miejsc. A PD1 = 1 czyli : 0 0 0 0 0 0 0 1 << 1 = 0 0 0 0 0 0 1 0
Ale mi zależy na bardzo uśrednionym wyniku. Mierzę temperaturę średnią w odcinku 5 minut. Nie zależy mi na szybko zmiennych odczytach. Od siebie tylko dodam, że w tej Xmedze ADC posiada funkcję uśredniania wyników. Wystarczy wybrać liczbę pomiarów i przesunięcie bitowe wyniku.
uwaga techniczna - przy dzieleniu przez potęgę dwójki, lepiej jest robić przesunięcia bitowe, gdyż zajmują wiele wiele mniej operacji. http://www.atmel.com/dyn/resources/prod_... tutaj możesz zobaczyć na pierwszej stronie ile co zajmuje operacji. Przesunięcie bitowe to jedna instrukcja... :)
Możesz użyć przesunięć bitowych shl i shr. Poczytaj: http://pl.wikipedia.org/wiki/Przesuni%C4... i tutaj: http://doctor.programuj.com/operatory-bi... Nie napisałeś nawet w czym kodujesz! Pozdrawiam!
Prawie tak, jak myślisz, z tym że nie masz co zamienić liczby na binarną, bo już taką masz w komputerze. ;) Wyznacz resztę z dzielenia przez 2, dodaj ją do sumy, wykonaj przesunięcie bitowe w prawo o jeden. I tak 32 razy. Teraz zapisz to sobie w kodzie.
Nie wiem też po co to dzielenie przez 16 w kodzie, przecież wystarczy przesunąć zmienną o 4 bity w prawo, a kod zmaleje w oczach :) Jeśli chodzi o C to przesunięcie bitowe liczby ujemnej jest niezdefiniowane w standardzie. Albert
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ą.
Dzieki za pomoc udalo mi sie zrobic dzialaja przyciski, uP reaguje na nie, ale mam pytanie o ta instrukcje: if((PINB&(1<<PB0))==0) PINB oznacza pine portu B ale nie pisze jaka tylko ogolnie? &-wskaznik czyli w tym momencie jak dziala? 1<<PB0 -przesuniecie bitowe o 1 bit w lewo to wiem, ale dlaczego przesuwamy?Po co to przesuniecie?...
Witam ponownie, Już praktycznie panuję nad tym programem, robię na nim różne eksperymenty "naukowe" :). Ale jednej rzeczy nie rozumiem i nie znalazłem nigdzie wytłumaczenia. Chodzi o ustawianie bitów przez przesunięcie bitowe w lewo. Tu fragment, który mnie niepokoi: [syntax=c]#define DHT11_INPUTPIN PC4 . . . . . DHT11_DDR |= (1<<DHT11_INPUTPIN);...
U mnie nie działa... Sam nie wiem, podobno można to w łatwy sposób rozwiązać sprzętowo. No nic, będę dalej próbował. Co rejestrów to jakoś tak się nauczyłem, a jak mam większą liczbę to z pomocą przychodzi mi kalkulator:) Chociaż pewnie przesunięcie bitowe jest łatwiejszą operacją. Dzięki z pomoc. Pzdr
No ale to już chyba taki szczegół...przesunięcie bitowe, a raczej rotacja bitów zamiast ustawiania sbi na "chama". To już jest taki zabieg kosmetyczny chyba, narazie wolałbym pogłówkować się nad przerwaniami, jak wdrożyć je w kod. Chyba, że czegoś nie zrozumiałem :) Ale i tak dzięki za podpowiedź, bo na pewno skróci to mój kod.
Sorki błąd PWM jest 8 bitowy czyli max OCR0 = 255 Czyli nie wiem czy ja w tej chwili dobrze kombinuje jeżeli nie to mnie popraw wypelnienie>>4 ma być zamiast 4 wpisane 2 jako przesunięcie bitowe w prawo
Czy błędnie obliczona wartość wilgotności może mieć związek z tym, że w pewnym momencie przesunięcia bitowe prowadzone są na liczbie ujemnej -38 ? Jeśli przesunięcie bitowe byłoby robione w C/C++ to nie spodziewałby się problemów ale w Lua to ciężko stwierdzić. Chyba najprościej będzie Ci sprawdzi na piechotę na jakimś przykładzie np. zadeklaruj wartość...
<<1 to przesunięcie bitowe w lewo, czyli pomnożenie przez 2. Używa się go w w/w przypadku, bo adres w pamięci programu dotyczy danych 16bit, a odczyt zawartości poprzez adresowanie rejestrem Z i instrukcją lpm jest 8bit. A zadałem takie pytanie, bo mozliwe, że w tym makro jest to już uwzględnione.
komunikat jest jasny - nie można przesuwać bitu o niecałkowitą liczbę. To tak jakby w sali było 37.4 osoby ;d (ADCH<<2*2.56) poczytaj o priorytetach operatorów w C. Mnożenie ma większy priorytet niż przesunięcie bitowe więc chcesz przesuwać o 5,12 bita w lewo
poziom:=cisnienie* 10.19716; (*wartosc rzeczywista - przeskalowanie ciśnienia na wysokosc slupa wody*) poziomCentymetry:=TRUNC(poziom*1... (*poziom w centymetrach+ odcięcie czesci po przecinku*) 1. czyli poziomCm = cisnienie * 1019.716, spodziewasz się wartości od 0 do 1000 cm, więc cisnienie < 1.0 bar 2. ciśnienia...
operacje bitowe przesuniecie mikrokontrolery bitowe przesunięcia bitowe
przekładnia ślimakowy falownik demontaż lewarek ariva obrazu
schemat modułu indesit rb3200 schemat
Jak podłączyć kuchnię elektryczną do prądu? Czy numer VIN jest wpisywany do BSM w Peugeocie 308?