Dzięki za odpowiedź! Chodzi bardziej o to, że mam dwa rejestry, w nich w postaci U2 zakodowaną liczbę, mam też funkcję do konwersji na normalny kod binarny. Chciałem wykonać mnożenie dwóch rejestrów, przez inne dwa i wynik, zapisując do czterech rejestrów, przesłać do LCD do wyświetlenia. No chyba, że czegoś nie zrozumiałem w Twoim poście, co jest bardzo...
Witam. Mam taki problem z asemblerem. Chciałem przemnożyć rejestr ecx przez liczbę 5 z wynikiem w ecx. Czy istnieje taki rozkaz, który to realizuje a jeżeli tak to jak się go definiuje. Zaznaczam, że używam masma'a. Pozdrawiam.
Przeniosę to przerwanie i tablice do plików .c. Ale wtedy w pliku głównym .c mam includować plik przerwania .c? Myślałem, że tam inkluduje się tylko pliki .h Nie musisz include'ować pliku .c, a nawet nie powinieneś. W Makefile dopisz go tylko do plików źródłowych (SRC = $(TARGET).c przerwanie.c inny_plik.c itd.) a linker odwali resztę roboty. Zostało...
Oj nie tak, sympatyczny kolego wygląda mnożenie. MOV B,#10000 ten rozkaz jest błędny, jak i następny ze względów formalnych. Nie da się do bajtu (osiem bitów) załadować wartości większej niż 255. Łap mnie na GG jak będę online i wtedy wytłumaczę ci jak to zrobić.
Zastąp mnożenie wielokrotnym sumowaniem. Ma to wyglądać dokładnie jak mnożenie w słupku na kartce tyle że na liczbach binarnych tj: jeśli na danej pozycji w drugiej liczbie jest 1 to musisz wykonać dodawanie. oczywiście pierwsza liczba musi być proporcjonalnie do bitu przesunięta w lewo. 1101 x 1010 --------------- 1 x 1100 0 x ---- 1 x 1100 0 x -----...
DIV AB “DIV AB” a) ang. „divide” – podziel b) 8−bitowa liczba bez znaku, znajdująca się w akumulatorze jest dzielona przez 8−bito− wą liczbę z rejestru B. Cześć całkowita ilora− zu wpisywana jest do akumulatora, a reszta z dzielenia do rejestru B. W przypadku gdy dzielnik jest równy 0 (B=0) to po...
Wersja "pro" :) int szybkie_mnozenie(int a, int b) { int c=0; while(b) { if(b%2) c+=a; a*=2; b/=2; } return (c); } Sprawa jest elementarna. Wiadomo, że mnożenie liczb kosztuje sporo czasu procesora. Zatem ktoś wymyślił algorytm zamieniający "kosztowne" zwykłe mnożenie na równoważny zbiór sumowań i mnożen przez 2, co dla dowolnego procesora jest drobiazgiem...
Witam. Czy potrafi ktoś pomóc mi z zadaniem z assemblera? Mam do napisania program, który mnoży dwie liczby 5 bajtowe (40 bitów) szesnastkowe oraz podaje wynik również w tym systemie (tylko wynik będzie wtedy 80 bitowy). Problem polega na tym, że do tego mnożenie trzeba wykorzystać algorytm, ponieważ instrukcja mul nie działa dla tak dużych liczb. Mnożenie...
witam i podziwiam :) nie chce mi się wyciągać ZX z szafki i znowu gapić się w ten zielony monitor :) Dzięki Sinclairowi za Spectruma ! gdyby nie ten komputer to nie znałbym się na mikroelektronice. Rok temu przesiadłem się na PCta, i przekładam swoje programy na intelowskie mnemoniki '25 * 255 ORG 0 ; jeśli to "samoróba" ORG 32768 ; jeśli...
Prawdopodobnie (bo jest późno) oryginalna proceura bedzie działać pod warunkiem że dobrze umieścisz dane wejściowe tzn ze wpiszesz jedną liczbe 16 bitową na początku do wyniku na mniej znaczących pozycjach. Wtedy po drodze przesuwając bity wyniku równiez przesuwamy jeden z czynniku iloczynu co czyni algorytm szybszym. A tak nawiasem mówiąc to można...
Szkoda. Wprawdzie potrzebowałem 24MHz i ucieszyłem się że ten na 20MHz chodzi i na 24MHz. Ale liczyłem na to że jak zdobędę ten na 24MHz to łyknie ze 30MHz. Szczególnie że okazało się że 24MHz mi nie wystarczy. Wczoraj przypadkiem odkryłem w datasheecie dodatkowe rozkazy (muls, mulsu, fmul, fmuls, fmulsu, movx, lpm, Rx, Z, lpm, Rx, Z+). Pomoc BASCOMa...
Ale o co Ci chodzi, o to czy to jest prawidłowa operacja czy szukasz jakiegoś konkretnego układu scalonego? Chodzi o to, że szukam układu scalonego, bo zrobiłem takie coś na bramkach ale wyliczyłem, że przy większej ilości bitów to trochę sporo bramek wyjdzie, więc myslałem, że istnieje taki scalak Dodano po 5 Nie ma czegoś takiego, co więcej nawet...
Witam, Musze zrobic szybkie przerwanie od timera w atmega162. W związku z tym nie moge sobie pozwolic na korzystanie z pamięci SRAM i stosu, więc zostają tylko rejestry, wystarczą 3, w tym dwa wskaźnikowe np. X. No więc w właściwym programie te rejesrty nie mogą byc użyte, ani modyfikowane. Czy da się to zrobic w AVG-GCC? Przepisywanie dużego fragmentu...
Przesuwanie w lewo (odpowiada to mnożeniu przez 2 lub jej potęgę zależnie od ilości przesunięć) Na wejście D przerzutnika na pozycji i-tej podajesz wyjście Q przerzutnika z pozycji (i-1) {czyli tego po prawej stronie mówiąc obrazowo}, na wejścia CLK przerzutników podajesz równolegle sygnał zegarowy. Na każdym narastającym zboczu dany przerzutnik zapisuje...
Witam wszystkich bardzo serdecznie. Jestem dość nowy i mam nadzieje, że nie urażę niczyich ambicji tym tematem. Podobny był wprawdzie już poruszony ale nieco jednak "z innej beczki" Przeszukałem zasoby internetu i nie znalazłem jednoznacznej odpowiedzi na temat mnożenia ułamków. Oto mój problem: Chcę obliczyć funkcję typu: y = -0,5513x2 + 10,1564x1...
Przesuwa sie w prawo bo na ostatnim miejscu nic już sie nie zmieni i dodaje sie wprost wartość jak sie okręci rejestrem określona ilość razy to i tak wyjdzie dokładnie to co ma wyjść może to troszkę bez logiki ale działa jak powinno. A wynika to z tego że rejestr z wynikiem jest 16 bitowy składa sie z 2 rejestrów. Jak kolega by chciał przesunąć liczbę...
To jest to o co mi chodziło, ale mam pytanie i niejasności związane z tym tekstem, bo nie mogę go zrozumieć i narysować. Nie chce być lamą ale to jest takie zagmatwane, że brakuje mi pomysłów: (2 sumatory 4 bitowe, 2 rejestry 4 bitowe pamiętające wynik) Wyjście sumatorów podajesz na wejście powyższych rejestrów, Na jedne z wejść np a0,a1,a2,a3,a4,a5,a6,a7...
o dzizas kolejny skalany bascomem przetwornik AC ma rozdzielczosc 10 bit (zakladam ze rozumiesz co to rozdzielczosc). Oznacza to, ze moze on "rozroznic" 1024 wartosci napiecia (ma tyle progow - jak wartosc jest ponizej progu to jest jakas wartosc a jak powyzej to o 1 wieksza). Poniewaz napiecie odniesienia tegoz przetwornika wynosi 2.56V oznacza to,...
Witam, Pojawił się ostatnio u mnie taki problem. Otóż odczytuję z przetwornika ADC ATmegi16, z kanału ADC0 wartość napięcia (od 0 do 5VDC). Wyświetlam sobie wynik konwersji na LCD i wszystko ładnie działa (liczba na LCD zmienia się w zakresie od 0 do 1023, jak kręcę potencjometrem). Chciałem sterować tym napięciem podłączonym do ADC0 obrotami silnika...
Błędem jest to, że przesuwanie rejestrów Multiplier i wynik jest taktowane tym samym zboczem zegara co dodawanie rejestru wynik do Multiplicand. Zawartość rejestru wynik jest w tym czasie nieustalona. To że jest typem inout nie ma znaczenia, ponieważ syntezer ze składni programu i tak wie, że musi ze zmiennej Multiplier utworzyć rejestr przesuwny.
Witam wszystkich potrzebuje pomocy mam do napisania program który liczy iloczyn liczb BCD. Napisałem program w którym mnożna jest obojętnej długości natomiast mnożnik na razie jest z jednej liczby niestety ten program mi nie chce poprawnie działać.Bardzo prosił bym o pomoc poniżej wklejam mój kod. #include<iostream> using namespace std; void iloczyn(char...
Już mówiąc chociażby tylko "przesunąć argumenty o 1 bit", robisz układ nie iteracyjny w sensie układów logicznych kombinacyjnych , a o czysto kombinacyjny dam głowę tu chodzi. Bloki to komórki iteracyjnego układu logicznego kombinacyjnego , połączone ze sobą w jednakowy sposób . Czyli ma tu nie być nic innego oprócz właśnie bloków . Jeśli cokolwiek...
O matko bloków CLB... Układ DSP48A ma możliwość potokowania wejść (podwójne rejestry A i B) i wyjścia, jak to tylko mnożenie, rejestr P. W takim wypadku nie będą załączone jak użyjesz w jednym takcie *, co spowolni cały układ bo zwiększy się ścieżka krytyczna. Ja bym wolał mieć większą kontrolę i wrzucił to jak zwykłą nową instancję i zapodał odpowiednie...
[syntax=avrasm] ; PODPROGRAM MNOZENIA LICZB DWUBAJTOWYCH ; PISAL I TESTOWAL: MIROSLAW LACH, AVT ; WEJSCIE: ; R0 - ADRES NAJMLODSZEGO BAJTU MNOZNEJ ; R1 - ADRES NAJMLODSZEGO BAJTU MNOZNIKA ; WYJSCIE: ; ILOCZYN JEST UMIESZCZANY W MIEJSCE CZYNNIKOW ILOCZYNU, GDZIE ; ZLOZENIE BAJTOW (R0-1):(R0):(R1-1):(R1) DAJE WYNIK ; (R0-1) - BAJT NAJSTARSZY, ZAS R0 I...
Jak zwykle jesteś Wielki Zumek:) A teraz jeszcze pytanie z innej beczki:) Jak, pomnożyć liczbę 255 raz 4,8? :P Bo fmul z tego co widzę umożliwia mnożenie ułamków mniejszych niż 4... [1N,7Q] Powiedzmy, ze wiem, ze mogę pomnożyć 255*48 i odpowiednio wyświetlić przecinek (za pomocą mul). A jak chciałbym użyć fmul? Pozdrawiam Łukasz
Mnożenie przezd dwa przesuwa o jeden bit w lewo przykłądowo mając liczbę 16bitową: 0111011100000011 po pomnożeniu przez 2 otrzymamy 1110111000000110 po kolejnym pomnożeniu przez 2 otrzymamy 1101110000001100 Dzielenie przesuwa w drugą stronę czyli w prawo Mozesz użyć zmiennej 16bitowej a po przesunięciu wyłuskać interesujące 10bitow i przepisać na PORT...
Znam to kombinowanie jak koń pod górę.. ;) Zazwyczaj jak chce się zrobić taki zabieg to jedna linijka ale w Lua to może być wyzwanie więc powodzenia :) Możesz tez to obejść i przesunięcia bitowe potraktować jako mnożenie bądź dzielenie przez 2*n czyli np.: <<3 jest równoważne pomnożeniu wyniku przez 8
Dopisałem do poprzedniego mojego postu coś takiego, ale pewnie nie zdążyłeś zobaczyć. W bibliotekach STDPeriph znalazłem w definicjach coś takiego: Tutaj następuje mnożenie rejestru CR2 właśnie z tym bitem. O coś takiego chodzi?
Co to ma być? (BLUE_LED_PIN << 1) Tak realizujesz mnożenie? Nadpisujesz rejestr.
Piszę sobie szczęśliwie kody baremetal na ARMy w RPi3 i RPi4. Nie wnikałem w szybkość pracy bo i tak była duża. Ale potrzebowałem mocno zoptymalizować jeden algorytm, i dodałem sobie licznik cykli. I się mocno zdziwiłem. Kod jest najprostszy z możliwych. Czysty baremetal, nawet bez przerwań. Wzorowany na tym: I moja funkcja: cortex_a72_software_optimization_guide_e...
Druga część artykułu o najtańszych nowych mikrokontrolerach z roku 2017. Ekosystem developerski Środowisko developerskie mikrokontrolera ma ogromny wpływ na jakość pracy z nim i w konsekwencji - na produktywność. Na to składają się różne czynniki – jakość IDE, dostępne biblioteki, płytki rozwojowe, debuggery, kompilatory, etc. Wiele z tych czynników...
Witam, piszę aplikację na ARMa, która wymaga wielu mnożeń oraz sumowań(głównie macierzy). Pomyślałem więc o zastosowaniu stałego przecinka, który mógłby przyspieszyć tę operację dość znacznie. Z tego co się zorientowałem, to wykonanie operacji mnożenia 2 floatów w procesorze STM32F103VE zajmuje 47 instrukcji (wg. CrossWorks). Teraz mam funkcję mnożącą...
1. Podrzucę Ci pomysł, pomocny lub nie. Zrobiłem PWN Atmega8 (czyli straszny dziad) generator miłego dla ucha sinusoidalnego dźwięku (w oparciu o przerwanie timera). Czystość uzyskałem, gdy na samym początku przerwania ustawiałem wartość ze zmiennej do PWM, a potem mogłem ją sobie opracowywać "na nastepny raz" do woli, nieczuły że obliczenia (mnożenia,...
Witam! Dziękuje za wszystkie odpowiedzi i pomoc :) jak tylko moglem zacząć to mi bardzo pomogły:) Jednak mam nadal pewien problem z tym projektem. Mianowicie nie umiem w nim znaleźć błędu w działaniu (sama idea wydaje się być dobra). Wiem oczywiście ze złe mnoży ale nie wiem w czym tkwi problem. O to jak wyglada projekt(plik jpg): Generalnie układ ma...
Nie rozumiem początku. Operacja mnożenia daje w wyniku sklejony rejestr 16 bitowy "B,A", gdzie jest B starszą częścią. Po drugim mnożeniu wykonujesz dodawanie z tym, że sumujesz starszy bajt poprzedniego mnożenia i młodszy bieżącego. Dalej nie sprawdzałem. Wyjaśnij cel powyższego działania (może ja coś wymyśliłem :-)). A poza tym we wzorze y=ax+b jest...
272 to taka nieciekawa wartość do mnożenia. Ja zrobiłem tak: Przerwania z TIM0 i TIM1 TIM0 zlicza impulsy z wejścia zliczającego, i gdy się przepełni jest króciutkie przerwanie inkrementujące parę 3 rejestrów. TIM1 zgłasza przerwanie równiutko co pół sekundy. Na samym początku obsługi przerwania jest odczytywana wartość impulsów z TIM0, i jest on resetowany....
Rozmiar fraktala dasz np. 6400x6400 pikseli to będzie się liczył kilkanaście, kilkadziesiąt sekund (plik ponad 117 MB). Przy 117Mb pamięci może okazać się że to już nie będzie test procesora, ale dostępu do pamięci. A w starych kompach z małą ilością pamięci nawet obsługi swap. Teraz prawdę powiedziawszy trudno coś przetestować, a już multiplatformowo...
Tak, na pewno będzie dobrze... Twój program przecież nie wykorzystuje dzielenia, mnożenia, operacji na dużych liczbach, kopiowania dużych obszarów itp, no nie? To też są funkcje biblioteczne... NIGDY nie masz gwarancji, że kompilator nie dołączy sobie jakiejś typowej funkcji, która korzysta z rejestrów. 4\/3!!
Ja wychodzę z może przewrotnego założenia że uczyć się nie ma co. Osobiście nie uczyłem się nigdy. Po prostu stosowałem rożne rozwiązania. Myślę że nie ma więc sensu roztrząsać jakich konkretnie procków ARM się uczyć. Ja zaczynałem od LPC2xxx, i przesiadka na STM32 wydawała się kosmosem (jakoś dziwnie konfigurowane peryferia (i nie mówię o bibliotekach...
Witam We wszystkich materiałach typu tutorial czytam: imul ebx; - pomnożenie zawartości rejestru EAX przez zawartość rejestru EBX, wynik mnożenia zostanie zapisany w EAX imul dword [dana]; - pomnożenie zawartości EAX przez 32 bitową liczbę zapisaną pod adresem wskazywanym przez etykietę dana, wynik mnożenia zostanie zapisany w rejestrze EAX Przykład:...
Witam serdecznie wszystkich użytkowników ! Chciałbym zaprezentować działający projekt nad którym spędziłem z grubsza pięć i pół roku, a licząc dokładniej około 6000 godzin. Pewnego majowego dnia roku 2014 poczułem niezrównaną chęć poznania dokładnej zasady działania dość banalnego sprzętu jakim jest kalkulator. Niby jest to proste urządzenie i tak oczywiste,...
Jak masz wspólną magistralę do pamięci z kilkudziesięcioma/kilkuset procesorami to ile z nich w danym zegara cyklu może korzystać z pamięci?! Jak masz wspólną bazę danych z kilkudziesięcioma/kilkuset użytkownikami to ile z nich w danym momencie może korzystać z danych?! Nie mów że tylko jeden. Może nawet wszyscy na raz! Zależy od organizacji kontrolera...
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)...
Jeżeli do celów edukacyjnych to ja bym to widział tak: Licznik zliczający w tył, do którego możesz wpisać wartość początkową (mnożnik powiedzmy) Rejestr mnożnej (drugiego czynnika) Sumator szesnastobitowy (na przyklad dwa osmibitowe połączone kaskadowo) Wyjscia sumatora, podajesz spowrotem na wejscia (odpowiedniego słowa oczywiście), na wejścia drugiego...
Masz napisać procedury mnożenia liczb: 1 bajtowej przez 1 bajtową (8x8) wynik będzie 16 bitowy (2 bajty) 2 bajtowej przez 1 bajtową (16x8) wynik będzie 24 bitowy 3 bajty 2 bajtowej przez 2 bajtową (16x16) wynik będzie 32 bitowy (4 bajty) Procedura przebiega tak w kodzie naturalnym binarnym: 1. Przygotowujesz rejestr wyniku o długości równej sumie ilości...
bez urazy, kolego olekewaagata, zanim zaczniesz kogoś pouczać przeczytaj tekst ze zrozumieniem! ;)) Autor wątku miał problem z propagowaniem przeniesienia - moja odpowiedź dotyczy DOKŁADNIE zalecenia, jaką instrukcją uwzględnia się przeniesienie. A podany przeze mnie przykład dotyczy sumowania, z jakim ma problem autor - czyli dokładnie liczby _16bit_...
Dodaje kod do zapisu daty i czasu w PCF8563 [syntax=basic4gl] '********************* Funkcja ustawiająca zegar PCF8563 Sub Settime_pcf Ssek = Makebcd(s) 'sekundy Mm = Makebcd(m) 'minuty Hh = Makebcd(h) 'godziny Dday = Makebcd(day) 'dni Wwk = Makebcd(wk) 'dni tygodnia Mmonth = Makebcd(month) 'miesiace Yyear = Makebcd(year) 'lata I2cstart 'warunek startu...
Witaj, Obsługa wejść i wyjść analogowych jest prosta: wartość wejścia pojawia się w jednym z rejestrów R3840-R3903 (CH0=R3840, CH1=R3841...itd); natomiast wyjścia analogicznie w rejestrach R3904-R3967 (CH0=R3904, CH1=3905...itd). Jak z nich korzystać? np. Twoje wejście CH0 to R3840, a wartość referencyjna jest umieszczona np. w R100 ---> wstawiasz blok...
Bo FFT jest duuuuużo szybsze. Złożoność obliczeniowa DFT to O(N^2), FFT to tylko N*log(N), gdzie N - ilość próbek. Wraz ze wzrostem N złożoność obliczeniowa FFT rośnie dużo wolniej niż bezpośredniej implementacji DFT. Dla przykładu bezpośrednia implementacja DFT dla 128 próbkek to 128^2 = 16384 operacje. FFT to około 270 operacji. Dla 1024 próbek to...
Ja też bym nie radził używać R1 jako rejestru zerowego. Bo w tym rejestrze ląduje wynik mnożenia. I po każdym wykonanym mnożeniu (i odczytaniu wyniku oczywiście, czyli gdy rejestr R1 już nie jest potrzebny), trzeba go ponownie inicjalizować wartością 0.
Witam, Potrzebuję zbudować mnożarkę dwóch wektorów o długości 512-bit każdy. Posiadam układ Spartan3E 500 dysponujący 20 mnozarkami 18x18 .Zrealizowałem mnożenie dwóch licz binarnych o długości 512 bit-ów - mnożenie wg. algorytmu "shift-add". W najgorszym wypadku mnożenie trwa 512 cykli zegara. Naturalnie architektóra ta została syntezowana do rejestrów...
Stosunkowo szybkim sposobem wyliczenia sekwencji punktów funkcji sinus/cosinus jest całkowanie równania różniczkowego układu drgającego bez tłumienia metodami numerycznymi (np. RK-4, czy Adamsa). x''=-ax przy warunku x(0)=0 ; x'(0)=1 Wyliczenie kolejnego punktu to kilka mnożeń i dodawań. W przypadku 32-bitowej reprezentacji stałoprzecinkowej ta metoda...
Witam, Widzę, że to architektura '51 - w takim razie złe forum. Rejestry A i B są 8-bitowe, więc jak chcesz tam "zmieścić" 12 bitów? Musisz zapisać 8 bitów w jednym rejestrze, a kolejne 4 w innym. Mnożenie '51 też ma tylko 8x8 bitów, więc musisz też to robic "po kawałku". O konwersję na ciąg cyfr dziesiętnych zapytaj, jak mnożenie Ci będzie już działać...
Ja mam takie zdanie że rzekoma "prostota" assemblera PICów wcale prostotą nie jest. Raz że instrukcji jest mało i żeby zrobić byle co to trzeba to poskładać ze 100 innych instrukcji (choćby mnożenie), to jeszcze jest wąskie gardło w postaci chyba tylko jednego pełnosprytnego rejestru (taki akumulator). Na AVR masz bogaty zestaw instrukcji (np. jest...
W tym przypadku buforować wystarczy tylko okno z grafiką co spowoduje mniejsze zapotrzebowanie na RAM i znacznie ograniczy potrzebny czas na wygenerowanie takiego ekranu i jego wyświetlenie. Zrobiłem dodatkowy bufor na okno z renderowanym modelem (wymiary: 120x120). Wciągnąłem go do wewnętrznego RAMu co trochę przyspieszyło rysowanie. Prędkość samego...
Pozwólcie na dorzucenie jeszcze krótkiego rysu historycznego. Jeszcze nie tak dawno silna była grupa wyznawców pisania w ASM, którzy mówili bardzo brzydkie rzeczy o C - przecież nic tak nie cieszy rasowego programisty jak "ręczne" mnożenie dwóch liczb 16bit zapisanych w U2 - tylko TAK pisze się OPTYMALNIE ;). Z biegiem czasu ich argumenty bardzo straciły...
Ja mówię o różnicach w ASM. Tych swoją drogą pomiędzy ATMega8 a 88 nie ma za dużo (w sumie nie widzę żadnych ale nie przyglądałem się specjalnie). A gdyby nawet były to rozwiązuje je kompilator C. Tak jak np. rozwiązuje brak rozkazów mnożenia w mikrokontrolerach ATTiny. Albo różnice w dostępie do rejestrów SFR poprzez STR albo OUT. Kod w C wygląda tak...
Autor poniższego zestawienia jest inżynierem i konsultantem wsparcia dla systemów wbudowanych. W swojej karierze poznał on szereg różnych architektur mikrokontrolerów, różniących się wydajnością, wyborem peryferii, poborem zasilania etc. Wybór odpowiedniego układu stanowi zawsze o sukcesie projektu. Kierować się możemy różnymi kryteriami, tak subiektywnymi,...
Dzieki wielkie za odpowiedz Zmodyfikowalem troche program liczący w HEXie a noz sie komus przyda [syntax=asm]ORG 000H START: LCALL WAIT_KEY ; czekanie na przycisk z klawiatury SWAP A ; zamiana starszych i młodszych bitów MOV R0,A ; zapamiętanie warości pobranej z klawiatury w rejestrze R0 LCALL WAIT_KEY ; czekanie na przycisk z klawiatury ADD A,R0 ;...
Jak wyglada opkode instrukcji dzielenia w AVR ? Która ATmega ma ? ZTCW jest mnożenie (MUL), mnożenie znak/bez znaku (MULS), cząstkowe mnożenie (FMUL) + znak/bez znaku (FMULS), ale o dzieleniu nie słyszałem. Jest ponadto instrukcja modulo na dwóch dowolnych rejestrach (EOR). Polecan spis instrukcji asemblera na końcu pdf-a (najczęściej dalej jest już...
Jestem praktykiem i wiem, że na avr'ach mnożenia nie da się wykorzystać, jeśli przesuwanie jest o zmienną wartość. Przesuwanie o stałą bez problemu można zrealizować przez mnożenie (na jakiej podstawie twierdzisz, że nie umiem mnożenia przez 2?), jednak nie masz instrukcji która umożliwia przesunięcie w lewo o tyle bitów jaka jest wartość rejestru (arm'y...
Witam Potrzebuje waszej pomocy, musze napisac stoper w asm. Już sie męcze z tym troche i nie chce działac tak jak powinno, więc prosze was o naproawdzenie/poprawienie błedów w kodzie ponizej. I chcialbym rowniez wiedziec, czy moja interpretacja polecen w tym kodzie jest poprawna. Sam Timer działa poprawnie. Chcialbym aby sterowanie stoperem odbywalo...
Obawiam sie że atmego bez naprawde sprytnie napisanego softu jest po prostu za słaba do tego celu. Wez po uwagę że float mnożenie to ok 2980 taktów zegara przy zmniennych typu volatile. Dla porównania. Dzielenie na pewno więcej. Dane dla innych typów danych: uint8 => 19 cycles uint16 => 24 cycles uint32 => 103 cycles int8 => 37 cycles int16 => 33 cycles...
Witam, Postanowiłem dobudować sobie do zasilacza taki oto woltomierz: Ponieważ szkoda mi 8zł na nową Atmegę 48 zwłaszcza że mam kilka Atmeg 8 postanowiłem przerobić kod (wstawiam już po zmianach) [syntax=avrasm];Automatyczny 2-zakresowy woltomierz panelowy z 4-cyfrowym wyświetlaczem LED ;Wersja 1.02 dla ATmega8, (c) 21.01.2016 by Roman Breński (RomanWorkshop)...
Zastanawiam się czy tego kalkulatora nie dało by się odtworzyć. Odtworzenie schematu na podstawie płytek, przy tym stopniu upakowania oraz szerokości ścieżek nie stanowi większego problemu. Przerażeniem napawa konieczność rozplatania wiązek przewodów łączących złącza i mozolne rozpisywanie połączeń. Pachnie niezłą gimnastyką, ale też do zrobienia....
Witam Na czwartek muszę przygotować listingi programów napisanych w asemblerze które wykonają poniższe działania: 1. Dane są liczby: A=0F1h, B=00011111b. Obliczyć binarnie A+B, A-B, B-A. Podać wynik w postaci binarnej i szesnastkowej. 2. Napisać program mnożenia x4 liczby umieszczonej w rejestrze R7 bez użycia instrukcji mul ab. 3. Napisać program...
6502 - montowany był w C64. Eh te czasy. Nie zgodzę się natomiast, że nowoczesne procesory są zbyt skomplikowane i trudne w montażu. Przecież nowoczesny procesor w moim rozumowaniu to niekoniecznie np. 4 rdzeniowiec Intela. Równie nowoczesne są chociażby ATMEL'E i PIC'E. Zważywszy na to, że instrukcje ASM procesora 6502 pamiętam bardzo dobrze, to ASM...
Witam, ostatnimi czasy zainteresowałem się (po części przez studia) programowaniem mikroprocesorów, wykorzystując program EdSim51, do początkowej nauki Assemblera. Jakkolwiek początkowe sukcesy w nim teraz napotkały na przeszkodę. Mianowicie próbowałem zacząć korzystać z programu FASMW, by pisać bezpośrednio pod Windows, i chciałem na początek sprawdzić...
Przecież wszystkie opisy komend masz w datasheet: SUBI - odejmij stałą od wartości rejestru -> SUBI r16,38 - odejmuje od zawartości rejestru liczbę 38 MUL - mnożenie bez znaku - > MUL r16,r17 - mnoży rejest r16 z rejestrem r17 a wynik wrzuca do rejestrów r1 i r0 SBIC - pomiń następny rozkaz jeśli bit w rejestrze I/O jest równy 0 -> SBIC PINB,3 - jeśli...
Układu SID (6581 stary i 8580 nowy), będącym muzyczną orkiestrą komputera Commodore 64 nie trzeba nikomu przedstawiać – między innymi dzięki jego brzmieniu owa maszyna osiągnęła tak dużą popularność. Warto tylko przypomnieć, że SID ma jedynie trzy kanały, ale umiejętności programistów potrafiły z niego wycisnąć dźwiękowe cuda. Na dzień dzisiejszy...
Witam Po latach wracam do głębszego poznania procków MSP430F a konkretnie MSP430F449 i mam problem z układem taktującym. Podłączając rezonator "zegarkowy" 32768Hz i wykorzystując ustrojstwo wewnątrz procka do mnożenia częstotliwości chcę uzyskać sygnał taktujący rzędu ok 8MHz. Postępuję według noty TI: Czy ktoś zna faktyczne wzory na konfigurację rejestrów...
Kod maszynowy - dobrze go znać, ale stosować docelowo w AVR? Język jak każdy inny. Osobiście używam w produkcji(Modbus, LCD, sterowanie fazowe, sterowanie grupowe, RGB PWM programowe, obsługa klawiatury, pamięci zewnętrznej FRAM po SPI i wiele innych funkcji w jednym układzie działające jednocześnie). To tylko kwestia umiejętności korzystania z całego...
To moja trzecia konstrukcja na FPGA ;) pierwszy był trywialny zegarek na kilku licznikach, a potem prosty kalkulatorek dodający dwie liczby. Tak więc proszę o konstruktywną krytykę i porady, co by tu można jeszcze ulepszyć. FPGA ciekawi mnie już od jakiegoś czasu, ze względu na to, że można na nim zrobić rzeczy, przy których procesory wymiękają. Prezentowany...
What? Co tu na kartce liczyć? Przecież to są operacje z początków podstawówki - mnożenie i dzielenie. Uwzględniając te wszystkie dzielniki i mnożniki oraz PLLa najbardziej skomplikowana operacja to może max 7 operacji, więc spokojnie wszystko mieści się w mojej głowie. Używam CubeMX miedzy innymi dlatego, że wpisuję częstotliwość oscylatora, żądaną...
Wiele dzisiejszych architektur powstało podczas wieloletniego procesu udoskonalania i tworzenia coraz lepszych rozwiązań, aby były one jak najbardziej doskonałe. Firmy odpowiedzialne za daną architekturę wymagają opłat licencyjnych za wykorzystanie ich dzieła w produkcie. Czy jest więc możliwe, stworzenie architektury, która była by całkowicie za darmo...
a ja sie zastanawiam.. jak by odświeżanie zrobić 5FPS a żeby czas pomiaru trwał 2 sekundy można zastosować prosty stos FIFO z 10 zmiennych. przerwanie z czujnika by inkrementowało wszystkie 10 zmiennych, przerwanie z licznika odmieżającego 1/5 sekundy by kopiowało pierwszą zmienną stosu (stos_0) do rejestru roboczego, mnożenie przez 30 i wysłanie na...
Program chyba ukończyłem: ;Program do "modyfikatora sygnału" ;Parametry techniczne dla taktowania 4MHz: ;- skrócenie czasu o wartość max ponad 2,5ms z krokiem co 10us ;- lub wydłużenie czasu o max stałą wartość ponad 20ms z krokiem co 80us ;- mnożenie czasu przez współczynnik około 1,00 do 2,55 ;- wejścia sygnałowe portB 0-3 ;- wyjścia...
Jak to zwykle na początku bywa warto ściągnąć jakiś kurs. Polecam też książkę Dolińskiego "Mikrokontrolery AVR w praktyce" (przede wszystkim bardzo dobrze opisane komendy assemblera wraz z przykładami) - przykłady są na 90S2313, ale maja 90% wspólnego z wyższymi wesjami. Ostatnio wyszła nowa książka "Mikrokontrolery ATmega w praktyce" czy jakoś tak...
DSP mają specjalne mechanizmy, które pozwalają na uzyskiwanie bardzo dużych mocy obliczeniowych w specyficznych dla przetwarzania cyfrowego algorytmach. Mowa tutaj np o filtrach FIR, gdzie robi się wielokrotne mnożenie z akumulacją. Typowe w DSP jest to, że taką opoerację jak: mnożenie, dodawania zwiększanie/ zmniejszanie kilku rejestrów, itp jednocześnie...
Witam. Z tą pamięcią programu mam kilka pytań bo się zakręciłem. Tak czytam sobie w książeczce R.Baranowskiego że rozkazowi np. lpm należy podać wskaźnik 16bit z czego Wszystkie prócz najmłodszego bity rejestru indeksowego "Z" służą do adresowania 16-bitowej komórki pamięci programy, która ma zostać odczytana......do wyboru 8-bitowej części odczytywanej...
ZAD. 1. Przygotować i uruchomić programy w języku asemblera 8051: a) kopiowania N-bajtowego obszaru TABL 1 z pamięci kodu do pamięci wewnętrznej DATA (obszar TABL2), b) kopiowania bit po bicie w pamięci DATA fragmentu danych z obszaru TABL2, a następnie bajt po bajcie i utworzenie obszaru TABL3 c) kopiowania obszaru TABL2 do zewnętrznej pamięci XDATA...
AVR-y były projektowane pod języki wysokiego poziomu właśnie po to, żeby zwykły śmiertelnik nie musiał się męczyć z asemblerem. Że co prosze?????? AVR był projektowany pod języki wysokiego poziomu? To dlaczego ma architekturę RISC (bardzo ograniczona lista rozkazów, dużo równoprawnych rejestrów itp.)? Właśnie dlatego żeby programista miał jak największą...
a ja wiem co chce zrobić , tylko nie do końca wiem jak no właśnie o to mi chodziło, po prostu z tego co już 'opublikowałeś' nie jestem pewien czy wiesz co tak na prawdę powstanie w sprzęcie z tego co napisałeś. dystans <= ((v_dzwieku / f_zegara)*(zliczone_takty)... - korekcja; Pisząc coś takiego początkowi użytkownicy nie zdają...
Pamięć ma określoną czas na odpowiedź (powiedzmy 10ns). Jeżeli procesor jest szybszy, to musi poczekać odpowiednią liczbę cykli zegarowych tak, żeby pamięć zdążyła zwrócić odpowiednie dane. To jest powód dla którego nowoczesne procesory mają pamięć cache L1, L2 czy nawet L3. Dostęp do takiej pamięci jest bardzo szybki (jeden-kilka cykli do L1, kilkadziesiąt...
1. rejestry ax-dx to rejestry ogólnego przeznaczenia. Czyli w większości przypadków nie różnią się niczym. Ale mogą mieć też specyficzne zastosowania, jak AX do niektórych operacji arytmetyczno-logicznch, BX do wskazywania adresu (zapis: [BX]), CX używany do liczenia (podobnie, jak licznik w for). xH i xL to 8-bitowe części całego rejestru. czyli AX...
Witam, Może spróbuję L #ProgramNr L 1 -I //Operacja odejmowania #ProgramNr - 1 L 242 *I //Operacja mnożenia (#ProgramNr-1)*242 L 0 +I //Dodawanie [ (#ProgramNr-1)*242] + 0 T #Temp_1 //Zapamiętuje wynik wszystkich operacji w zmiennej Temp_1 L #Segment L 1 -I //Odejmowanie (Segment-1) L 12 *I //Mnożenie (Segment-1)*12 L 2 +I //Dodawanie [(Segment-2)*12]+2...
Panowie postanowiłem wykonać test wbudowanych w atmel studio typów fixed point vs float. Na razie tylko samych _Accum z saturacją ale to co zobaczyłem nie napawa optymizmem gdzie jest błąd?Dodam że -atmel studio 7, -wewnętrzny zegar 8MHz -Atmega16. -Do pomiaru czasu używam timer 1. Najpierw kod, testujemy 4 działania +,-,*,/ dla typu _Accum i float....
A dlaczego od razu nie użyłeś mnożenia? Ależ to jest mnożenie. A to mnożenie dwóch liczb jednobajtowych wygląda mi na mnożenie jednej liczby przez 2. Tak, rozkaz ROL łącznie z LSL jest wykorzystywany do mnożenia dwóch liczb przez dwa. Dlatego kompilatory dobierają sobie do potrzeb: Zauważ, że tak, czy owak w przykładach które podałeś trzeba załadować...
Błędnę jest też przekonanie że kiedyś mikrokontrolery 8051 czy podobne (CISC) były dobre do tamtejszych zastosowań, a teraz zmieniły się czasy i lepsze są inne mikrokontrolery (RISC). Wystarczy poczytać historię rozwoju mikrokontrolerów czy ogólnie procesorów. W skrócie: Procesory się rozwijały (wtedy CISC) aż ktoś policzył jaki jest narzut na operacje...
To na przykładzie, chcesz wprowadzić np. liczbę 902: 0. liczba DW 0 1. Naciskasz 9 AL = '9' AL = '9' - '0' = 9 liczba = liczba * 10 + AL = 9 (0000 0000 0000 1001 b) 2. Naciskasz 0 AL = '0' AL = '0' - '0' = 0 liczba = liczba * 10 + AL = 90 (0000 0000 0101 1010 b) 3. Naciskasz 2 AL = '2' AL = '2' - '0' = 2 liczba = liczba * 10 + AL = 902 (0000 0011 1000...
co każda z nich oznacza? Oczywiście, chętnie wyjaśnię znaczenie każdej z tych instrukcji dla mikrokontrolera Atmega8: 1. Instrukcje arytmetyczne i logiczne: - ADD (dodawanie): Dodaje wartości z dwóch rejestrów i zapisuje wynik w jednym z nich. - ADC (dodawanie z przeniesieniem): Dodaje wartości z dwóch rejestrów oraz bieżącą wartość przeniesienia (carry)...
No! Dzięki! Rzeczywiście nie takie to trudne:) Użyj klasycznego mnożenia liczb wielobajtowych, kilka mnożeń i kilka dodawań. Klasyczne mnożenie liczb wielobajtowych, może dotyczyć liczb np. czterobajtowych? lub więcej? Gdzie o tym mogę poczytać?. Czy w trakcie wykonywania operacji wielobajtowych lepiej używać stosu czy rejestrów i przełączać się między...
Witam Jeżeli T1 pracuje jako 16 bitowy to rejestry TH1:TL1 traktujesz jako jeden 16 bitowy i tam masz wartość możesz te rejestry przenieść gdzieś indziej i dalej obrabiać (np. wyświetlić itp.), natomiast to mnożenie w podanym przykładzie wydaje mi się nie potrzebne.
Witam. Co wy na to ? Bardzo fajne, raz wklepać a potem używać, ale mam pytanko, co robi kompilator kiedy z tego dzielenia wychodzą części ułamkowe? Część ułamkowa jest obcinana, bo i tak nie da się jej wpisać w 8-bitowy rejestr licznika. Chcąc osiągnąć jeszcze większą dokładność, można próbować na mniejszej skali preskalera (np. 256) i/lub większej...
Witam! Od pewnego czasu interesuję się ?P a dokładniej najmniejszymi AVR i gdy postanowiłem zabrać się za pierwszy projekt pojawiły się oczywiście problemy. Wiem ,że po przechwyceniu wart. przez timer1 jest ona od razu dzielona na 2 części i zapisywana do odpowiednich rejestrów(ICR1H i ICR1L) i w tym momencje zaczynają się schody, potrzebuję na CAŁEJ...
Niekoniecznie, MCU ze sprzętowym mnożeniem całkiem gładko sobie z tym radzą. W jednej z implementacji szyfrowania udało mi się w assemblerze naskrobać kod szyfrujący z efektywnością 16kB/s przy 4MHz taktowania. Większość operacji odybwa się wyłącznie na rejestrach, SRAM jest używany tylko do pobrania i zapisania operandów; wszystkie zmienne robocze...
Zadanie bardzo podobne do tego poniżej, z tym, że bez mnożenia i koniecznością zapisu kolejnych n komórek (brak trzeciego rejestru indeksowego – ix i iy są już wykorzystane – trzeba wymyślić sposób adresowania trzeciego wektora innym rejestrem np. hl) .z80 bdosequ5 aseg start:org100H ; iloczyn skalarny wektorow ; struktura wektory:...
Marcin_xx1 : Optymalizacja nie polega na zamienieniu jednej linijki w inną od tak, ale na maksymalnym wykorzystaniu pewnych założeń, których nie przekazujemy jawnie kompilatorowi. Dla przykładu jeśli założymy, że wszystkie zmienne przyjmują wartości od 0 do 9, to wszystkie warunki się upraszczają (można zwiększyć bazę z 10 do (np)16 co już poczynił...
skynet_2 : Zmienne globalne jak ta, nie muszą być inicjalizowane. Ta zmienna trafi do sekcji bss, a więc na starcie będzie równa 0. Co innego zmienne lokalne funkcji, które znajdują się w rejestrach lub na stosie - te trzeba inicjalizować. Dodano po 20 Mnożenia, if'y, dodawania - rozumiem, że stanowią programową realizację rejestru przesuwanego. Trzeba...
Siles - mnożenie to może i masz opanowane, ale tu nie matematyka winna być stosowana, bo - wyraźnie - na manowce Cię wiedzie. - Twoim tokiem rozumowania idąc na koncie Admininstratora zużycie zasobów wynosiłoby 1+5 (to ta sama logika). Pierdoła z Gądek - więc wyjaśnij co w moim toku rozumienia i biorąc nawet pod uwagę matematykę źle rozumuje ? TO CO...