Niestety, Intel poraz kolejny nałożył ogromne organiczenia. mov eax,5 ; mnożnik xchg eax,ecx mul ecx xchg eax,ecx ; ecx = wynik
LJMP START START mov R3, #8 mov R4, #2 mov R5, #4; dotąd jest dobrze mov A, R3 ;add R3 -źle, dodawanie wymaga dwóch operandów add A, R4 ;add R4- jak wyżej add A, R5 ;add R5- jak wyżej mov R7,A ;mov A, R3-nie wiem co miałeś na myśli pisząc ten kawałek kodu(5 lini) ;mov A, R4 ;mov A, R5 ;mov A, R7 ;mov A, P1 mov B,#5 mul A, B mov B,#2 div A,...
Co to ma być? (BLUE_LED_PIN << 1) Tak realizujesz mnożenie? Nadpisujesz rejestr.
32 bity zajmują dwa kolejne rejestry (mimo, że wyznaczasz tylko np. R0 to R1 też będzie zajęty!); tak samo dzieje się kiedy mnożysz rejestr przez rejestr (lub inną wartość stałą) - wtedy wynik zajmuje dwa rejestry (mimo, że dla wyniku określasz pojedynczy rejestr).
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...
Co do rejestrów 32 bitowych... W oprogramowaniu MT PROG są one widziane jako np. DREG1H, DREG1L. Nie można się do nich odwołać bezpośrednio jako DREG1 Z dokumentacji: Mnożenie X przez Y zapisz wynik (rejestr) = pobierz X (rejestr) * pobierz Y (rejestr) Przekroczenie zakresu sygnalizowane jest ustawieniem flagi błędu Czy mnożąc XREG3 * XREG4, można...
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...
No teraz rozumiem. Chodzi o przerzutowanie jednego zakresu w drugi :) zwykła proporcja bazująca na szerokościach. ściągamy wszystko do wspólnej podstawy... następnie dokonujemy z proporcji obliczenia MAXx-MINx = A-B x-MINx = ? ? = ((x-MINx)*(A-B))/(MAXx-MINx) następnie należy pamiętać o przesunięciu podstawy wyniku ? = ?+B; We wszystkich powyższych...
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?
Dziękuje za pomoc. A czemu wartość rejestru mnożysz przez 5?
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...
(at)12pawel Pomimo wszystko tak na przyszłość, lepiej korzystać z bloków danych niż z rejestrów wewnętrznych PLC.
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...
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...
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.
Zmienna b jest typu uint8_t czyli ma zakres od 0 do 255. Jeżeli b==128 to to b*=2 nie da w wyniku 256 tylko 0. Warunek if (b>128) nigdy nie jest spełniony. Zmień program tak aby warunki graniczne sprawdzał przed wykonaniem dzielenia lub mnożenia. JarekC
((r4*16+r5)*16+r6)*16+r7 To raczej są bajty więc mnożenia przez 256 a nie 16.
Przenosisz do rejestrów x. Mnożenie w tym przypadku również musisz wykonać na rejestrze x. Choć wynik oczywiście w takim przypadku jest w dx:ax, to jednak możesz śmiało starszą część olać, jeśli wcześniej wprowadzi się tylko zabezpieczenie przed przekroczeniem zakresu. Dodawanie tak samo - na rejestrze x (wcześniej dla pewności możesz wyzerować część...
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...
mnożysz b*c, przerzucasz wynik do rejestru wykorzystywanego jako dzielnik, dzielisz. Oczywiście zakładam mieszczenie się w zakresach.
w sumie nie do końca rozumiem, ale pamiętaj że IMUL mnoży liczby ze znakiem i tu najstarszy bit określa znak (MUL mnoży bez znaku). CF i OF zerowany jest jeśli wynik mieści się dokładnie w młodszej części wyniku, w przeciwnym razie ustawiane
Szkoda, że płyta nie pozwoli na więcej RAM-u, ale można spróbować aby system zaczynał używać pliku wymiany później przy zapełnieniu pamięci do 90-95 %. W linku opis jak zrobić odpowiedni wpis w rejestrze. https://www.tweaks.pl/optymalizacja-wyko... Można też napisać w notatniku plik tekstowy a w treści wpisać : Windows Registry Editor...
1. Jakiego zegara używasz do taktowania USART'a? PCLK czy SYSCLK (RCC->CCIPR)? 2. Po co mnożysz * 256 w obliczaniu BR?
Witam. Wykonaj chyba coś takiego. Dowolny A+B sumator n+1bitowy i wejścia podłącz tak: A0=W0 B0=0(zero) A1=W1 B1=W0 A2=W2 B2=W1 A3=W3 B3=W2 . . . . . . An=WN Bn=Wn-1 An+1=0(zero) Bn+1=Wn Nie potrzebne rejestry przesuwne i ich sterowanie. H.
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, mam napisac program (w asm) który mierzy czas pomiędzy wcisnieciami przycisku. Zaimplementowałem to w taki sposób ze podczas przepelnienia się timera 0 zwiekszany jest akumulator, gdy ktoś znowu wcisnie przycisk to timer jest stopowany i nastepuje wyjscie z petli do czesci programu odpowiedzialnej za obliczenie i wyswietlenie wyniku. Czas zapełenia...
oki. dzieki za porady. juz sobie poradzilem. pozdr
Jeśli załaduje do DS 0h to ABCD mam wrzucone pod 0000h jeśli do DS 101h to ABCD mam w 1010h może to kwestia samego programu Czytałeś o rejestrach 8086? https://pl.wikipedia.org/wiki/Intel_8086 Dokładnie rejestr segmentowy jest mnożony przez 16.
PID na bloczkach LD to żaden problem. Proporcjonalna część to prosto, uchyb * wzmocnienie Różniczkująca część wymaga zapisania poprzedniej wartości uchybu do odpowiedniego rejestru i liczenie różniczki dyskretnej na podstawie czasu cyklu sterownika. Potem mnoży się przez wzmocnienie. Część całkująca wymaga po prostu dodawania aktualnej wartości uchybu...
:? Potrzebuje schemat i opis prostego procesora 8-bitowego w ktorym bedzie zastosowana pamiec, rejestry, ALU które wykona działania arytmetyczne i logiczne (dodawanie. odejmowanie, mnożenie) za pomoc bardzo dziekuje
Sprawdź listing assemblerowy jaki jest generowany. Też miałem niedawno dziwny problem z GCC. Niby taki banalny kawałek kodu: dana = ADCW; dana *= 31940; a okazało się że "dana" mnożona jest ale przez puste rejestry :( Musiałem przed mnożeniem dać wstawki: asm("ldi r18, 0xC4"); asm("ldi r19, 0x7C"); asm("ldi...
Witam, mam problem. Próbuję zaprojektować układ synchroniczny, który mnoży dowolną liczbę binarną przez liczbę 3. Wejście ma być podawane z rejestru nr 1, a wynik zapisywany do rejestru nr 2 (rejestry 8-bitowe jednokierunkowe). Wiem jedynie, że liczbę muszę rozbić na x << 1 + x, ale nie do końca wiem, jak to wrzucić na schemat układu na kartce....
Ja bym zrobił tak: Rejestr(y) wejściowe. Rejestr(y) wyjściowe. Rejestr konfiguracyjny/statutu Wklepujesz dane do rejestrów wejściowych. Do bitów powiedzmy 0...2 rejestru statusu wklepujesz zakładaną operację. Np: 000: dodawanie 001: odejmowanie 010: mnożenie 011: dzielenie 100: pierwiastkowanie Zapis do rejestru statusu rozpoczyna operację i ustawia...
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...
Ilu bitowa ma być ta liczba? Ogólnie takie coś można wykonać w następujący sposób: mnożysz liczbę przez dwa (czyli przesuwasz w lewo na rejestrze) i na na wyjściu takiego "przesuwnika" dodajesz liczbę wejściową.
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...
Witam! Mógłby mi ktoś podsunąć jakiś pomysł na rozwiązanie na następujące zadanie? W rejestrze mamy zapisane bity np R16=10110001. Należy wziąć dwa pierwsze bity słowa i wrzucić je na bramkę AND a wynik (jeden bit) zapisać w R17. Tak samo dla 3 pozostałych par bitów w R16 (3-4 5-6 7-8). W rezultacie w R17 wynik powinien zajmować 4 pierwsze bity. Czy...
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)...
Ej - w dokumentacji NIE MA błędu, opis tam jest klarowny i prawidłowy. Fclkout = M × Fclkin = (FCCO) ⁄ (2 × P) Z tego jasno wynika, że najpierw Fclkin jest mnożone przez 2 * M * P do wysokiej częstotliwości FCCO, a następnie FCCO jest dzielone przez 2 * P. Finalnie wartość P nie ma wpływu na częstotliwość końcową. Nikt nie powiedział, że rejestry...
Taki program mógłby wyglądać tak: Mnożna: rejestr E Mnożnik: rejestr A Wynik: rejestr HL LD HL,0000 ;inicjacja wyniku LD B,08 ;licznik pętli LD D,00 ;zerowanie bardziej znaczącego bajtu DE NXBIT ADD HL,HL ;przesunięcie wyniku w lewo RLA ;sprawdzenie cyfry monożnika JR NC, FIN ;opuszczenie zera ADD HL,DE ;dodanie mnoznej FIN DJNZ NXBIT ;powrót do początku...
Czyli przekładnia jest zaprogramowana w liczniku a wskazania w liczniku (rejestry 1.8.0 itd) są rzeczywiste - nie trzeba ich mnożyć przez przekładnię. Drugi sposób stosowany przez sprzedawcę/dystrybutora to programowanie przekładni w systemach. Wówczas wskazania licznika należy przemnożyć przez przekładnię i dopiero porównywać z fakturą.
Siemka! A ja ten problem rozwiązałem inaczej. Generalnie to po co Ci pierwsza połowa 4 cyfrowej wartości roku. Wpisz jako stałą w programie 20 i tyle. Do dyspozycji zostanie Ci 99 lat. I teraz tak. W PCF8583 Możesz zapisać w rejestrze roku do 4 lat. Zatem robisz dzielenie całkowite aktualnego roku przez 4 i tą wartość zapisujesz w wolnej komórce pamięci...
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...
Nie ma czegoś takiego, co więcej nawet jednostki arytmetyczno-logiczne (ALU) wielu procesorów nie potrafiły wykonywać mnożenia (jak choćby i8080, Z80, czy 6502). 74181 też nie potrafi mnożyć. Istnieją wydajniejsze metody numerycznego mnożenia, niż ta "szkolna", którą zaprezentowałeś (https://tutorials.eeems.ca/Z80ASM/part4... Oczywiście ona jest...
Nawet nie trzeba dzielic A/10000 wystarczy na lcd przesunac przecinek, albo pamiętać że wyniki mamy 10^4 większy. Aha sa instrukcje w tym kontrolerze do mnożenia 16-bit?
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...
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 -----...
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...
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ć...
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...
Post był raportowany. Przeniosłem z: Ogólnie
Witam, mam za zadanie napisać w verilogu układ, który oblicza wynik wyrażenia cos x, gdzie x jest podawany w formacie zmiennoprzecinkowym pojedynczej precyzji single, czyli bit znaku, 8 bitów wykładnika, 23 bity mantysy. Chciałbym się dowiedzieć głównie jak rozwiązać problem z tym zmiennym przecinkiem - jak to przekonwertować, w jakich rejestrach przechowywać,...
Dodawanie i odejmowanie z przeniesieniem to chyba najprostsze operacje ;) i wcale nie takie wolne. Mnożenie też jest szybkie. Zdecydowanie ładowanie zmiennych do rejestrów może być dłuższe. Jak chcesz mieć wydajnie to nie mierzysz czasu i tyle :) Jeśli pomiar trwa więcej jak 3% algorytmu, to imho nie ma sensu, poza początkowym testem na bawienie się...
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....
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...
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...
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...
Zasadę działania masz opisaną, a taki generator to się zwykle programowo realizuje na DSP (ze względu na mnożenie wymagane przy interpolacji). Bez interpolacji generatory można robić na akumulatorze sprzętowym (sumator+rejestr).
Witam, Windows 7 home premium x64, w rejestrze jest klucz który ma uszkodzoną nazwę (wężyki i krzaczki), nie można go otworzyć, zobaczyć właściwości, usunąć, zmienić nazwy, ani usunąć lub zmienić nazwy klucza nadrzędnego... Raczej to nie problem z uprawnieniami. Poszukuję programu który sobie z takim delikwentem poradzi. Otwarcie rejestru w RegEdit...
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
Częstotliwość pracy syntezera jest określana 13sto bitowym słowem. Ja to robię w ten sposób że zakładam w pamięci procesora dwa bajty jako rejestr częstotliwości. Można łatwo ten rejestr zmieniać UP/DWN co daje nam po jego załadowaniu do PLL zmianę częstotliwości. Rejestr ten aby wyświetlicz częstotliwość mnożę przez raster i wynik zamieniam na wartość...
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...
Witam. Odpaliłem właśnie bibliotekę freemodbus na avr i potrzebuje informacji w jaki sposób zapisać w rejestrach Read Holding registers liczbę float. Rejestry Read Holding registers w tej bibliotece są uint32_t. Ogólnie w programie działam na liczbach całkowitych. Przykładowo mam taką wartość rzeczywistą pewnej zmiennej (5,25) to mnożę ją razy 100 i...
To akurat jedyny niefart tego podejścia. 2 oznacza szerokość pola bitowego a np 5 numer pinu. Stąd te mnożenia. a to : [syntax=c]RCC->AHBENR |= 1 << 19; [/syntax] lepiej zapisać jako [syntax=c]RCC->AHBENR |= RCC_AHBENR_GPIOEN; [/syntax] Pomijając konfigurację pinów. Do konfiguracji pinów polecam skorzystać z przykładów Freddiego. Wielobitowe...
Oba sumatory służą do przeliczania temperatury z Celsjusza na Fahrenheita, pierwszy mnoży razy dwa, a drugi dodaje 30 (oczywiście wynik nie będzie dokładny, upraszczałem jak się da). Rejestr cykliczny będzie zatrzaskiwać w sobie temperaturę w pewnych odstępach czasu (zapis wykonywany "zegarem" o bardzo małej częstotliwości), następnie będzie ona porównywana...
W przerwaniu nie miało być nic. A co to za funkcja operująca na buforze?? [syntax=c]switchBuffors();[/syntax] Ciekawe jaka logika myślenia skłania do takiego pisania programów, użyję porównania: to jak drapanie się po lewym uchu prawą nogą ;). I jak napisałeś wychodzi "audio sieczka" bo tak naprawdę nie wiemy jak wygląda naprawdę plik i czym jest stworzony,...
Chyba źle zadałem pytanie, ponieważ rejestr ADC jest chyba 16bit-owy (składa się z dwóch 8bit-owych: ADCH i ADCL), bardziej chodziło mi o to, czy masz poprawnie skonfigurowany przetwornik ADC - jednocześnie poprawną kolejność bitów znaczących w rejestrze ADC. Możesz spróbować z tymi dwiema implementacjami tej funkcji: uint16 to zmienne całkowite od...
Rejestr na mnożnik, mnożną, rejestr przesuwający i sumator. Albo układ kaskadowy sumatorów, tutaj do mnożenia dwóch liczb czterobitowych: https://obrazki.elektroda.pl/7065864100_...
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.
Kalibracja zera to za mało - żeby odtworzyć ch-kę potrzebne są conajmmniej dwa punkty, czyli trzeba zrobić np. dla 0 i dla 500omów. Jaką charakterystykę ? Prawo Ohma jest linowe, podajemy dokładnie skalibrowany prąd np. 1 mA, odczytujemy wartość w rejestrze ADC, mnożymy przez napięcie odniesienia i dzielimy przez 1024 (10 przesunięć bitowych w prawo)...
[url=http://www.elektroda.pl/rtvforum/to... umieściłem swoje procedury bin na bcd, bcd na bin, mnożenie, dzielenie z możliwością deklarowania ilości bajtów do obliczeń.
Dokładnie. Poza tym w C masz sprawę ułatwioną. Zamiast samemu pisać procedury na np. mnożenie liczb, zastanawianie się jak i skąd mają być wczytane, do jakich rejestrów, piszesz po prostu: a=b*10; C jest moim zdaniem dużo prostszy od ASM w pisaniu kodu, bo działasz na wyższym poziomie. Ale jak sam napisałeś i tak trzeba poznać sprzęt==poczytać dokumentację...
(at)squelch Litości. Arytmetyka na poziomie tabliczki mnożenia. Sam sobie odpowiedz. Masz płytkę i debugger. Sprawdź sobie.
Pomijam juz fakt że jeśli program ma działać jak 4017 czyli rejestr przesuwny to lepiej zastosować instrukcję ROTATE zamiast pisać tyle IF'ów :P Lub chociaz mnożyć zawartość rejestu PORT przez 2.
http://obrazki.elektroda.pl/9911175000_1... Mam licznik C201 (wartość do prób ustawiana w status monitoring); MOVE - przepisanie do (DR) R120 13* - mnożę x 55 (dowolna całkowita) - wynik w (DR) R125 14/ - dzielę przez 50 (dowolna całkowita) - wynik w (DR) R135 Ważne: przy użyciu "DR" Fatek zajmuje sobie kolejne rekordy pod zapis (czego...
Podejrzyj kod asemblera i zobacz czy na pewno wykonują się zmiennoprzecinkowe instrukcje. U mnie dodatkowo trzeba było włączyć optymalizację oraz podlinkować libm i libg z katalogu fpu kompilatora i tak zauważyłem, że sporo zależy właśnie od wersji kompilatora. Mnożenie wykonuje od razu sprzętowo ale do pierwiastkowania trzeba go zmusić. A pozwolę też...
Witam, Mam napisać program który wczyta 2 duże liczby całkowite (podane jako stringi - do 40 znaków) i podzieli je przez siebie. Utknąłem już przy zamianie tekstu na liczbę. Robię to w klasyczny sposób. Ustawiam w rejestrze $t2 wartość 0, to będzie zliczana suma. Każdy kolejny znak wczytany dodaję do sumy i mnożę ją przez 10. Niestety przy liczbach...
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): http://obrazki.elektroda.net/50_12281579...
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...
Ja polecam, pierw mnożyć przez mniejszą liczbę i dzielić, tak kolejno na zmianę, żeby nie ucięło nam przodu. Hmm chociaż można by to jeszcze ręcznie robić na 3 rejestrach:)
Procesory AVR nie tylko mają szesnastobitowy rejestr a nawet mają trzy 8O (X,Y,Z), a lista rozkazów jest w zasadzie uboższa tylko o mnożenie i dzielenie, w zamian za to przy tej samej częstotliwości zegara są kilkakrotnie szybsze :D
Pytałem o przesunięcie sygnału PWM bo wymyśliłem taki sposób. Żeby zobrazować zamieszczam schemat: Jak byś nie mnożył przebiegu SPWM, to i tak nie przesuniesz mu fazy.
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...
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ę...
Czyli rozumiem, że działa ci komunikacja między PC, a DSM. Wykorzystując insrukcje 'CJNE" możesz porównywać zawartość rejestru, który odebrał dane z RSa z jakąś daną której oczekujesz. Popatrz na tablice z kodami ASCII w książce Piotra Gałki str.295, - w przypadku cyfr starsze 4 bity mają postać 0011xxxx, teraz musisz napisać podprogram, który daną...
Czytać i zapisywać możesz. Ale jak wygląda mnożenie dwóch 8-bitowych zmiennych? Raczje trzeba najpierw znormalizować wartość w rejestrze. Nie wiem, czy jest w asemblerze instrukcja typu pobierz 8-bitową wartość z rozszerzeniem na 32-bity dla wartości signed lub unsigned. A od kiedy dane RGB są signed? LDRSB, STRSB czyta i zapisuje bajty ze znakiem....
Pfemek- czy chodziło Ci o linie: Impulsy_drogi_1 = 256 * Przep : Przep = 0 ??? To znaczy z czym mi chodziło o co? :) Ta linia którą przytoczyłeś dotyczy zliczania impulsów z czujnika prędkości (drogi) wtedy gdy mikrokontroler zajęty jest czym innym (np. czeka 3s na koniec wyświetlenia jakiejś informacji) po to aby nie gubić impulsów. Dlatego też gdy...
Dzięki bardzo. Idę pisać :) Dodano po 41 W sumie trochę się zapędziłem z tym, że potrafię całą liczbe zapisać na 16 bitach ponieważ dla cyfry tysięcy muszę mnożyć razy 1000 czyli wyjeżdżam poza 1 bajt. (i z mnożnikiem i z wynikiem mnożenia). Czy jest sposób jakiś inny sposób aby mając poszczególne cyfry zapisane oddzielnie w rejestrach połączyć w całą...
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,...
Okazuje się że odczyt MCT nie pobrał mi wszystkich parametrów - tylko te które są do konfiguracji. Pozostałe (wszystkie) opisane są w dokumentacji i mnoży sięje razy 10 i to jest adres w modbusie . Pracownik z Danfoss powiedział mi który rejestr jest od aktualnych stanów wejść falownika i ma mi w przyszłam tygodniu wysłać całą mapę parametrów. Gdyby...
Witam, może to jest absurdalne pytanie ale jak zaprojektować shemat elektroniczny prostego procesora z 2 rejestrami i zegarem 1h tak zeby dodawał, odejmował, monozył, dzielił wartosci np. jezyk podobny do asm:-) REJ A, 3; USTAW WARTOSC REJ B, 3; USTAW WARTOSC ADD A, B; SUMUJ MIN A, B; ODEJMUJ INC A; INKREMENTUJ DEC A; DEKREM... MUL A, B; MNÓŻ DIV A,...
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
Nie ma najmniejszego problemu, choć oczywiście to wydłuży obliczenia. W sumie to Ty decydujesz o tym, co chowasz w rejestrach :] Moim zdaniem, mimo, że to strasznie wygląda, jest to rozwiązanie dość proste i skuteczne. Mantysę bowiem zapisujesz jako liczbę całkowitą. Pozdrawiam :)
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...
Mnóstwo instrukcji assemblera nie może być wykonanych w jednym cyklu zegara... w sumie wszystkie wykonywane są w tej samej liczbie i zależy ona od PIPELINE'u... pobranie instrukcji, dekodowanie, wykonanie, zapis do pamieci, akumulacja wyniku. To jest taki najprostszy pipeline i umożliwia on właśnie wykonywanie instrukcji w "jednym" cyklu zegara.......
O wiele prościej zrobić dzielnik przez 3 - wystarczy dowolny licznik lub rejestr przesuwający, tak zapętlony, by liczył do 2 i się restartował (modulo-3). Wyjściem będzie sygnał resetu. Ale to ma mnożyć a nie dzielić.
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ł...
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ć...
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ż...
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...
ustawianie rejestrów algorytm mnożenie mnożenie kolumn
schneider kanały wymiana śmigła neptun odchylać pionowy
protokól pomiarów protokól pomiarów
Połączenie z serwerem Satel - problem na jednym komputerze Vitodens 100-W B1HF a kompatybilność z OpenTherm