Przecież 63 And 19 to właśnie jest 19. Wszystko działa tak jak należy. Błąd jest, ale w tym manualu który podałeś.
no i przeciez masz zadeklarowana tablice jako dwuwymiarowa, a operajci poddajesz tylko jako jednowymiarowa innymi slowy dokonujesz operacji typu (unsigneg long*)&(unsigned long) co daje oczywiscie blad, bo operatory bitowe nie sa zdefiniowane dla wskaznikow 4\/3!!
Takie operacje znajdziesz w każdym kursie programowania mikrokontrolerów w C. Robi się to tak:[syntax=cpp]switch(op) { case 1: port |= 1<<bit; break; case 2: port &= ~(1<<bit); break; case 3: port ^= 1<<bit; break; }[/syntax]
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...
Zastosuj jawne rzutowanie : [syntax=c]tmp = ( (unsigned char) ~PINB >> 4);[/syntax] W CManiaku sprawdź sobie taki program: [syntax=c]#include <stdio.h> int main(void){ unsigned char a,b; a = 0x11; b = ( (unsigned char) ~a >> 4); printf("%x", b); return 0; }[/syntax]
http://pl.wikibooks.org/wiki/C/Operatory Prosze
To czego jeszcze nie wiesz? Zrób unię = bajt + struktura pól bitowych i do każdego parametru odwołujesz się przez pola struktury, a jeżeli ten bajt dostajesz lub potrzebujesz wysłać do innego urządzenia, to odwołujesz się do bajtu. Proste i skuteczne. Bardziej interesujące może być pytanie co Ty chcesz zrobić z tymi danymi. Być może sam sobie stworzyłeś...
[youtube]https://www.youtube.com/watch?v...
Ustawiona predkosc zegara w symulatorze jest bez znaczenia, wazne jest ile taktow operacja zajmie, a to latwo sprawdzic, bo w AVR Studio jest stosowny licznik. Potem wiedzac ile czasu zajmuje jeden takt mozna wyliczyc czas. Operacje na liczbach 32-bitowych sa szybkie, na float to raczej tragedia.
operacje bitowe zastosowanie zboczy rozumienie setowania bit "zawsze1" timery wszelkiego rodzaju zasada działania stacyjek do obsługi napędów/zaworów/siłowników
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
No brawo, po 16 postach zrobiłeś w końcu to co napisałem ci w poście nr 2 :) Natomiast na przyszłość - zainteresuj się operacjami bitowymi, pozwoli ci to w sposób dowolny modyfikować stan poszczególnych pinów IO.
To można osiągnąć przez odpowiednie operacje bitowe, przykład: [syntax=cpp]if(x & 1 << 2) {[/syntax] Prawda, jeśli drugi (licząc od 0) bit zmiennej x jest równy 1.
Witam, Jaka będzie wartość zmiennej "ZMIENNA" po tych dwóch operacjach bitowych: Zakładając, że początkowa wartość zmiennej "ZMIENNA" wynosi "0000 0000". 1. ZMIENNA &= (0x0F | 0x03); 2. ZMIENNA &= (0x0F | 0x02);
...if((liczba & 0b10000000)==1) to wiesz że najbardziej znaczacy bit jest ustawiony... A cóż to za herezje, kolega nam tu wypisuje :?: hessuss Poczytaj o operacjach bitowych typu AND, OR, XOR(EOR), bo bez tego, daleko nie zajedziesz :-P
Wspomniane "pomnóż logicznie przez 0xF" znaczy tyle co "wykonaj operację bitowego AND z 0xF". Wartość 0xF to ustawione cztery najmłodsze bity, jej efektem będzie to, że na tych bitach z odczytanej wartości nic się nie zmieni, a pozostałe zawsze będą zerami.
Trzeba wtedy trochę pomanipulować operacjami bitowymi: [syntax=c] PORTC = (PORTC & 0b11110000) | (1 << PC0) | (1 << PC3); [/syntax] ta komenda po kolei: bierze aktualny stan portu C kasuje bity 0..3 (tzw. maskowanie) ustawia bity 0, 3 zapisuje wynik działania do PORTC Operacja jest rozbijana na więcej instrukcji ASM, ale w efekcie nie...
PD1 wynosi 1 (bity są zadeklarowane jako numer bitu od 0 do 7) 1 przesunięte o 1 daje 0000 0010 suma logiczna ustawi ci 1 bit rejestru
Prawie dobrze. Jeżeli chcesz skasować pojedynczy bit to:[syntax=c]REJESTR &= ~(1<<BIT);[/syntax] natomiast przy ustawianiu pojedynczego bitu:[syntax=c]REJESTR |= (1<<BIT);[/syntax] A tak ogólnie to warto poćwiczyć operacje bitowe, żeby mieć je w małym palcu :) bo przy programowaniu mikrokontrolerów przydają się na każdym kroku.
(at)madiz08 Rozpisz sobie operacje bitowe, chociażby na jednym bajcie i wszystko stanie się jasne. Operacja AND 0 zawsze da 0, a AND 0xff zwróci niezmienioną wartość. Czyli wniosek z tego taki, że jeśli chcesz testować konkretny bit to go maskujesz przy pomocy AND, np. PINC & 2 - czyli interesuje cię bit nr 1 (licząc bity od zera), w efekcie dostaniesz...
(at)PDT... Rozumiem, iż jesteś fanem pisania w ASM. Czy ma to sens w obecnych czasach? Piszę w bardzo wielu językach programowania. Często w sprzętowych problemach mieszam C/asm. A czasy nie mają tu nic do rzeczy: w moim rozwiązaniu istotna część obsługi zamyka się w 9 rozkazach. Przy operacjach bitowo zorientowanych zwykle zapis w asm jest też bardziej...
Może wbiję kij w mrowisko: Po co właściwie Ci ten bitbanding? Programuję Cortexy na codzień i nie zauważam praktycznej potrzeby użycia BB. Nie to, żeby w ogóle jej nie było, ale jest ona tak marginalna, że nie opłaca się w to bawić. Tam, gdzie są potrzebne operacje bitowe, są one zaimplementowane w sprzęcie lepiej i bez potrzeby użycia BB i szybciej...
Jak rozumiem zgodnie z teorią języka C dla AVR Prawie dobrze, ale zamiast 00010000 otrzymasz 00100000, choć końcowy wynik będzie dokładnie taki jak Twój czyli 0xF0, ale to przypadek. A teraz drugi przypadek, gdzie zamiast przesuwać jedynkę o 5 miejsc w lewo, przesuwasz w lewo liczbę 0x10 szesnastkowo (czyli liczbę 16 dziesiętnie lub 0x00010000 dwójkowo)...
Czy spotkał się ktoś z takim problemem. Chciałbym skorzystać z układu PCF8574A jako niezależnych wyjść i tu pojawia się problem. Z tego co rozumiem wyjściami steruje się wysyłając do układu liczbę np 36 co odpowiada binarnie 00100100 (załączony pory 3 i 6). Czy w bascomie można to jakoś rozwiązać np. przez 00100100+00000011=00100111 lub odwrotnie 00100111*11111100=00100100...
>A ile cykli zegarowych przypada na jeden cykl maszynowy? 4 cykle >A prztwarzanie potokowe - podstawowa cecha procesorów RISC? ma dwupoziomowy pipeline (tak piszą w dokumentacji) >A te zawieranie adresów w słowie to jak w nich wprowadzono? >Rozszerzająć słowo do dziwnych rozmiarów 12, 14 bitów... Architektura Harvard, z poziomu programisty...
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ć...
Wtedy jest traktowana jako liczba bez znaku, a nie konwertowana na bez liczbę znaku. Konwersja a traktowanie to co innego. Pozatym konwersja nie była by możliwa skoro liczba jest ujemna. Możliwe jest jedynie policzenie modułu (wartości bezwzględnej).
Oprócz braku schematu (Linia CS podpięta na stałe do GND ?) zauważam, że dobrą praktyką jest używanie nawiasów dla poszczególnych argumentów operacji bitowych i nie używanie gołych liczb, tam gdzie występuje ich równoważnik w postaci definicji preprocesora.
O ile dobrze pamiętam (nie pisałem w Delphi już jakieś 1.5 roku) była do tego standardowa funkcja Ord(). Jako jej parametr podajesz 1 znak (char) a na wyjściu dostajesz bodajże Byte. :) Pozdrawiam
Witam 1. Proszę w google wpisać słowo klucz "AVR operacje bitowe" ( >> << & ^ ~) 2. Dobrze użyć #define do opisania co to jest LED0, LED1, jeśli zmieni się miejsce przyłączenia diody to później trzeba będzie pilnować każdego odwołania do takiej diody. 3. Nie ma potrzeby zmieniać stanu wszystkich 8 bitów portu D, wystarczy przesunąć ten...
Jeśli programowałeś w Pascalu to z przejściem na c sobie poradzisz. Tylko nie zapomnij o różnicy między = a == ! Na tym pascalowcy się często wywalają. :] I nie zapomnij o kompilacji z „-Wall” (czyli wyświetlaniem wszystkich ostrzeżeń. przydają się). Kilka prostych programów programów na PCta i po paru kwadransach/godzinach/dniach możesz...
GPIOC->BSRR = 0x0001 ustawia pin C0 na '1' GPIOC->BSRR = 0x0100 ustawia pin C0 na '0' Chyba raczej nie-bardzo... 4\/3!!
Nie, nie zostana spełnione ;) Zeby rozjasnic to kod: [syntax=c] stan+=1<<2; stan+=0<<1; stan+=1<<0; [/syntax] Jest rownowazny: [syntax=c] stan+=1 * 2 * 2; //2 ^2 stan+=0 * 2; // 2^1 stan+=1 * 1; // 2^0 [/syntax][/code]
Chodzi o pomnożenie próbki przez liczbę x z zakresu 0-255 i potem przesunięcie o 8 bitów w prawo, żeby uzyskać próbkę o współczynniku x/255, tak? Dokładnie. Mnożenie ma niewielki narzut (procesor ma instrukcję MUL), a dzielenie przez 256 to po prostu obcięcie najmniej znaczącego bajtu. Stałą? Przecież volume_coefficient to zmienna. Owszem, ale nie...
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ę...
No, ale Kolega pytał o S5, a nie S7. Jakie procesory masz na obiekcie? I która wersję Stepa? Oczywiście, rozumiem, że maszyny mają co najmniej 7 lat. Jeżeli są młodsze, to ktoś, kto włożył w nie S5 a nie S7 delikatnie mówiąc upadł na głowę... S5 jest systemem rodem z początku lat 80-tych ub. wieku i wtedy był systemem bardzo nowoczesnym i funkcjonalnym....
itoa służy do konwersji zmiennych o typie int, do typu long służy ltoa. A poza tym po co ci taka konwersja? Przecież liczby natywnie są przechowywane w postaci binarnej, więc łatwiej zastosować operacje maskowania bitowego, a nie długotrwałe i pamięciożerne konwersje.
W ten sposób i po sprawie: [syntax=c] for (i=0, i<n, i++){ wynik *=2; wynik +=pow((double)(tab[i]-'0'), (double)(i)); } [/syntax] Tak na serio to twoja funkcja może być o wiele krótsza - i nieco bardziej sensowna - gdybyś skorzystał z typu unsigned long long (lub też _u64 lub unsigned __int64) zamiast double (poczytaj sobie o strukturze liczb zmiennoprzecinkowych...
To nie zadziała. unsigned int na AVR jest 16-bitowe, a ty próbujesz przechowywać w nim 24-bitowe wartości. Musisz to zmienić np. na unsigned long. A pojedyńcze bajty wyłuskasz z tego za pomocą operacji przesunięć bitowych, albo za pomocą unii: union RGB { unsigned long kolor; struct kolor { uint8_8 r; uint8_t g; uint 8_t b; }; };
TH0 i TL0 to rejestry 8-bitowe - przy czym TH0 to starszy, a TL0 młodszy bajt licznika T0... zatem, aby prawidłowo wpisać je do zmiennej typu unsigned int, należy najpierw TH0 przesunąć o 8 bitów w lewo, a następnie operacją bitową (OR) dodać młodszą część licznika. Załóżmy, że: (odstępy zrobiłem dla lepszej czytelności) TH0 = 0b 1000 1000 TL0 = 0b...
Mam liczbę szesnastkową powiedzmy 0x01 jak się wykonuje natych liczbach operacje bitowe w języku C np. 0x01<<1 albo 0xA3<<2 ?? z góry dzieki. Pozdrawiam
(at)szczukot korzystałem z algorytmu CRC podanego w tym wątku, ale po przepisaniu na c++ nie działał mi poprawnie, tak samo żaden inny z neta. Ale minionej nocy wszystko się wyjaśniło i już działa. Trzeba przekazywać tablicę o typie zgodnym z tym, na którym pracuje algorytm, czyli potrzebna jest 16 a nie 8 bitowa tablica (uint16_t zamiast char). Problemem...
Wykorzystując operacje przesunięć bitowych (>> lub <<) ale nie tak jak to zrobiłeś, bo w twoim przypadku zmienna dane jest przesuwana o wartość PD2 bitów w lewo, a następnie wykonywana jest operacja sumy logicznej z wartością PORTD. Ten fragment powinien mniej więcej wyglądać tak: Dodano po 44 Oczywiście to czy przesuwasz w lewo czy prawo...
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...
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...
1. Nie zapominaj o nawiasach przy operacjach bitowych. 2. Stan PB3 nie rzutuje, jest wymuszane wyjście włączeniem TX - ta sama strona datasheet. 3. Dla ATmega162 w MCUCR nie ma bitu PUD, jest w SFIOR. 4. Zamiast "=" używaj odpowiedniej operacji bitowej("|=" przy ustawianiu lub "&=" przy gaszeniu).
Założyłeś nowy temat, chociaż zagadnienie nadal dotyczy poprzedniego. [syntax=C] uint8_t tab[8] = {rejestr1.bit0, rejestr1.bit1, rejestr1.bit2,rejestr1.bit3, rejestr1.bit4,rejestr1.bit5,rejestr1.bit... [/syntax] Takie rozwiązanie nigdy nie zadziała, ponieważ tworzysz tablicę 8 bajtów, do każdego z nich przypisujesz jeden bit ze struktury...
To że systemy operacyjne, bibioteki i API odcisnęły na Tobie piętno- to jeszcze nic. Wyobraź sobie że masz komputer z wykasowanym BIOS. To jest właśnie mały mikroprocesor. Ile tysięcy stron dokumentacji musiał byś przeczytać aby taki komputer uruchomić. A tu- tylko 600. Jeszcze jedno- w podręcznikach do C na "prawdziwe" komputery dość po macoszemu opisują...
Zauważ, że operując na liczbach 16-bitowych wszystkie operacje są wykonywane modulo 2^16. Stąd też operacja 65543+50 jest poprawna i da poprawny wynik - po obcięciu nieistniejącego 16 bitu wyniku. Stąd też możesz zrobić normalne porównanie.
Niestety nie mam pomysłu co z tym zrobić :( Nauczyć się o operacjach bitowych.
Poczytaj o operacjach bitowych.
Operacjami bitowymi - mnożenie logiczne przez maskę się przyda.
nie ma :D tylko ify i operacje bitowe.
Przesunięcia bitowe będą najszybsze.
albo jeszcze inaczej - da się prosto odczytać stan konkretnego pinu z tego ekspandera Oczywiście, że się da :) Po odczytaniu bajtu przykładasz do niego odpowiednią maskę bitową np.:[syntax=c] byte wynik = IOexpanderRead(address) & 0x01;[/syntax]Czyli wynik będzie równy 1, kiedy bit na pozycji 0 (liczone od prawej) przyjmie wartość 1. Bit ten odpowada...
Na razie największy problem dla mnie to operacje bitowe Ćwicz! Tu jest błąd:[syntax=c]LED1_ON PORTB &= (1<<LED1_PIN)[/syntax]
Mnie się wydaje, że jeśli nie działa na polach bitowych a działa na operacjach bitowych, to tylko do czasu... Pokaż kod assemblera wygenerowany w tych dwóch przypadkach. Niemniej jednak wg mnie problem to typowa kwestia R-M-S, w którą po drodze wcina się przerwanie lub inne wątki (jeśli korzystasz z jakiegoś systemu). 4\/3!!
Ten SizeOf to mógłby chyba być przed pętlą. Poza tym w PHP AND to operacja bitowa - logiczna to &&.
pokaż makra do "ustawiania stanu", robi się to tak ustawienie "1": PORTD |= (1<<PD0); ustawienie "0" PORTD &= ~(1<<PD0); poczytaj o operacjach bitowych.
Takie rzeczy to tylko sprzętowo na timerze w trybie PWM. Twoje założenie o tym, że pętla wykona się w 1..2 us jest niezbyt realistyczne - przyjmując w uproszczeniu, że ATmega wykonuje jedną 8-bitową operację na cykl, Twoja pętla wymaga przynajmniej kilkudziesięciu takich operacji, więc jej czas wykonania wyniesie min. kilkanaście us. A poza tym - nie...
No tak, ale to nie jest "operacja na bitach" (w znaczeniu że modyfikacja konkretnych i odizolowanych bitów), tylko "operacja bitowa na całej zmiennej". Takie uproszczenie zastosowałem [; 4\/3!!
FC to informacja, czy aktualne RLO jest do użycia, czy nie. Inaczej czy wynik operacji - bitowy - można użyć dalej, czy inna operacja nie wpłynęła na jego wartość i obecnie RLO należy wygenerować na nowo.
Teraz wszystko wydaje się ok :) https://obrazki.elektroda.pl/3673521600_... Nawet ciąg znaków dpID 19 jest wyświetlany poprawnie Mogę przeczytać wszystko za pomocą JavaScript. Jak ma uzyskać to samo z MQTT? EDYCJA: O flagach - nie sądzę, że wydrukowanie na stronie internetowej jakiegoś longintu lub 2 longintów dla statusu flagi przynosi...
W necie jest mnóstwo gotowych bibliotek do tego, dobrze poszukaj... A prościej to napisz program w C, deklarujesz unsigned int i resztą się martwi kompilator;-)
Ktos pytał wczesniej o przestrzen adresową? Z80 posiada dzielona przestrzen adresową na układy IO oraz pamiec. Co w 8080, bo z tego powstał Z-80, nie jest najszczęśliwszym rozwiązaniem. Ten sam bąd był powielony w 8086 i następcach (80286, 386, itd). Dlaczego piszę nieajnszczęśliwsze? W sumie pomysł dobry, bo zwiększa się przestrzeń adresową. Niestety...
int o ile mi wiadomo nie jest zmienną 16-bitową, tylko 32-bitową więc nie wystarczy. Oj, proponuję trochę nauki algebry boola i operacji bitowych. A co do operacji - debugger też przy każdej linijce pokazuje tylko pierwszą wartość?
A to diody lub kondensatory mogą zbytnio obciążać linie programatora - stąd operacja jest niemożliwa. A mój kod obejmuje przecież wszystko. Rozpisz sobie to wszystko powoli i po kolei - operacja po operacji - zrozumiesz zasadę MASKOWANIA BITÓW.
Przy jakiej optymalizacji? -O2 w gcc 4.9.2, ale pytanie się trochę mija z celem, bo akurat dla tego fragmenty kodu wszytko powyżej -O0 dałoby to samo. Dużo andów i orów albo sts i lds'ów, zależy czy polecimy poprzez castowanie/unie czy przez operacje bitowe.
-nobile- jak będziesz miał chwilę poczytaj [url=http://pl.wikibooks.org/wiki/C/Oper... bitowe.
Można ale będzie to operacja 16 bitowa w kodzie wynikowym i zajmie troche więcej czasu i instrukcji niż operacja 8 bitowa: var8 = (unsigned char)var16b;
ok, już wyjaśniam - operacje bitowe wykonują się dużo szybciej niż dzielenie, przykładzik: liczba AND 255 - zerujemy wszystkie bity oprócz ostatnich ośmiu które pozostają bez zmian. Jest to odpowiednik reszty z dzielenia przez 256. przesunięcie bitowe w prawo jest odpowiednikiem części całkowitej z dzielenia przez jakąś potęgę dwójki - przesunięcie...
Dla mnie z kolei największą wadą PICów jest ich mała moc obliczeniowa AVR 16MIPS, PIC18 12MIPS - żadna różnica w praktyce. Dodatkowo PIC robi mnożenie 8x8->16 w 1 cyklu, AVR w dwóch:) W mojej opinii wszystkie 8-bitowce to złom w porównaniu do cacek z rdzeniem ARM Cortex-M0, M3 czy M4. Żadne tam cacko. Amd64 robi nawet operacje 128 bitowe (SSE3), w...
Tak wlasciwe wystarcza instrukcje transferow danych miedzy rejestrami, testowania i operacji bitowych oraz instrukcje skokow bezwzglednych i warunkowych. Do tego znajomosc rejestrow "mieszajacych" portami procesora i jestes w domu.
Poświęć czas na poznanie operacji bitowych, ponieważ kompletnie ich nie rozumiesz. W powyższym fragmencie kodu popełniasz bowiem dwa błędy na co słusznie zwraca Ci uwagę kol. mpier, a oparacja ta jest równoważna do: [syntax=c]DDRB = 0;[/syntax] Operatory bitowe: http://mikrokontrolery.blogspot.com/2011...
I to jest doskonałe podsumowanie na temat wpisywania "magicznych numerków" zamiast "ludzkich" operacji bitowych typu (1 << bit_od_uartu) | (1 << bit_od_spi). Jeśli będziesz tak robił dalej, to wróżę Ci jeszcze dużo podobnych tematów lub dużo straconego czasu. 4\/3!!
No właśnie zauważyłem, przechodząc krok po kroku, że rzeczywiście operacje są wykonywane na bajtach. Wszystko przebiega identycznie i w symulacji i w MCU, z tą różnicą, że zapis wyniku operacji w rejestrze docelowym powoduje iż w MCU oprócz włączonego bitu 0 rejestru MCR zapala się bit 8. W symulatorze, taka sytuacja nie ma miejsca. Czy problem ten...
Wydajność trudno ocenić - to zależy jak sobie radzi konkretny kompilator. Dla sprytnego jest obojętne czy stosujesz unie czy operacje bitowe do ekstrakcji bajtów (np. gcc w większości przypadków generuje taki sam kod). Pozostaje kwestia wygody i czytelności.
BlueDraco wie co pisze - nie musisz sprawdzac czy operacja bitowa & działa. sprawdz tez czy if (2 + 2 == 4) wejdzie - jak myslisz co sie pierwsze wykona dodawanie czy logiczne == ?
akurat nie wiem jak to będzie pod xc100, ale pod TSX Premium/Micro Schneidera, przykładowe programiki w ST zaraz wygrzebię. Niestety nie znam adresowania pod xc. Dodano po 13 Prosty IF ze skokiem do procedury SR1 %M1 - marker 1 Auto, Motor 1, markery zapisane symbolicznie IF Auto THEN set %M1 ; reset Motor 1 ; ELSE SR1 (* komentarz *) ; END_IF...
(at)kogiel przestań się wygłupiać (żeby nie napisać mniej przyjemnie) swoimi postami, tylko zrób jak Ci (at)Freddie Chopin radzi. Jeszcze się nie nauczyłeś podstawowych operacji bitowych (typu jak wyzerować bit), a spierasz się ze specjalistami. Jajko mądrzejsze od kury
Bierze się to z tego, że procesor wykonuje operacje jedynie na liczbach 8-bitowych, a więc pamięć też musi być 8-bitowa, czyli musi mieć 8 linii danych (D0-D7). Możesz dać pamięć 16-bitową, ale wtedy linie danych D8-D15 nie będą używane, co jest oczywistym marnotrawstwem.
<< i >> to przesuniecia bitowe. I tak po pierwsze np. PB0 to stała o wartości 0, PB6 to stała o wartości 6 itd. Przesuniecia bitowe działają tak: 0b00001100<<2 da nam 0b00110000 0b10000001<<1 da nam 0b00000010 0b01000001>>1 da nam 0b00100000 itd. Tworzy to zatem maski bitów które w połączeniu z negacjami i innymi operacjami...
Uszkodził? Niesądzę. Weź pdf do ręki i sprawdź co jest nie tak. LCD masz podłączony w trybie 16-bitowym? Bo widzę, że dane wysyłasz na PORTA i PORTC, a reszta instrukcji wskazuje, że na PORTC masz też sygnały sterujące. Poza tym stosujesz np. typy int, co trochę kłóci się z operacjami bitowymi typu >>. Także w tym kodzie jest trochę miejsc do poprawy.
Znasz przecież operacje bitowe: http://mikrokontrolery.blogspot.com/2011... skoro piny ustawiasz i zerujesz. Po prostu zdefiniuj sobie makra za pomocą #define określając, który bit, to który przycisk np. tak: przyciski za pomocą funkcji z biblioteki lub przerwań: http://mikrokontrolery.blogspot.com/2011...
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.
Zazwyczaj jak chce się zrobić taki zabieg to jedna linijka Możesz podać przykład w c jak połączyć 8 bitowe wartości w liczbę 24 bitową? W lua i Air200 teoretycznie niektóre operacje bitowe działają, ale jeszcze ich nie testowałem. [syntax=lua]adc_T = temp_msb(0xFA) temp_lsb(0xFB) temp_xlsb(0xFC)[/syntax]
-makra(?) cbi() i sbi() To są polecenia asemblera, często mówi się "wstawki assemblerowe" jeśli mam rację to które najlepiej wybrać(najszybciej działa), czy nie ma różnicy? bo jeśli nie to chyba po odpowiednim zdefiniowaniu najlepiej użyć makra register_bit. Skoro uczysz się języka C, to warto uczyć się go dogłębnie, więc sugeruje używanie operacji...
Poszukam. No dobra, ale kod macie, nie ma w nim co optymalizować a to zwykłe operacje bitowe - jak się nie zmieścić? Znaczy sprawdzę w wolnej chwili co on tam zrobił ale to szok ciężki dla mnie - tyle czytam że przy właczonych optymalizacjach są jazdy, a tu w drugą stronę...
Czy możliwe jest, utworzenie struktury odnoszącej się do jednego z rejestrów mikrokontrolera, tak aby można było przy wykorzystaniu pól bitowych, odczytywać poszczególne części tego rejestru? A może trzeba w tym celu użyć unii? Mam rejestr danych konwersji przetwornika ADC ( AD0GDR - 0xE0034004 ) który oprócz informacji o wyniku konwersji ADC, zawiera...
do zmiennych takich jak PORTx, PINx,DDRx podchodzi się w sposób bitowy (atomowy) Tak dla ścisłości atomowy IMHO nie oznacza dostępu bitowego. Mówimy o jakiejś operacji, że jest atomic (atomowa) jeśli jest niepodzielna, nieprzerywalna.
czy c na kompie różni się mocno od tego c na mikrokontrolery? W praktyce najważniejszą różnicą jest to, że na mikrokontrolerach bardzo często używa się operacji bitowych, np. ustawiania i zerowania poszczególnych bitów w zmiennej lub sprawdzania ich stanu, co na pecetach nie występuje tak często.
To pokaż kod a nie swoje niezrozumiałe myśli. Ja dalej nie rozumiem o co Ci chodzi. if(++sek == 60) podobno można zrobić and-em szyciej. Czekam na rozwiązanie Temat jest trywialny, a dyskusja pokazuje że Kolegom nie chce się uczyć C, operacji bitowych, oraz czytać DS-ów. I to tyle.
Operacją mnożenia bitowego przez wartość : 00011111, jeśli mowa o najstarszych bitach.
Nie, bo wynik będzie zależał od tego, co już jest wpisane do rejestru ADMUX. Poczytaj o operacjach bitowych w C. Najlepiej zrobić tak: ADMUX = (ADMUX & 0xf0) | nr_kanalu; Pierwsza część równania, aby nie zmieniać ustawień napięcia odniesienia. Prawidłowo, zamiast 0xf0 należałoby skonstruować maskę z odpowiednich definicji bitów, ale nie chce...
Zmienna lub operacje na takiej zmiennej muszą być atomowe. Chyba zaczyna się ujawniać wyższość procesorów o możliwie długim słowie danych - nawet operacje 32 bitowe będą atomowe.
Hey ! Mam problem z wykonaniem zadania na zajęcia z programowania. Jestem świeżym studentem i ale w związku z moją małą wiedzą na ten temat jest ciężko. Mam wykonać operacje splotu na 24-bitowej bitmapie i zapisać obraz wynikowy na dysku. Mam wykorzystać maskę o wartościach: 0 -1 0 -1 5 -1 0 -1 0 Wczytuje plik: unsigned char* odczytajDaneObrazu(ifstream&,...
nie znam się na VHDL-u, ale przypuszczam, że potrafi on robić operacje bitowe na zmiennym (co nie jest oczywiste, bo C tego nie potrafi na typie zmiennoprzecinkowym). Wystarczy zamaskować odpowiednie bity liczby i przesunąć o odpowiednią liczbę pozycji w prawo. W ten sposób można uzyskać wszystkie "składowe" liczby zmiennoprzecinkowej.
Właśnie o tym wspomniałem, pisząc 'operacje bitowe bezpośrednio na rejestrach'. Jednak tutaj chodzi mi o użycie typów strukturalnych działających bezpośrednio na rejestrach portów. W podanym przykładzie taka metoda nie jest konieczna - wprowadziłem ją tylko dla sprawdzenia czy to tak można , z myślą o późniejszym wykorzystaniu wtedy, kiedy byłaby naprawdę...
Dokładnie tak. Ustawiasz, zerujesz i testujesz za pomocą operacji bitowych. Użyj nowego typu danych (struktura ze wskaźnikiem na tablicę i z jej długością) i napisz sobie funkcje init(), set(), clear(), test(). Możesz automatycznie realloc()-ować pamięć przy próbie dostępu do bitu, który nie mieści się w zakresie tablicy. Pozdrawiam, Dr.Vee
To właśnie te - ludzie raportują, że są to CMOS z "lepszym" oznakowaniem. 65C816 jest zgodny elektrycznie i programowo z 65C02, z paroma ulepszeniami - w pierwszej połowie cyklu na szynie danych jest górny bajt adresu, brak niedokumentowanych instrukcji 65C02 oraz operacji bitowych (których nie było w 6502), za to mamy rozszerzania 16-bitowe. U mnie...
operacja bitowy przesunąć tajny operacja niedozwolona operacja
drugi pilot samochodu odpowietrzyć hydrostatu zasięg telewizji naziemnej
płyta indukcyjna płyta indukcyjna
Marantz 2216 – podłączenie gramofonu, wejście PHONO, uziemienie, wkładka MM/MC KENNES TVC-MHDV4035Y/12 firmware availability and official support options