Na AVR'ach typ int ma 2 bajty, a wszystkie literały liczbowe domyślnie są typu int. 34816 pewnie normalnie powinno by powodować warning, gdyż komu chciało by się pisać 34816U żeby zaznaczyć, że literał ten ma być int'em bez znaku? Ten warning mogli jawnie wyrzucić, jednak w przypadku operacji 17*2048, jeśli obie liczby traktować jako int ze znakiem,...
Słabo wiedzę ten procesor jeżeli pytania są na takim poziomie. Może jakaś literatura o architekturze procesora/komputera najlepiej taka z lat 70/80-tych XXw bo tam rozwiązywano takie problemy. Oczywiście można próbować stworzyć opis ALU zadając pytania na forum ale chyba podręcznik nie jest celem dla forum. Co do problemu Jeżeli rejestr ma oddzielne...
Witam. Dzięki Łuk_F, takiej właśnie podpowiedzi potrzebowałem. Teraz widać czarno na białym, który bit i jak mi się zmieni na 1 i na 0. Wielkie dzięki. A jeszcze jedno naiwne pytanko jak zrobić w C/C++ kawałek który podsunie mi pomocniczą zmienna z np 1 na n-tej (zadanej) pozycji aby poddać to operacji OR?? Piszę,że w C/C++ ( żeby Tdv się już nie denerwował...
1. Eliminacja niepotrzebnych skoków tu i tam. Da się to zrobić inaczej - patrz CPSE, SBIC, SBIS. 2. Brak podstawy czasu - impulsy nie będą zawsze równe w czasie. Użycie licznika bardzo wskazane. 3. Brak synchronizacji zmiany stanów na portach - możliwe przesunięcia fazowe. 4. Skąpe komentarze. Za dwa dni nie będziesz wiedział co, jak i dlaczego tak.
1. Podstawowa ramka rds to 104 bity podzielona na 4 bloki po 26 bitow. Te bloki są podzielone na 16 bit danych i 10 korekcji błędów ex-or przesunięcie. Każdy z 4 bloków ma inne bity przesunięcia, blok 3 ma 2 rodzaje bitów przesunięcia, zależy czy idą dane typu A czy typu B. Mamy początkowe słowo korekcji błędów = 00h sprawdzamy poszczególne bity danych....
Zacznij od zrozumienia przesunięć bitowych, potem poczytaj o portach GPIO w STM32 (rejestr MODER działa ciut inaczej niż DDR w AVR). No i jeszcze timery - też całkiem różne od tych w AVR.
Próbowałem też rzutować - również źle A konkretnie jak? Tak próbowałeś: [syntax=c] time.data |= (1ULL<<58);[/syntax] ?
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...
Tak też myślałem, ale wtedy tracę te 8 bitów. Ale przy rzutowaniu też tracisz i to te o najwyższej wadze a przy przesunięciu te najmniej znaczące. Czy jest potrzebna dokładność większą niż 16 bitów? Jak ograniczysz sygnał wejściowy do 16 bitów to osiągniesz podobny efekt do przesunięcia a może być gorzej bo po stłumieniu sygnału stosunek sygnał szum...
zerujesz zmienną przepisujesz pierwszą liczbę bez przesunięcia dodajesz binarnie (or) drugą z przesunięciem 16 itd...
Witam! Czy ktos moglby mi jak krowie na granicy podać zasade przesuwania bitow arytmetycznie i logicznie( z jakims przykładem) Myslalem ze wiem jak sie robi ale jednak na zadaniach sie wykładam. pozdrawiam
czyli daj: return (((unsigned long)wartoscrej)<<16|(... long)wartoscrej2)<<8|(... long)wartoscrej));
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...
UL to jawne zdefiniowanie stałej jako należącej do typu unsigned long (kiedy kompilator nie jest w stanie tego domniemać z wartości, jak w tym przypadku). Podobnie L to typ long a LL to typ long long (rozszerzenie gcc). Ewentualne wyjaśnienie szczegółów: W AVR gcc typ int ma 16 bitów. I taki jest domyślny typ stałej 1. Jeżeli kompilator nie promował...
Kod wygląda na prawidłowy, jedynie zmieniłbym fragment wpisu do rej. 16-to bitowych dla pewności.... OCR0SBH=0x00; OCR0SBL=0x00; OCR0RBH=0x0F; OCR0RBL=0xFF; OCR0SAH=0x00; OCR0SAL=0x00; OCR0RAH=0x0F; OCR0RAL=0xFF; while(1);
a moze ktos bardziej szczgolowo napisac jak korzystac z tej opcji .db ?? walcze z wyswietlaczem graficznym i nie moge sobiez tym poradzic wyswietlacz dziala ok, moge wysylac na niego pojedyncze bajty, zdefiniowalem tez z jakich bajtow po kolei sklada sie dana cyfra np .DB $0F,$0F,$30,$30,$30,$30,$30,$30,$0F,$0F,... ale nie wiem jak przeslac te poszczegolne...
Problem rozwiązany - nie przypatrzyłem się, że odwrotnie mam ponumerowane wyświetlacze do "mej" koncepcji.
1 jest typu int więc jest 16 bitowa Dokładnie, po prostu pierwszy argument w wyrażeniu przesunięcia x : ( x << y ) jest 16-bitowy , więc jeśli chcemy użyć 32-bitowego - to trzeba zrobić rzutowanie typu.
(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...
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...
Qmexx: a jakiego wyniku oczekujesz? Nawiasy nic tu nie dają, bo dochodzi do promocji typu do int, a po tej promocji operacja negacji przesunięcia jest tożsama z operacją przesunięcia zanegowanej wartości.
Przesunięcia bitowe są prostsze
McMonster - są to podstawy totalne, i wszelkie przesunięcia cykliczne, arytmetyczne, logiczne, piszemy w zeszycie w kratkę.. ;) np mam 11001011 i muszę ten kod przesunąć cyklicznie w prawo/lewo o 1 bit, potem 2,4,5 bitów właśnie z uwzględnieniem bitu C.
Witam Jak rozumiem zgodnie z teorią języka C dla AVR [syntax=c] PORTB |= (1<<PB5); [/syntax] jest równoznaczny z PORTB = PORTB | (1<<5) czyli dla PORTB = 0xF0 (0b11110000) wynikiem 11110000 | 00010000 jest 11110000 czyli 0xF0. Logiczne Ale jak należy rozumieć [syntax=c] Tryb |= (0x10 << Wartosc); [/syntax] gdzie zarówno Tryb jak i...
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; ?
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.
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ż...
Kolega wyżej już wyjaśnił ja dodam jeszcze, że tego typu prostych błędów jest więcej: http://mikrokontrolery.blogspot.com/2011... Druga uwaga, to zdecyduj się - albo stosuj makro _BV(), albo przesunięcia bitowe (1<<x). Ja sugeruję tę drugą wersję.
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...
Troche skomplikowanie to wygląda - ale ja nie znam C++ :-) Rozumiem, ze to czesc wiekszej całości? Działa? Ja osobiście podziały bajtów (lub liczb wielobajtowych) realizuję (podobnie jak koledzy wyżej) przez maskowanie odp. fragmentów bajtów (lub większych wielobajtowych zmiennych) za pomocą masek bitowych + odpowiednie przesunięcia bitowe.
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...
Przy operacjach bitowych dobrze czasem pomagać sobie przesunięciami Np. 1 << 0 oznacza bit 0 (wartość 1 - szesnastkowo 0x01) 1 << 1 oznacza bit 1 (wartość 2 - szesnastkowo 0x02) 1 << 2 oznacza bit 2 (wartość 4 - szesnastkowo 0x04) .. 1 << 31 oznacza bit 31 (wartość 2147483648 czyli szesnastkowo 0x80000000) Zamiast kombinować...
Nasuwa mi się myśl - jeśli ważne jest, by te ADC były taktowane symultanicznie i jednocześnie zbierały dane, to z tego co wiem SMT32F7 ma 3 ADC które mogą pracować w trybie równoległym. W pierwszym poście pisałeś coś o 4 ADC. Tu już by trzeba użyć kanałów poszczególnych ADC i wówczas chyba nie da się tego zrobić symultanicznie i pojawią się przesunięcia...
Probuję oprogramować kość DDS (AD9835); częstość generowanego sygnału programuje się wysyłając cztery razy 16bitowe słowa, w każdym słowie jest 8 bitów tworzących 32 bitowe słowo określające bezpośrednio częstość. Tego za bardzo nie rozumiem. 16-bitowe słowo, które ma 8 bitów? Czy chodzi o to, że poza danymi o częstotliwości wysyłane jest coś jeszcze,...
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...
Operacja iloczynu logicznego oraz przesunięcia w prawo np. interesuje Cię bit 4 a jakimś rejestrze X i zapisać go na 2 bicie portu D push X //odłóż na stos and X,b00001000 //interesujacy nas bit 4 ror X,2 //ror - rotacja w prawo z wpisywaniem 0 na początek X=000000Z0 (Z - czwary bit odczytany z rejestru X na 2 bicie) z 4 miejsca na 2 wiec 2...
Można użyć operacji stałoprzecinkowych zamiast operacji na float. Autor nie ma nigdzie operacji float. (100 - volume_coefficient) *127)/100 Ta część obliczeń jest stałą w pętli, więc nie powinna wprowadzać żadnych obciążeń. W wielu miejscach rzutujesz typ na 32-bity, podczas, gdy wynik operacji nie może przekroczyć 16 bitów. Takie rzutowanie wprowadza...
Ustaw wszystkie bity FTH w rejestrach FCR, zarówno dla RX jak i dla TX. To jest pierwsza rzecz którą zauważyłem w Twoim kodzie, która u mnie jest zrobiona inaczej. Natomiast druga - kluczowa - też już była wspomniana: Postraj się używać definicji zawartych w pliku opisowym danego układu. Wpisywania i odczytywanie tych zer i jedyne z przesunięciami przyprawia...
Po pierwsze to po resecie mikrokontrolera piny są ustawione jako wejścia więc nawet nie trzeba tego robić Po drugie to kierunek ustala się za pomocą rejestru DDRx a nie PORTx (to nie Bascom) Po trzecie to musisz doczytać jeszcze o przesunięciach bitowych bo szybko na tym polegniesz w C. To podstawa. Po czwarte to klawisze (słicze) musisz mieć albo podciągnięte...
Dzięki za podpowiedź ;) Ale szczerze mówiąc to siedzę już nad tym trochę i nadal mi nei wychodzi ;/ [syntax=java] class przesu { public static void main(String args[]) { int a=256; Integer.toBinaryString(a) System.out.println(" Pierwsze przesunięcie będzie wyglądało następująco :" + (a>>=a)); System.out.println(" Kolejne przesunięcie będzie wyglądało...
;* ;***************************************... ;*PROCEDURA WYLICZANIA SUMY KONTROLNEJ Z NUMERU SERYJNEGO UKŁADU 1-Wire ;***************************************... ;* ;* ;*******************************OPIS****... ;*Kolejne bajty numeru seryjnego...
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...
A nie jest tak, że po przesunięciu pojawiają się 0? 1111 << 2 = 1100 Najstarszy bit tracony, najmłodszy uzupełniany o 0. Ale to nie chodzi o to co pojawia się po przesunięciach z tyłu (LSB) tylko o to co jest z przodu (MSB) Spróbuj coś takiego: [syntax=c]XYZ[0] = (axis[1]<<8 | axis[0]) if( XYZ[0] & 0x00008000 ) XYZ[0] |= 0xFFFF0000;...
Zmienna 'potega' jest również typu uint32_t , wartości przesunięcia występują w zakresie od zera do 19 i w żaden sposób nie powinny wyjść poza zakres tego typu zmiennej.
Po prostu po przesunięciu dodajesz bitwo 1 do wyniku przesunięcia:-)
Trochę konfudująca wiadomość, zwłaszcza, że w datasheecie nie ma wzmianki o komórkach. Na wikipedii opisano pamięć EEPROM jako pamięć, gdzie dane są zapisywane w komórkach, które są grupowane w strukturę wielokrotności 8 bitów. Zatem mam tutaj dostęp do 32768 komórek, każda 8-bitowa? Wówczas zapisanie jednej wartości float wymagałaby rozdzielania na...
co to robi: int foo(uint32_t a) { a = a ^ (a >> 16); a = a ^ (a >> 8); a = a ^ (a >> 4); a = a ^ (a >> 2); a = a ^ (a >> 1); return a & 1; } Wstępna ocena dostępnych informacji Przedstawiony kod to funkcja `foo`, która przyjmuje jako argument 32-bitową liczbę bez znaku `a` (`uint32_t`). Funkcja wykonuje szereg operacji bitowych na tej liczbie i zwraca...
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...
Vitling , przeczytaj ten artykuł [url=http://mikrokontrolery.blogspot.com... i zerowanie bitów, powinien Ci pomóc w zrozumieniu przesunięć bitowych. Zerknij też na [url=http://mikrokontrolery.blogspot.com... mikrokontrolerow...
ja się tam nie znam ... ale nikt nie odpowiada więc wtrącę moje dwa grosze.... stosując operator<<(rezystor) kompilator spodziewa się, ze będzie to wykorzystywane do operacji na bitach. Ty natomiast używasz to do wrzucenia wyniku w strumień. musisz przeciążyć operator strumienia a nie przesunięcia bitowego: (...) friend ostream & operator<<...
tyle ze wtedy nie jest przesunieciem, a rotacja [; pozatym w C nie da sie zmusic procka do zrobienia rotacji. 4\/3!!
ten KOD bez błędów raczej i kompiluje się [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #define p0 0x01 #define p1 0x02 #define p2 0x04 #define p3 0x08 #define p4 0x10 #define p5 0x20 #define p6 0x30 //#define F_CPU 1000000 // tu definiujesz wartość uzywanego kwarcu void InitUSART( unsigned long int baud...
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 .
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...
a w czym widzisz problem? zaladuj najpierw powiedzmy TL0: zmiennna_typu_long = TL0; a nastepnie przesunieta o 8 bitow TH0: zmienna_typu_long |= (TH0 << 8 ); lub: zmienna_typu_long += (TH0 << 8 ); Zmienna moze byc 16 bitowa a nie 32 czyli np int. Oj, to jest lekko ryzykowne rozwiązanie... Ja bym jednak zrobił tak: zmiennna_typu_long = TH0;...
http://obrazki.elektroda.net/33_12693286... Cześć! Kiedyś, kiedy zaczynałem zabawę w wyświetlacze graficzne, potrzebny był mi program na PC, który pozwalałby konwertować czcionki i obrazki do tablicy C, by potem użyć jej w programie dla mikrokontrolera. Potrzebowałem zapisywać ja w postaci monochromatycznej, gdzie jednemu bitowi zmiennej w...
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 O jej,... Twój opis VHDL jest mało adekwatny do tego co chcesz zrobić. A naprawdę wystarczą bazowe...
Napisz parsowanie w Javascript obiektu DataView gdzie pierwsze 10 bitów to wartość A, następne 12 bitów to wartość B, a następne 18 bitów to C. Zaproponuj sposoby jak mogę to przetwarzać i rozbić wartości na osobne zmienne Witaj ponownie! Parsowanie skomplikowanego formatu danych z obiektu `DataView` wymaga szczególnego podejścia, ponieważ będziemy...
Przesunięcia bitowe będą najszybsze.
Obecnie mój kod wyglada tak (i dziala jak oczekiwalem): /.../ Czekam na ewentualne dalsze uwagi dot. kodu i jego zgodnosci ze "sztuka opisu sprzetu". to masz troche szczescia, ze dziala; jesli sygnal cs jest synchroniczny z sck , i okres sck jest odpowiednio dlugi cs bedzie nieaktywny PRZED opadajacym zboczem sck -> wyzeruje bitcount i warunek if(bitcount...
W przypadkach, kiedy liczenie tego przesunięcia musi być szybkie, można dać tablicę LUT lub napisać kod, który będzie to rozwiązywał binarnie (3 warunki, przesunięcia o 4, 2 i 1). Rozwiązanie bezpośrednie jest nie efektywne z tego powodu, że avr'y mają instrukcję przesuwania tylko o jeden bit, więc przesunięcie o dowolną liczbę musi być zamienione na...
A z zaokrągleniem, czyli z mniejszym błędem to będzie tak (w C): x = (x >> 2) + ((x >> 1) & 0x01) Ale chyba żaden kompilator nie potrafi doprowadzić tego do optymalnej postaci, czyli tak: przesunąć w prawo dwa razy (gdy mamy do dyspozycji tylko pojedyncze przesunięcie, w przeciwnym wypadku odrazu o 2), dodać do wyniku przesunięcia flagę CARRY (która...
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.
Zmodyfikowałem nieco swój program i dodałem komentarze (może okazać się, że jestem jakimś trollem mikrokontrolerowym więc dopisałem co chciałem zrobić, w której linii, żeby ułatwić ew. wyłapanie tych błędów. Teraz wszystko ładnie się wyświetla, ale ... nie tak jak powinno. Zamiast alfabetu widzę zera, strzałki i inne krzaczki. Proszę o pomoc ;] #include...
Wskaźnik masz na dword, więc zmienna jest 32 bitowa i shr operuje tylko w obrębie tej zmiennej... masz operację przesunięcia z przeniesieniem (nie pamiętam rozkazu), przesuwaj po jednym bicie w pętli i przepisuj przeniesienie.
Proble z obliczeniami w AVR ie polega na braku dzielenia, a na tym, że liczymy na 8 bitach. Prosta operacja 16-bitowa - to min. 2..3 instrukcje, 32-bitowe - 8..12 instrukcji. W 8-bitowym procesorze nie ma żadnego pożytku z dzielenia, bo w programach, w których potrzebne jest dzielenie, używa się danych 16- lub 32-bitowych, a w przeciwieństwie do mnożenia...
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...
https://stackoverflow.com/questions/1024... czemu u żywasz różnych DeviceId? raz 1 potem 2 ? spróbuj Dim register6() As UShort = master.ReadInputRegisters(1, &H109, 3) bo mam wrażenie że nie odniosłeś się do kwestii HEX Tam (rejestr 109) odbierasz 3x 16bitów bez znaku, więc a*16^4 + b*16^2+c Kolego a jak poskładać...
... tylko powiedzcie mi jak można zrobić operacje Np. [syntax=c]ulamek = ( (temp & 0x0F) + ( (temp & 0x0F)<< 2 ) ) >> 3;[/syntax]
czy Crossworks jest taki madry, aby sam potwierdzac przerwania w ich ISRach? w kazdym z nich brakuje przypisania dowolnej wartosci do rejestru VIC odpowiedzialnego za adres... osobiscie nie sadze, aby Crossworks zalatwial to sam, bo w koncu oparty jest na gcc, ktory tego nie zalatwia. bez tego kolejne wywolanie przerwan nie bedzie mozliwe raczej......
Polecam Książkę Pana Mirka http://atnel.pl/wydawnictwo Właśnie wczoraj skończyłem czytać o języku C po 2 razie kiedy to przeczytałem już wiele rzeczy mi się rozjaśniło. Polecam poczytać dowiesz się ze można to robić w bardziej jasny sposób stosując operatory logiczne oraz przesunięcia bitowe. Pozdrawiam ;) w szczególności Pana Mirka :D
Powyższy zapis wcale nie nadaje zmiennej stan wartości 101, jak zapewne zakładasz, lecz wartość 5. Operator << to operator przesunięcia bitowego, a nie dziesiętnego.
Co do pól bitowych to mam Je odbierać i wysyłać więc nie mam wyboru. To nie jest prawda. Odbierane i wysyłane są bajty, odczyt i zapis zazwyczaj realizuje się poprzez maskowanie wartości i przesunięcia (czyli operacje bitowe a nie pola bitowe) Chciałem ułatwić rzycie osobie która nie jest programistą w składanie ramki do wysłania. Po to się tworzy...
Proponuję rozbić całość na 2 funkcje. 1. Inicjalizacja wartości sumy wywoływana przy każdej zmianie szerokości okna. W ten sposób masz bezpieczny i niezależny sposób zmiany szerokości okna. Wejście: MAFTABlenght Wyjście: None, ew. status. Operacja: Wyznaczenie wartości MAFUTABpointer oraz MAFUSum. 2. Obliczanie wartości po dodaniu kolejnej próbki, czyli...
Stary i lubiany operand w C (!!) (i nie tylko :D ). Logiczne przesunięcie w prawo o 10 bitów, co daje że liczbę tlong dzielisz przez 2^(10) = 1024. Bity najmłodsze są wysuwane (tracone!), a na najstarszych pozycjach wsuwa się 0. Zakładam, że przetwornik jest 10-bitowy, co daje zakres od 0 do 1023. Prosta arytmetyka da nam zakres do <0; 1), wcześniej...
Cześć wszystkim :), Potrzebuję pomocy z teleinformatyki z zakresu modulacji QPSK do wykonania sprawozdań na uczelnię. Sprawozdania mam już wykonane, potrzebuję pomocy przy wnioskach do poniższego ćwiczenia: https://obrazki.elektroda.pl/8602357400_... https://obrazki.elektroda.pl/1272397600_... https://obrazki.elektroda.pl/9493136100_...
LISTA& operator --(); // deklaracja operatora dekrementacji przedrostkowej. LISTA& operator --(int); //deklaracja operatora dekrementacji przyrostkowej. --(*this); // użycie operatora dekrementacji przedrostkowej. (*this)--; // użycie operatora dekrementacji przyrostkowej. To C++ Builder i Visual C++ postanowili zastąpić jedną formę drugą w przypadku...
Przy przesunięciu bitowym w lewo zgodzę się z Tobą. Jednak w wyniku przesunięcia bitowego w prawo (dzielenie) otrzymam liczbę całkowitą co zmniejsza dokładność czujnika.
http://obrazki.elektroda.pl/4825749900_1... Witam Chciałbym przedstawić konstrukcję urządzenia, które wykonałem nieco ponad rok temu na drugie urodziny starszego synka. Niedługo kończy trzy latka a nadal lubi czasem tym się pobawić jak i jego młodszy braciszek również potrafi spędzić nieco czasu bawiąc się tą zabawką. Urządzenie zbudowane...
Dobra, czyli dla czytelności kodu będę stosować przyrostki U i UL dla wartości powyżej 65535 i przy przesunięciach bitowych, natomiast co do długości zmiennych widzę, że zdania są tu podzielone, więc nie wiem. Sprawdzę to chyba empirycznie, ile czasu zajmuje ta sama operacja na zmiennej 8, 16 i 32-bitowej. Przed operacją ustawiam pin, po operacji zeruję...
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! A może by tak "przesunąć" zakres w dół (szeregowa Zenerka lub wzm.op. o wzmocnieniu 1, z napieciem na wejściu "-" równym np. 20V) do standardowego zakresu 0 - 10V, ew. z dzielnikiem 1:2 i wtedy zakres 0 - 5V mozna podać wprost na wejście mikrokontrolera, który ma funkcję przetwarzania A/D - potem można dodać cyfrowo napięcie przesunięcia.
Potrzebuję informacji, jak adresować z poziomu assemblera. (Pracuję na wstawce assemblerowej w Delphi) Chcę wysłać komędą "OUT" 8 bitów np.:FF na podane niżej adresy we/wy. C0070h lub C0072h C0074h C0076h Nie mam problemów z adresowaniem 12 bitowych, ale tu przy 20 bitach nie mogę sobie poradzić. Coś mi świta, że chodzi tu o jakieś przesunięcia, ale...
Wbrew pozorom użycie warunku którego chcesz uniknąć jest najbardziej optymalne. I jeśli przerzucasz się na c, przywyknij to operacji bitowych i z przesunięciami. Ewentualnie jak wspomniano można wykorzystać pola bitowe o ile rozumiesz pojęcie struktury i unii.
Znakomita większość przetworników A/C nie potrafi przetwarzać napięć ujemnych. Żeby to umożliwić konieczne jest przesunięcie zakresu napięcia wejściowego do "zjadliwego" dla przetwornika. Czyli np. jeżeli przetwornik przetwarza napięcia z zakresu 0-2.5V, to do takiego zakresu musisz "przeskalować" swoje napięcie. dla sygnału -5V na wejściu przetwornika...
Jeśli już chcesz sprawdzać parzystość liczby, to musisz to po prostu zrobić w pętli, której warunkiem wyjścia będzie nieparzysta liczba. Ty sprawdzasz raz i losujesz drugi raz i na tym koniec. A jeśli nie, to można po prostu zastosować ogólny wzór na liczbę nieparzystą jako 2x-1 , dostosowując teraz do tego tylko zakres losowania (zmniejszony i połowę...
btw nie jestem pewien ale za pomocą przesunięcia bitowego w lewo << na AVR się chyba nie da otrzymać liczby 32 bitowej. Trzeba albo przesuwać w prawo albo inaczej cudować :)
Poczytaj o przesunięciach bitowych to się dowiesz
BASCOM generuje prawidłowy kod do obsługi 1wire tylko dla częstotliwości zegarowej 12 MHz. Dla przeanalizowania tego przypadku przytaczam poniżej procedurę odczytu bajtu z linii 1wire przetransponowaną żywcem z BASCOMa do assemblera. ;***************************************... ; Odczyt 8 bitow z urzadzenia 1wire, poczatkowo...
Dziękuję serdecznie za wszelkie sugestie - temat zamykam jako rozwiązany, skończyłem na przesunięciach bitowych, działa szybko, zajmuje mało pamięci i jest proste. Pozdrawiam i raz jeszcze dziękuję za wszelką pomoc !
Prawda READ. A co do tej konwersji to już kiedyś napisałem jak to zrobić, zaraz znajdę post. Znalazłem. Jeśli temp jest zmienną zawierającą temperaturę odczytaną z ds18b20 to jest to zmienna 16 bitowa ze znakiem. W związku z tym proponuję: - odczytać najstarszy bit (znak) i gdzieś go zapamiętać - jeśli liczba jest ujemna (MSB = 1), wykonać bitową negację...
kedzi1 - ten sposób też zadziała, ale łamie zasady tzw. nakładania się wskaźników. Poczytaj o "pointer aliasing". Kod z unią może jest dłuższy, ale przynajmniej jasny i dla kompilatora, i dla programisty. snow - Przyjrzyj się dokładnie przykładowi z tabelki, którą przytoczyłeś na początku tematu. Jak dla mnie prawidłowy odczyt danych z tego przetwornika...
Dlaczego miałbym potrzebować takiego dostępu Dala, w miarę eleganckiego, dostępu do pól rejestru. Oczywiście można jawnie robić maskowanie bitów pola i przesunięcia albo napisać makra dla każdego pola ale w czym to jest lepsze od pól bitowych? Czy jest czytelniejsze?
Poza tym pobieżnie przejżałem DS ATTiny i nie widzę instrukcji analogicznej do DIV w 8051?? Jak w nim dzielić liczby?? A czy znalazłeś MUL? ;) Do takich obliczeń niestety trzeba pisać własne funkcje. Można mnożyć i dzielić poprzez wielokrotne dodawanie lub odejmowanie danej liczby, ale to jest oczywiście dosyć mało optymalna metoda. Oczywiście mnożenie...
Ok. Teraz już kumam. Jeszcze znajdę coś o tych przesunięciach bitowych w pascalu i będzie wszystko fajnie. Dzięki za pomoc.
Trochę chaotycznie napisany program: 1. skoro używasz przesunięć bitowych, to używaj je konsekwentnie. bo sprawdzenie, czy prawidłowo ustawiasz ADMUX zmusza do szukania. co oznacza 0xE9 itp. Przy zmianie kanału zmieniaj tylko bity ADMUX odpowiedzialne za nr kanału: A single conversion is started by writing a logical one to the ADC Start Conversion bit,...
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 =...
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...
Animacja cyfr jest zrobiona bardzo prosto. W programie standardowo zostało użyte tylko jedno przerwanie -co sekundę od RTC, a wyświetlacz aktualizowany jest tylko gdy zachodzi taka potrzeba. W jednej zmiennej czterobajtowej trzymam stary czas w rozbiciu na cyfry, a w drugiej takiej samej nowy. W przypadku wyświetlania czasu wyświetlacz aktualizowany...
Pierwsza ocena dostępnych informacji Masz 12-bitowy przetwornik ADC z napięciem odniesienia (Vref) 3,3 V i chcesz zwiększyć efektywną rozdzielczość do dokładnie 0,5 mV/bit. Podstawowa rozdzielczość 12-bitowego przetwornika ADC z napięciem odniesienia 3,3 V wynosi około 0,8057 mV/bit bez wzmocnienia. Aby osiągnąć pożądaną dokładniejszą rozdzielczość,...
ustawianie bitow przesuwanie bitow maskowane bitow
pamięć eeprom radio synchronizacja czasu windows zamek podnosić kabina
Severin 1200W model 6200 – jak rozkręcić suszarkę, śruby, demontaż, narzędzia, serwis Wolna strefa indukcyjna – jak działa, budowa, marki Bosch, Siemens, AEG, Electrolux, Samsung