Jeśli tylko dodawanie i odejmowanie, to prosto, wykorzystujesz operacje dodawania z przeniesieniem i odejmowania z pożyczką. Jakbyś liczył w słupku: ; r16,r17,r18 - jedna liczba, kolejno od MSB ; r19,r20,r21 - druga, jak wyżej add r21,r18 adc r20,r17 adc r19,r16 ;wynik masz kolejno w C,r19,r20,r21 (C - znacznik przeniesienia).
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.
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.
Poznajmy Nibblera - 4-bitowy procesor, zbudowany w domu. Od czasu, kiedy autor stworzył komputer BMOW1, otrzymywał wiele zapytań, jak zabrać się do skonstruowania w domu własnego komputera. I jako że BMOW to skomplikowana maszyna, autor postanowił opracować urządzenie, którego działanie będzie łatwe do zrozumienia, budowa nie nastręczy trudności –...
Moze mi ktos powiedziec dlaczego taka operacja dziala ( zmienna Adres daje poprawny wynik) : #define ADR_0 !(PIND&(1<<5)) #define ADR_1 !(PIND&(1<<6)) #define ADR_2 !(PIND&(1<<7)) Adres=ADR_0+ADR_1*2+ADR_2*4 ; a ta nie działa : Adres=((~PIND)>>5)&ADRES_MASK; gdzie ADRES_MASK= 0b00000111; Juz nie mam pomyslow ..
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 jak byś chciał np. najmłodszy bit z bajtu odczytać i przypisać go do jakiejść zmiennej bitowej to najprościej: [syntax=basic4gl]Dim A As Byte Dim B As Bit ' ' B=A 'najmłodszy bit przypisany do zmiennej bitowej B[/syntax]
Od kilku lat programuję 8-bitowe mikrokontrolery AVR i przez ten czas zdobyłem trochę wiedzy na ich temat. Poniżej znajduje się kilka ciekawostek o tych układach. Jeśli znacie jakieś inne interesujące informacje, to piszcie. Najnowsza wersja artykułu jest również dostępna na mojej stronie: 1. Rozpoznawanie wersji (rewizji) Wersja (rewizja) mikrokontrolera...
Rzecz jest koncepcyjnie dosc prosta. bierzesz sobie blok rejestrow typu n.p. RAM16X4S ( dla Xilinxa ) do tego dolaczasz licznik dwokierunkowy czterobitowy. Kazda operacja PUSH zmniejsza licznik o 1 po czym zapisuje dane 4-bitowe pod pozycje wskazywana przez biezaca zawartosc licznika. Operacja POP natomiast najpierw dokonuje odczytu spod adresu wskazanego...
sprawdze te unie:) a co do Twojego pomyslu to jak pozniej z takimi dwoma liczbami 8 bitowymi wykonywac operacje arytmetyczne??? zastanawiam sie nac czyms takim ze mam liczbe 16 bitowa i na niej wykonuje operacje a pozniej wpisuje na porty 2 obszary pamieci po 8 bitow tylko jak to zrobic w C???? Dodano po 1 wtedy cala operacja zajela by 3 takty zegarowe...
zrobiłem juz rejestr przesuwny w prawo w lewo to tylko ze znakiem minus przesyłam kod mam nadzieje ze dobrze wszystko zrobiłem Proponuję kod wklejać używając znaczników teraz tylko problem z mnożeniem i dodawaniem. bo nie wiem czy to ma byz wszystko razem czy osobna. I od czego teraz zaczac??? Teraz jeszcze potrzebujesz licznika (było w poprzednich...
No to fajnie. A z MD też tak działa? Jeśli wpiszę pod MW10 i MW12 jakieś słowa 16-bitowe to odczytam je jako jedno słowo 32-bitowe pod MD10? Czy trzeba wpisać MW tak, aby odczytać w MW12 (chodzi mi o zakres adresów słów 32-bitowych)?
Wykorzystanie 64bit daje naprawdę dużo, o ile wykorzystują to programiści. Nie należy zapominać, ze rejestry też są 64bitowe! Kto w ASM próbował "dzielić zmienną na mniej i bardziej znaczące pozycje" i wykonywać na nich operacje arytmetyczne, to wie ile daje wykonanie tego w jednej operacji (brak dodatkowych operacji dbających o spójność danych). Faktem...
Ponieważ działań w systemie dwójkowym nie można wykonywać „od tak” na większości kalkulatorów, a takie obliczenia na programowych, wbudowanych w system, kalkulatorach są najczęściej męczące, autor postanowił zbudować swój kalkulator dwójkowy. Pozwala on na wykonywanie następujących działań: dodawania, odejmowania, mnożenia, dzielenia i...
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.
Uprzejmie proszę o pomoc z moim systemem. Od kilku tygodni zauważyłem przycinanie się systemu na prostych operacjach , jak przewijanie strony przeglądarki, uruchamianie pliku muzycznego , czy nawet zacinanie się podczas zamykania systemu.Podczas przenoszenia pliku pomiędzy partycjami, przycina włączono muzyka. Zrobiłem re-install WinXP 32bit, ale problem...
Witam, powoli kończę modernizację swojej nawijarki do cewek i transformatorów, licznik liczby zwojów postanowiłem wykonać na mikrokontrolerze jak w tytule PIC16F877A. Właściwie wszystko sprzętowo działa, za to utknąłem na końcu programu, otóż licznik może zliczać do 65535 zwojów, wszystko wyświetlam na wyświetlaczu 2x16. Mój problem związany jest z...
Czyli najpierw powiedziałeś kompilatorowi, że domyślnie 32-bitowa stała 19u musi być 32-bitowa (19ul), a potem, że jeszcze bardziej ma ona być 32-bitowa (uint32_t). "19u" w zupełności wystarczy, bez rzutowania typów, z którego w #define mogą być tylko kłopoty. Podejrzewałem właśnie błąd tego typu - wyjście poza pamięć i wynikający z tego HardFault,...
Witam Obojętnie w jakim języku piszesz możesz skorzystać z "maski bitowej": Jeśli na którymś miejscu chcesz ustawić 1 to należy tą liczbe potraktować operacją logiczną OR z liczbą która na ineresującym miejscu (-ach) będzie miała 1 a na pozostałych 0. Np. 1010 OR 0100 ________ 1110 Jeśli na którymś miejscu (-ach) chcesz ustawić 0 to należy tą liczbe...
Fakt, wystarczy podpiac pod "dziurke od klucza" urzadzonko i napierdzielac ciagiem bitow od 0 do 2^255 i w koncu peknie. Pomysl fajny, ale gdyby to zrobic tak Z = procek-zamek K = procek-klucz 1. Z wysyla losowa fraze do K 2. K koduje ta fraze wg jakiegos algorytmu i klucza kory ma w pamieci, nastepnie odsyla ja do Z 3. Z porownuje czy wynik operacji...
O ile mi wiadomo, to zgodnie ze standardem ANSI C na temat umiejscowienia pól bitowych w strukturze nie można niczego zakładać. Jeśli więc potrzebujesz ścisłej zależności między numerem pola bitowego a odpowiadającą mu wartością bajtu/inta, to musisz zrezygnować z używania wbudowanych w C pól bitowych i stosować odpowiednie operacje na bitach, traktując...
Żadne AVR nie obsługuje liczb zmiennoprzecinkowych ? Wszystkie 8-bitowe mają ten sam rdzeń, więc żaden z nich nie obsługuje float-ów. nie wiem jak 32-bitowe, ich nie znam za dobrze.
Po pierwsze należy się zapoznać z procesorem, na który ma być pisany program. Szczególną uwagę należy zwrócić na rejestry i organizację pamięci. Dopiero później można pisać program. Podejrzewam, że dowolna książka traktująca o 8051 zaczyna się zwykle od takich informacji. W moim przypadku sprawdziła się np. "Podstawy programowania mikrokontrolera 8051",...
Tak tez robiłem do tej pory, ale teraz chcę odnieść wszystkie wielkości do wielkości rzeczywistych (napięcie, prąd, prędkość silnika). Ponieważ np. stała całkowania będzie wynosić TP = 100e-6s stąd na część ułamkową chcę przeznaczyć 16 b z czego wynika że na część całkowitą również zostaje 16b. Wtedy TP = 100e-6*65536 = 6 , a np 2A = (2<<16) =...
Operacje 32-bitowe muszą być na 8-bitowym AVR kilkadziesiąt razy wolniejsze niż na 32-bitowym Cortex. Cortexy mają ponadto szybką sprzętową mnożarkę. Oczywiście najpierw wypadałoby "wyprostować" algorytm, ale obawiam się, że to nie wystarczy. Mnożenie float zabije AVR. To sporo więcej, niż dodawanie wykładników. Konkretnie - to rozbicie liczby na kawałki,...
Podczas niedawnej konferencji w San Jose, firma NVIDIA zapowiedziała powstanie nowej 64-bitowej wersji „Denver” swojego procesora Tegra K1. Jednostka ta zadebiutowała na tegorocznych targach CES 2014 i już zdążyła sporo namieszać na rynku urządzeń mobilnych. Jej zalety doceniła m.in. firma Acer, która montuje już wersję z czterema 32-bitowymi...
Hm, nie możesz po prostu użyć operatorów bitowych "|" i "&"? Nie wiem, czy to zamierzone, ale zwróć uwagę, że BajtPort1..4 masz zdefiniowane jako tablice bajtów, a nie pojedyncze bajty. Dodać bajty bitowo czy "normalnie"? Jeśli bitowo, to też operator "|" będzie miał zastosowanie. Ustawianie wartości też "normalnie", czyli przez przypisanie. Jeśli chcesz...
(at)toch88 Nie ma powodów, aby nie stosować takiego zapisu. Np. Atmel w swoich nagłówkach dla ARM daje możeliwość korzystania z pól bitowych, lub składania wartości z masek i przesunięć. Przy czym jeśli korzystasz z pól to wygodnie jest użyć compund literals: Ponieważ posługujesz się konkretnym kompilatorem, więc ułożenie pól bitowych jest zawsze takie...
Tak to wiem ale mam problem bo 8051 może wykonywać operacje 8 bitowe i mam problem z przeliczaniem.
Jeśli chodzi o AVR: Zapis stałoprzecinkowy robiony jest wg. dwóch formatów: 2^7, 2^6, 2^5, 2^4, 2^3, 2^2, 2^1, 2^0 w zapisie -1, 2^{-1}, 2^{-2}, 2^{-3}, 2^{-4}, 2^{-5}, 2^{-6}, 2^{-7} zapis 2^{-8}...2^{-15} teraz, aby załadować liczbę tego typu (czyli z przedziału (-1..1)) do rejestru najlepiej posłużyć się wbudowaną funkcją asemblera (w wersji v2):...
Witam. Powyzszy mikrokontroler jest czescia regulatora, 64 bity to liczba oznaczajaca czas trwania pewnej operacji. Bity sa wczytywane przez jeden z portow szeregowo 8x8 bitow z rejestru sterowanego przez miltuplexer (to nie problem). Druga liczba jest tak naprawde max 62 bitowa i przystosowuje czas do bazy danych. Jest wczytywana podobnie jak pierwsza...
Texas Instruments Incorporated wprowadził układ ADS614X (ADS612X), rodzinę 14-bitowych (12-bitowych) analogowo-cyfrowych konwerterów A/D, z próbkowaniem do 250 MSPS. Układ łączy wysokie, dynamiczne osiągi i niski pobór energii. Takie rozwiązanie jest dostosowane do rozległych, szerokopasmowych systemów komunikacji. Moduł ADS614X / 2Xma dobre wzmocnienie,...
Maxim Integrated Products wprowadził dwa układy MAX5138 / MAX5139. Są to pojedyncze, wyprowadzeniowo- i programowo-kompatybilne, 16-bitowe i 12-bitowe konwertery cyfrowo-analogowe DAC (digital-to-analog converter) małej mocy. Przetworniki MAX5138/MAX5139 posiadają buforowane wyjścia napięciowe oraz wysoką liniowość. Używają precyzyjnego, wewnętrznego...
witam, na wej. dostaje sygnał 16 bitowy, spi ustawione jest na obsługę 8 bitów, potrzebuję wewnątrz uC połączyć te dwie części do rejestru 16 bitowego na którym tam sobie będę robił coś dalej, mam pytanie do was drodzy forumowicze jak wpisać dwie dane wejściowe do dwóch kolejnych rejestrów, (z operacją scalenia powinienem dać sobie radę) p.s. oczywiście...
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ż...
Rozdział: "4.9.4 Pola bitowe" Poza tym sam podajesz przykład i to w C jak to zrobić w oparciu o strukturę więc nie za bardzo rozumiem pytania: "w jaki sposób to zrobić w języku C?" ;) Dodano po 3 Na Avr'y Chodzi mi o to, że mam wyświetlacz 640pixeli. 80x80pixeli. No i teraz zrobiłem sobie tablicę 640elementową, gdzie "1" w tablicy oznacza zapalony pixel,...
Witam serdecznie. Mam taki problem. Otóż jakiś czas temu zafascynowałem się przydatnością pól bitowych przy programowaniu mikrokontrolerów. Fascynacja posunęła się do tego stopnia, że przepisałem cały plik lpc31xx.h po swojemu, dodając funkcjonalność w obsłudze rejestrów w postaci pól bitowych. Myślałem że ich stosowanie zdecydowanie poprawi czytelność...
Firma Renesas zaprezentowała na konferencji Embedded World rodzinę mikrokontrolerów RX64M, pierwszą we flagowej serii 32-bitowych mikrokontrolerów RX, produkowaną w procesie technologicznym 40 nm. Mikrokontrolery będą oparte o nowy rdzeń RXv2, zaprezentowany przez firmę w listopadzie ubiegłego roku. Rodzina RX64M, składa się ze 112 produktów, taktowanych...
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&,...
Witam, mam do napisania pewien program w VHDLu, muszę w nim wykonać operację modulo na wielobitowych liczbach, ale pojawiły się 2 problemy po pierwsze operator mod, działa na maksymalnie 32-bitowych liczbach, dodatkowo dzielnik musi być potęgą dwójki co jeszcze bardziej mi utrudnia prace. Da się to jakoś obejść, czy muszę napisać sam kod do wykonywania...
Imagination IMG RTXM-2200 to 32-bitowy rdzeń procesora czasu rzeczywistego RISC-V. Jest on pierwszym elementem odłamu Catapult składającego się z czterech odrębnych rodzin RISC-V dla dynamicznych mikrokontrolerów, procesorów czasu rzeczywistego, wysokowydajnych procesorów aplikacji i samochodowych. Firma twierdzi, że jest to dobrze skalowalny, deterministyczny,...
To już bym wolał wskaźnikowo się odwołać... Niezależnie od rozwiązania to jeszcze jedna uwaga: Trzeba być pewnym, że operacje na słowie odbywają się w kolejności nieodwróconej (czyli nie jest zapisywany najpierw młodszy bajt a po nim starszy bajt słowa).
Co to jest półsumator? Półsumator (half adder) jest jednym z podstawowych elementów cyfrowych układów logicznych, który jest używany do wykonywania binarnych operacji dodawania. Półsumator przyjmuje na wejściu dwie liczby binarne (dwie liczby jednobitowe) i generuje dwa wyniki: sumę (S) i przeniesienie (C - od ang. carry). Półsumator nie uwzględnia...
No nie jestem biegly w assemblerze, ale z tego co widze, sa tam odpowiednie operacje na bitach (moze moja wersja kompilatora tego nie obsluguje, sprawdze). Mam w takim razie jeszcze tylko jedno pytanie: czy przy deklaracji zmiennej typu pole bitowe jest niezbedne slowo struct? (jak u Ciebie struct biciki pole) czy wystarczy deklaracja biciki pole? Dzieki...
Ma ono polegać tylko i wyłącznie na dzieleniu 16 bitowej wartości przez liczbe 100 (dziesietnie dla jasnosci). Czy jest szansa aby taka operacja zakończyła sie (po góra) kilkudziesięciu cyklach?. Standardowe dzielenie jest bardzo czasochłonne. Chodzi o AMS na 51ke
Właśnie rozwiązałem u siebie jeden z Twoich problemów (tak myślę), więc się podziele. Potrzebowałem obliczyć wartość, którą muszę przesłać do DDSa mając daną częstotliwość w Hz. Wzorek taki: fw = czestotliwosc * 2^24 / 50000000 akumulator fazy ma rozmiar 24 bity, zegar DDSa to 50MHz. Moje pierwsze podejście wyglądało tak, że wykonałem tą operację dokładnie...
Nie zawsze (unsigned) char jest 8 bitowy, przykładowo w kompilatorze CSS dla procesorów Texasa serii C2800 jest to typ 16 bitowy :). Wszystko zależy od architektury procesora na który piszemy program. To tak na marginesie. Pozdrawiam.
Operacjami bitowymi - mnożenie logiczne przez maskę się przyda.
Moje zadaniepolega na tym że do aplikacji po przez pipe jest przesyłany losoby ciąg bajtów, długość duża, bez znaczenia. I teraz należy odczytać 2 pierwsze bajty i przekształcić je na liczbę szesnastkową (wsumieto już jest) i następnie wczytać pozostałe bajty w ilości takiej jak wartość tej liczby, następnie znów 2 bajty i liczbę. Liczbę1 i Liczbę2...
Mam drobne pytanie - wykonuję przesunięcie bitowe o zmienną: uchar a,b; a = 1<<b No i ta operacja zajmuje jakies 26 cykli procesora. Przesunięcie o stałą trwa jeden cykl bo raczej jest to zamieniane w czasie kompilacji a tutaj jest 'troszkę' wolniej. Czy można to jakoś przyspieszyć? Procesor - avr atmega32, kompilowane i analizowane w avr studio.
Sciag sobie CoolEdit, tam mozna ładnie zapisac plik wave jako plik tekstowy - ciag próbek - dzieki temu ładnie widac o co w tym chodzi. Konkretnie - dzwiek cyfrowy to jak wiadomo sygnał dyskretny, ciąg kolejnych próbek dzwięku. Przy 16 bit'ach i 44100Hz bodajże, masz 44100 próbek sygnału na sekunde, każda próbka opisywana jest przez liczbe 16-bitową,...
Pytanko z cyklu "jak to robicie?" :-) Załóżmy, że w projektowanym układzie mam port A skonfigurowany następująco: PA.0...PA.4 - skonfigurowane jako wejścia PA.5...PA.7 - skonfigurowane jako wyjścia. Chciałbym jednym poleceniem odczytać pierwsze pięć bitów. Oczywiście mógłbym odczytać cały port: zmienna = portA i wykonać stosowne operacje bitowe na zmiennej,...
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.
Jak tablicę char, a za moment jak int (w tym przypadku nie jak tablicę int ;) ). Instancja unii alokuje tyle pamięci, żeby pomieścić największy ze swoich elementów. Tę samą pamięć traktować możesz jak typy które zadeklarowałeś, w tym przypadku ten sam fragment pamięci traktuję raz jak int, a raz jak tablicę char. Jeżeli nie musisz odwracać reprezentacji...
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...
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,...
Podsumowanie: 1. Używając struktur z polami bitowymi w Keil µVision, nie należy używać kwalifikatora __packed , ponieważ powoduje on nadpisywanie "nadprogramowych" bitów w rejestrze. 2. Symulator w Keilu, nie pokazuje tego błędu, problem ujawnia się dopiero na sprzęcie. 3. Zawsze warto dokładnie sprawdzić i prześledzić, czy kompilator porozmieszczał...
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);
O ile pamiętam, to avr mają specjalne rozkazy ustawiania i kasowania bitów. Starsze kompilatory wymagały stosowania odpowiednich funkcji/makr, nowsze rozumieją zapis |= n jako ustawienie bitu i wstawiaja odpowiednia instrukcje. Zastosowanie dwóch albo więcej instrukcji logicznych zamiast pojedynczej może powodować problemy z przerwaniami - a często...
Firma Maxim Integrated zaprezentowała swój nowy 20-bitowy przetwornik analogowo-cyfrowy ADC z sukcesywną aproksymacją o maksymalnej szybkością próbkowania wynoszącej 1,6 MS/s. Jak twierdzi producent, urządzenie oferuje, najwyższą rozdzielczość oraz największą szybkość próbkowania w stosunku do pobieranej mocy. W porównaniu do przetwornika ADC o architekturze...
Dodam jeszcze jedną cegiełkę: AVRy mają specjalne rozkazy do atomowych operacji na bitach rejestrów układów peryferyjnych. Umożliwiają one ustawienie i skasowanie pojedynczego bitu: - sbi - set bit - cbi - clear bit Jeśli więc kompilator jest na tyle zdolny, że potrafi z nich korzystać to operacje ustawiające (lub kasujące) pojedyncze bity rejestrów...
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...
Operacje arytmetyczne i logiczne w procesorze wykonuje jednostka arytmetyczno-logiczna (ALU). Generalnie ma dwa wejścia i jedno wyjście (np 32bitowe dla procesora 32b) i współpracuje z rejestrami procesora o takiej szerokości. Dodatkowo ma wejście i wyjście do przerzutnika przeniesienia, przerzutniki flag (informacja o przepełnieniu w ostatniej operacji)...
Chciałem to zrobić, aby lepiej rozumieć asemblera. A jak się ma asembler do bramek i tablic Karnaugha? Czy chcesz zbudować własny procesor, czy zrozumieć asembler istniejącego procesora. Same operacje w asemblerze nie wymagają znajomości rozbudowanych układów logicznych na poziomie bramek. Wystarczą operacje logiczne i arytmetyczne na liczbach zapisanych...
Witam. Chcę przerzucić z jednego komputera 32 bitiwego na drugi komputer 64 bitowy mały program .exe, który odpowiedzialny jest za zmianę ustawień tokarki CNC. Na początku miałem problem z samych uruchomieniem programu ponieważ pokazywało mi że brakuje pliku comdlg.ocx. Przerzuciłem go z pierwszego pc na drugi pc do folderu sysWOW64 i wykonałem polecenie...
Czy ktos wie jak zrealizowac podstawowe funkcje arytmetyczne ( dodawanie ,odejmowanie, dzielenie mnożenie) na liczbach 16- bitowych w procsorze 99c51.
Dokładnie o to chodzi. Np. wpisując do pamięci typu ROM32Kx8 liczbę 16 bitową, (a ta pamięć ma 15 wejść adresowych) jak zrobić dzielenie 1 przez wprowadzoną liczbę? Proszę o jakieś dalsze wskazówki i ewentualny szkic. Błagam pomóżcie, bo czas mnie nagli. Czy ktoś to robił w programie Pspice?
Maleńka sugestia: Dla AVR cykl rozkazowy trwa ułamki us (0,25 dla X-tal 4MHz) a odczyty z LCD to czasy w us. Moim zdaniem powtórne impulsy na E następują za szybko (zalecne nop'y po opadającym zboczu E). Sprawdź to w nocie katalogowej HD44780 wiem, że była dostępna na www.ep.com.pl. Ponadto brakuje mi przełączeń linii portu D podpiętej do R/W (DDRD...
Nie... dzielenie wymaga więcej cykli procesora... (zależy też jaki sie używa procesora ale zawsze dzielenie jest bardziej cyklochłonne od przesówania binarnego) jeśli to procesor ośmio bitowy a program ma być w assemblerze to nawet nietrzeba takich operacji wykonywać gdyż można odrazu podzielić wyraz na dwa bajty poprostu odczytując starszy bajt a potem...
Pokaże Ci przykład dodawania dwóch liczb wiecej jak 8 bitowych (i mniejszych niz 16 bitów), przykład ten znalazłem w ksiązce "Mikrokontrolery AVR w praktyce " Jarosława Dolińskiego ; dodaj dwie liczy 16-bitowe r1:r0 + r3:r2 add r2, r0 ;dodaj młodsze bajty adc r3, r1 ; dodaj starsze bajty z przeniesieniem Więcej przykładów operacji arytmetycznych znajdziesz...
Zastanawia mnie czy za brednię uważwsz możliwość wykorzystania rejestrów DPTR, czy może fakt, że występują `51 z dwoma takimi. Jeśli błąd to przepraszam, ale chciałbym się dowiedzieć na czym polega, żeby już go nie popełniać. PS: 2 rejestry mają 89SXX oraz 8252 Za brednie uważam sugerowanie użycia DPTR'a do operacji arytmetycznych - wynika to z budowy...
Jeżeli to pytanie do mnie, to tak, to będzie działać. Do tak zdefinowanych bitów odwołujesz się jak do normalnej struktury, czyli możesz na niej wykonywać wszystkie operacje, jak na zwyczajnej zmiennej. Oczywiście musisz uważać, żeby nie przekroczyć zakresu zmiennej bitowej - jeżeli ma ona 3 bity, to wartość maksymalna jaką może reprezntować wynosi...
Witam wszystkich. Mam do napisania pod 8051 program ktory bedzie zamienial szesnastkowa 16 bitowa liczbe na pieciocyfrowa dziesietna (wiec szesnastkowe bierzemy z takiego przedzialu aby najmniejsza dziesietna wyniosla 10000 a najwieksza 65535). Wymyslilem sobie cos takiego, ze dziele liczbe startowa przez 10000 bez reszty i zapisuje wynik, ktory nastepnie...
A czy zauważyłeś , że 2-ga linia Twojego źródła (tam gdzie wstawiłem znaki zapytania) "nic nie robi" :?: Zamiast: zmienna_long |= (zmienna_byte <<2) & 3; mógłbyś napisać: zmienna_long |= 0; lub tę linię pominąć , bez żadnego wpływu na wartość "zmienna_long", bez względu na wartość "zmienna_byte" :wink: Wynikiem operacji ... (zmienna...
>Przeczytaj kolego tamtem swój post i objasnij co miałeś na myśli, bo to jest jeden wielki chaos, z którego nie wynika żadna w sumie użytaczna myśl - no może poza jedną: liczby od cyfry nie odróżniasz. Nie do konca rozumiem co miales na mysli - nigdzie nie robilem roznicy pomiedzy cyframi i liczbami - wiec zwroc uwage na to co komentujesz. Nie wiem...
Jeśli chodzi o flagę C - błądziłem ponieważ wszędzie piszą tylko o jej ustawianiu gdy wynik odejmowania ujemny a nie pisze nikt o jej zerowaniu jak wynik dodatni lub równy 0 i dodatkowo zaznacza się aby ją przed odejmowaniem zerować co dodatkowo wskazuje iż nie robi tego operacja odejmowania. Po moich rozterkach chyba widać iż na codzień władam językami...
OK pierwsza linijka: deklaracja wskaźnika s. druga linijka: &f - pobranie adresu w pamięci zmiennej f (jest ona typu float). Ta operacja zwróci wskaźnik do float, czyli float*. Ale zamieniamy to na char*, więc wykonujemy rzutowanie (char*)&f. Wskaźnik s będzie wskazywał na adres zmiennej f, ale jest typu char*, więc działa jak wskaźnik do tablicy charów...
Fajny programik, dzięki, sam algorytm zamiany z U2 znam, ale nie wiem jakich komend użyć do operacji na bitach tj. złanczanie bajtów, przesów bitów, czy dodanie bajtów ?
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ł...
nie mozna sie do niczego w pamieci odwolywac bitowo, bo pamiec jest ilustam bitowa (np 8). dlatego rozwiazac da sie to JEDYNIE posrednio. odwolujac sie do danego miejsca w pamieci wczytujesz cale slowo pamieci, nastepnie przy uzyciu funkcji logicznych mozesz sobie wyzerowac nieinteresujacy cie kawalek (np przy uzyciu prostego ANDa). mozesz sobie wiec...
Trzeba wykorzystać: - kwalifikatory bitowe dla zmiennej: np. Portb.1 = A.b i pętlę FOR b=7 TO 0 STEP -1 lub - polecenie SHIFTOUT.
A tak BTW. to czy przypadkiem Twoja zmienna 'kwarc' nie jest 8mio bitowa...jeśli tak, to czemu próbuje wpakować jej taką liczbe? Kompilator wrzuci Ci do niej tylko ostatnie 8 bitów. adamusx ma racje, tutaj lepiej walnąć define'a. Najlepiej o nazwie F_CPU - niektóre biblioteki używają tej wartości, wiec warto sie do niej przyzwyczaic.
ja nie znam do konca asm AVRow, ale czy ktorakolwiek ze zmiennych bioracych udzial w tej operacji nie jest zadeklarowana jako signed? (brak definicji signed / unsigned oznacza domyslnie signed) +0000010E: FD97 SBRC R25,7 Skip if bit in register cleared +0000010F: 95A0 COM R26 One's complement pozatym rotacja ktora tam widac nie jest do konca...
Timer0 i Timer1 mają wspólny preskaler, Timer2 ma osobny preskaler. Poczytaj o resetowaniu preskalera w dokumentacji. U Ciebie jest inny błąd, w przerwaniu OC2 zmieniasz TCCR1B zamiast TCCR2. Co do zaokrąglania, to 1/76000 jest obliczane wg. zasad arytmetyki liczb całkowitych, a więc wynikiem operacji jest 0. Najprościej policzyć to tak: OCR0 = (1000000+76000/2)/76000;...
Potrzeba Ci liczby stałoprzecinkowej, a nie zmiennoprzecinkowej. Na chłopski rozum - wykonuj operacje na liczbach -1, -2, -4, 0, 4, 2, 1. Jeśli musisz wyświetlić wynik, to interpretuj go jako wynik/8. łopozycyjny (number_format) Pozdrawiam, Dr.Vee
no dobra panowie czyli potrzebuje zmiennej 64-bitowej. Doszedlem do tego ze jak sie dwie zmienne 32-bitowe pomnozy to pierwsze 32 bity sa w rejestrze $hi a kolejne 32 w $lo. No i niestety mam ten wynik rozbity na 2 rejestry a jak chce mnozyc to musze przez jeden rejestr. Jakos da rade to zrobic??
Niestety, nie mogę się zgodzić z kolegą. Dobrze napisałem, MIPS - million instructions per second to milion rozkazów/operacji na sekundę. Jest to miara wydajności mikrokontrolera.
Tak BTW to w 16-bitowych PICach odczyt i zapis do portu trwa zapewne tyle co w AVR, mają więcej pamięci, 16-bitowe porty i śmigają na 40MHz No tak, tylko znowu nowy procesor, nowa architektura, ale dzięki za naprowadzenie na taki trop. Swoją drogą sprawdziłem, że STM32 potrafi wysyłać na port dane z prędkością znacznie powyżej 18MHz, niestety dopiero...
Jeżeli chodzi o tego typu wyrażenia: PORTC = (PORTC&0xf0) | (instr&0x0f); to radzilbym calość po znaku '=' ograniczyć nawiasami, bo tak to jak dla mnie najpierw na port wpisujesz 0xf0 a dopiero pózniej są wykonywane operacje logiczne. Zrób tak: PORTC = ((PORTC&0xf0) | (instr&0x0f)); i testuj czy...
Program w pascal-u który zamienia zmienną byte na jej reprezentację bitową : program Project2; uses CRT; FUNCTION Dec2Bin(Dec:byte):String... var B1:byte; Bin,BinDigit:STRING; begin BinDigit:='01'; Bin:=''; repeat B1:=DEC MOD 2; DEC:=DEC DIV 2; Bin:=CONCAT(BinDigit[B1+1 ... until DEC<1;...
swoja droga dziwne ze kompilator nie wywalil nawet warninga..(avr-gcc). Myslalem ze trzeba podawac cala postac bitowa 0b100 też jest całą postacią bitową tyle że kompilator uzupełni sobie zera od lewej 0b00000100
Jeszcze tylko jedna uwaga co do Przecież przeniesienie trzeba uwzględnić i wstawić do rejestru bo jak nie to przy następnej operacji dodawania bit carry się wyzeruje i stracimy informację... czy może się mylę? Masz rację. Przeniesienie trzeba pamiętać o ile gdzieś dalej (daleko dalej :-)) będziemy robić operacje na wyniku, ale rezerwowanie do tego celu...
Rozumiem, ze o sposobie realizacji instrukcji w CPU wnioskujesz z zapisu mnemonicznego? Gratuluje. Zreszta jak w przypadku AVR okreslisz ile bitow ma ALU, skoro jak pisza w dokumentacji, wszystkie 32-rejestry sa polaczone z ALU *JEDNOCZESNIE*. Z kolei czesto R0:R1 dziala jako 16-bitowy rejestr wyniku. Kolejna sprawa to fakt, ze smiesznie by bylo opierac...
| jest operacja OR. Zapewne w jakims pliku naglowkowym masz: #define PIO_PA16 (1<<16) Kompilator wpierw przesuwa jedynki na odpowiednie miejsca. Potem tak powstale slowa ORuje ze soba. W efekcie otrzymujesz jedno slowo (nie bajt).
No bez przesady. Programuje się go akurat trudniej, przecież masz różne tryby 16 i 32 bitowe, złożone adresacje itd. A co mnie to obchodzi pisząc w C albo C++? Nic. Programuje się to prościej, m.in. dlatego że jak chce mieć stałą we flashu, to piszę "const" i już, a nie niekończące się zabawy z PROGMEM i wszystkie związane z tym problemy (różny sposób...
I bardzo dobrze, bo ten system jest strzała wart. Skoro jest strzala wart, to nie musisz go uzywac. Win7 x64 jest jedynym systemem pochodzacym od MS ktory znam i ktory potrafi bezawaryjnie pracowac na komputerze wlaczonym miesiac, czy 2. Nie zaleznie od ilosci przeprowadzanych instalacji, konfiguracji systemu, grzebania w rejestrze, czy wykonywania...
Jeśli w tym ramie nie ma linii wyboru bajtu (upper/lower byte lane), to zapis o mniejszej szerokości niż pamięć realizowany jest zapewne przed odczyt słowa o "naturalnej" wielkości, zmianę jego części a następnie zapis całości z powrotem - nie jest to operacja atomowa. Jest to jednak jedynie moja hipoteza. Możesz podejrzeć, czy przypadkiem kompilator...
Dziękuję za odpowiedzi. Kol. Ashures odpowiadam: (1) niektóre „flagi“ przyjmują więcej stanów niż 0 i 1; konieczne są złożenia operacji AND i OR, (2) kompilator IAR realizuje dostęp do pól bitowych optymalnie , używając minimalnej ilości operacji OR i AND, (3) przedstawiony problem wynika generalnie z braku instrukcji procesora wykonujących...
O bit-bandingu szukaj w dokumentacji ARMa. Chodzi o to, że w pewnym obszarze SRAM lub IO są bity, które w innym obszarze mają własne adresy 32bitowe Cortex™-M3 Technical Reference Manual Normalnie w ARM operacje na poszczególnych bitach w komórkach pamięci lub w rejestrach peryferiów odbywają się na zasadzie odczytaj-modyfikuj-zapisz. Operacja...
tylko, że funkcja void nie może zwracać wyniku i chyba w tym wypadku w ogóle wykorzystanie funkcji traciło by sens (?) ..ale operacja na wskaźnikach to już jest jakiś niezły pomysł..