Witam, Można wykorzystać rozkaz DA A ale należy pamiętać że jest on wykonywany poprawnie tylko po instrukcjach ADD i ADDC. Dlatego odejmowanie należy zastąpić dodawaniem zanegowanej wartości. np: 59H-21H = 38H MOV R0,#59h MOV R1,#21h MOV A,#99h ; uzyskanie negacji w kodzie BCD SUBB A,R1 ADD A,#01h DA A ADD A,R0 ; 59h+(-21h) DA A Pozdrawiam JarekC
Hej, Na początek, odejmować, to znaczy dodawać zanegowaną wartość. Czyli: 10 - 50 to nic innego jak 10 + (-50) Skomplikowanie to wygląda, ale zaraz tłumaczonko będzie, tylko uruchomię sobie SIM51ENG, bo taki mam dostępny symulator 51, bo rozumiem, że to dla MCS-51 ma być? Oto kod w asemblerze. mov R0,#10 przesyła do rejestru R0, pierwsza liczbe mov...
Tylko, że porównywanie w procesorach się wykonuje przez odejmowanie (patrz dokładny opis tej instrukcji), a to w przypadku porównywania z zerem jak napisałem nic nie zmieni. Pożyczka, czyli ustawienie przeniesienia C=1 występuje gdy wartość odejmowana będzie większa niż zawartość rejestru. Takie podstawy to kolega powinien znać. A BRLO właśnie sprawdza...
Wybór należy do ciebie zależy co ma wynikać z tego porównania. A zanim zadasz pytania na forum spróbuj sam. CJNE wydaję się logicznym rozwiązaniem. Odejmowanie i porównanie z zerem jest również możliwe. A jeśli chcesz uzależnij jakiś fragment programu od tego która z liczb jest większa zastosuj sposób z odejmowaniem z sprawdzaniem odpowiedniej flagi....
heh zgadza się, wcześniej próbowałem odejmować 0 co w ascii odpowiada za null a 48 w ascii odpowiada za 0 dzięki za pomoc pozdrawiam
wynik ma byc cyfrą.Przy obliczaniach gdzie nie wychodzi cyfra,np 9+5=14 uwzgledniamy bledny wynik:D co najwyzej komunikat o blednym wyniku ma sie pojawic
Tak na szybko: Po pierwsze źle Ci się wylicza wartość, bo powinno być F8 a nie F3. Pierwsze odejmowanie umieszcza w rejestrze R0 wartość FB, następnie musisz jeszcze wyzerować akumulator bo odejmujesz wartość 3 od akumulatora w którym jest już FB (a powinno być 0) MOV R1,C jest bez sensu bo C to nie rejestr tylko znacznik przeniesienia (dziwne, że Ci...
To jest prosta pętla wykonuje się tyle razy jaki długi jest rejestr żeby ją przedłużyć można zrobić na dwa sposoby dobudować jeszcze jedną pętlę ,która wykona obecną n razy lub rozszerzyć rejestr do długości 3 bajtów wykonując to samo odejmowanie przeniesienia na tym najwyższym i będzie to samo . Dla bezpieczeństwa między sbi portx i cbi portx warto...
1. Co za pomysł, żeby zamiast zadeklarować dane z nazwami, ręcznie pilnować adesów pamięci? Od tego jest asembler. 2. Jest taka instrukcja CJNE - przyjrzyj się jej wariantom, któryś powinien pasować. Ew. użyj XRL. SUBB to odejmowanie z pożyczką - tu Ci nie pomoże.
Rozumiesz o co chodzi? Większość tak, dziękuję bardzo :) Chciałbym jeszcze spytać co mogę wstawić pod "wartość" i dlaczego do stack pointera dodaje się i odejmuje 2 a nie 1? (skoro przykładowo ściągamy pierwszy element od góry, a nie pierwsze dwa)
1. .cseg - CODE SEGMENT - użycie pamięci programu (flash) org - wymuś kompilację od danego adresu 2. Stos należy najpierw ustawić na koniec pamięci RAM (bo jest używany przy skokach do podprocedur, przerwań, powrotach z nich(, wynika to z tego, że z reguły na jej początku przechowywane są dane, a rdzeń procesora, czy ATmega128, czy ATtiny2313 jest podobnie...
Najpierw odczytujesz zadaną wartość w stopniach z klawiatury potem tą wartość dzielisz przez 180 i wyprowadzasz wynik. Jeśli wynik ma być z przedziału 0-2 to w pętli odejmujesz 360 aż wartość w stopniach będzie mniejsza od 360. A ten program na jaki konkretnie jest mikrokontroler??
Witajcie, Dużo szukałem, ale nie mogłem znaleźć Działającego programu do kalkulatora, który dodaje, odejmuje, mnoży i dzieli ( Może też pierwiastkować ) maksymalnie 3 liczby 16-sto bitowe i wynik pokazuje na wyświetlaczy LCD. Jak by ktoś posiadał to był bym wdzięczny za wstawienie.
Jeśli chcesz zoptymalizować pętlę jeszcze bardziej, to zamiast for-ować od 0 do max, for-uj od max do zera. Co obrót pętli zaoszczędza się jedną instrukcję, porównaj sobie w obu przypadkach asembler wygenerowany przez kompilator. Dobry kompilator sam to zrobi. Sam sie kiedyś zdziwiłem, ja dodawałem a kompilator odejmował :]
Witam wszystkich. mam problem z napisaniem programu: arytmetyka (dokladnie dodawanie i odejmowanie) liczb co najmniej dwubajtowa dla mikrokontrolera 8051 bede wdzieczny za kazda pomoc rade i wskazowke moje gg 4070278 (zawsze na niewidocznym) e-mail: yatatakeru(at)interia.pl lub tutaj:) z gory dzieki za pomoc. pozdrawiam
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...
Jest to procesorek CISC, co upraszcza programowanie w asemblerze. No, niektóre z elementów asemblera AVR przydałaby się w zasobach 8051. Na przykład jasne i czytelne skoki: BRGE, BREQ, BRLT. W 8051 trzeba pamiętać, że odpowiednia kombinacja flag Z i CY to większe, mniejsze, równe. 8051 ma też nieco niezbyt zgrabnie zrobione porównania, a jedynym przedstawicielem...
Jest taka sprawa. Stworzyłem sobie pętlę For Krok Next w Asemblerze [syntax=armasm]For_plus: ADIW R24 ,4 CP R24,R26 CPC R25,R27 BRNE For_plus[/syntax] Można w niej zarówno dodawać, jak i odejmować. W przypadku odejmowania należy ADIW zastąpić SBIW Jednak ma ona kilka wad. Po pierwsze maksymalną liczbą do której doliczy jest 65536. Po drugie krok może...
Kolega asembler wie jaki kolega asembler genreuje kod. W zaleznosci do zastosowania stosuje kilka metod mający swoje wady i zalety czas/wielkosc kodu/ilość wykorzystywanych rejestów Najprostrza jest oczywiscie metoda cyklicznego odejmowania. Dokładna metoda która była tu optymalizowana wspólnie na elektrodzie i doszło o ile pamietam do 324 taktów przy...
Kolego, rozkaz DA nie działa prwidłowo (jest niedopuszczalny) przy odejmowaniu !!. Dodatkowo nie można go stosować po INC i przy zwiękrzaniu prawidłowo robisz przez ADD, ale przy odejmowaniu poełniasz dwa błędy w jednym, DECrement a potem DA. Ale co zrobić jeśli musisz od danej w kodzie BCD idjąć coś?. A tu asembler jest trochę kulą u nogi, daną którą...
A wiec tak programuje w jagodzie chce napisać kalkulator i z dodawaniem odejmowaniem mnożeniem i dzieleniem nie mam problemu gdy w programie mam tylko jedną operacje z góry określoną prze zemnie np dodawanie dwóch liczb i je wyświetlenie na LCD. ale problem jest w tym że nie wiem jak samemu wybierać co chce zrobić dodawanie czy odejmowanie itp. 1.wczytuje...
Pewnie wystarczy moduł STM32C8T6 ("blue pill", zegar 72 MHz), z programem w asemblerze; najlepsze, co można uzyskać, to zmiana stanu wyjścia w tym cyklu zegara, który będzie najbliższy wymaganego czasu zmiany, co oznacza, że sygnał wyjściowy na ogół będzie miał "jitter" na poziomie kilku ns, gdy 72 MHz nie podzielą się równo przez wymaganą częstotliwość....
Szkoda, że nikt (ze studentów) nie wpadł na to, że wystarczy jedna funkcja, by przedstawić wczytaną wartość w dowolnym systemie pozycyjnym. Chodziło tu o uzmysłowienie sobie ("odkrycie"), że wartość liczby nie jest trwale związana z jej reprezentacją i nie ma znaczenia to, jak liczba jest fizycznie reprezentowana w pamięci komputera. Dlatego było tak...
Witam! Jak dokładnie działa funkcja TEST w asemblerze 8086? Mam taki króciutki fragment kodu: test ax,000Ch jnz ram_64 test ax,0008h jnz ram_32 w ax siedzi obecnie 16 bitowa wartosc, informujaca o obecnosci badz braku komponentów komputera (np. koprocesora, liczby pamieci ram itd.) Na bitach 1010001011011100 mieści się informacja dot. pamięci RAM. 00...
W szkole podstawoej. Nazywa się to dzielenie pisemne, na przykład: http://www.math.edu.pl/pisemne-dzielenie Nie ma tam obrotów i obrotów się nie stosuje - są za to przesunięcia i odejmowanie. Tak - doszedłem do tego. Tak - mam procedury dzielenia dowolnych liczb wielobajtowych. Nie - nie podzielę się tutaj gotowcem bo to moja praca i na niej zarabiam....
Ale asemblera też nie porzucaj, bo on pozwala na pełne panowanie nad danym procesorem, na pisanie bardzo zwartych fragmentów kodu a także fragmentów wymagających wyciśnięcia maksymalnej prędkości z procesora. Same zasady pisania programu w asemblerze są podobne jak i w językach wyższego poziomu tyle, że kolejne kroki rozpisuje się na podstawowe rozkazy...
Co do czasu - musisz niestety zakodować całą godzinę w postaci sekund (s+60*(m+60*h)) - inaczej na przełomie minut algorytm nie zadziała. A najbezpieczniej zakodować włącznie z całą datą. Nastepnie tak zakodowane czasy odejmujesz (obecny od startu/ostatniego klawisza) i porównujesz z wprowadzoną. Co do resetowania - po prostu sprawdzaj bufor klawiatury...
żadne, wszystko zależy od tego jak wygląda Twój program i czy umiesz posługiwac się asemblerem. Przy dobrym wietrze koło 30% używaj szukaj I tu bym się niezgodził. Zanim zacząłem programować mikroprocesory jednoukładowe w C moje największe programy napisane mieściły się w 2kb pamięci i też wykonywały obliczenia matematyczne typu dzielenie i mnożenie,...
Ależ sumuje dobrze, tylko żeby wyświetlić, musisz dokonać odpowiednich konwersji. Pamietaj, że wyswietlasz tylko znak o wskazanym kodzie ASCII. Dodawanie i odejmowanie od tego kodu 30h powoduje "konwersję" cyfry na kod ASCII tejże cyfry lub odwrotnie. Zatem wyswietlanie wyników >= 10 wymusza potrzebę wyświetlenia dwóch znaków: 1. O wartości ASCII (wynik...
z mojej rozmowy z nim (na gg) wynika że jest to atmega8535.. div nieumiem znaleźć w helpah ani nigdzie.. więc trzeba to zrobić programowo... sukcesywne odejmowanie (w/w) albo odejmowanie z przesuwaniem bitowym (szybsza metoda)
W życiu nie słyszałem o takich podprogramach na 51. Posiadam podprogramy mnożenia (wynik 9 bajtów) i dzielenia (dzielna dzielnik i iloraz dowolnej długości). Dodawanie i odejmowanie dowolnej długości.
Nie wiem czy dobrze zrozumiałem? Ale po przerwaniu 16h mogłoby być: 1 jz powrót_do_pętli_przed_przerwaniem_16h 2 cmp al,(kod_klawisza_0) 3 jb powrót_do_pętli_przed_przerwaniem_16h 4 cmp al,(kod_klawisza_9) 5 ja powrót_do_pętli_przed_przerwaniem_16h 6. dalszy kod W skórcie to tak, tylko trzeba pamiętać o opróżnieniu bufora przed odczytem...
Bo w 18tkach stos jest normalny, w przestrzeni RAM. W 16 jest sprzetowy, wiec nie mozna go powiekszyc i zaden jezyk, nawet C nic tu nie pomoze. Sprobuj dla 16 napisac w C program z np. 10 poziomowym Call - kompilator powinien wywalic blad. Wogole musze przyznac ze bardzo dziwia mnie niektore rozwiazania Microchipa, chocby ustawianie flagi C przy odejmowaniu...
Hehe, zapłon mikroprocesorowy? Coś takiego sam zrobiłem. Sposób jest bardzo prosty, wystarczy dobrze pomyśleć... Aby uzyskać stały, opóźniony kąt wyprzedzenia wystarczy mierzyć czas obrotu i ten czas podzielić przez jakąś równą wartość, np. 128 - uzyska się w ten sposób opóźnienie 2.8° (360°/128 = 2.8°). To jest najszybsza możliwość, gdyż realizujesz...
Sumpatyczny Kolego, i tu masz przykład że nie wszystko co napisane w książkach to prawda, należy jeszcze użyć zawsze swoich szarych komórek. Czas opóznienia to faktycznie 2xDPTR ale nie dla przypadku 0ffffh ponieważ oba rozkazy DJNZ nie wykonają skoku tylko przejdą do następnego rozkazu, czyli ta pętla będzie trwała djnz+djnz+ret=2+2+2 cykle rozkazowe....
Nadmiar w operacjach na zmiennych całkowitych nie jest nigdy wykrywany i faktycznie dodawanie i odejmowanie są tak samo wykonywane na liczbach ze znakiem i bez. Tak samo jak w asemblerze. Jest tylko kwestia, czy wynik jest interpretowany bez znaku, czy w kodzie uzupełnieniowym do dwóch.
Witam i zapraszam do dyskusji. Do asembler:Impulator jest nowy- zamówiony wraz z całym osprzętem (tylko w częściach). Program wgrany w prosesor. Po złożeniu tego okazało się, że program sobie nie radzi - popełnia błędy, o których pisałem. Ja zmieniłem zastosowanie tego Kit-u, a co za tym idzie cały program napisałem na nowo. Stworzyłem program, który...
A po co w ogóle komu mikrokontroler w tosterze albo mikserze, choćby z firmware napisanym w assemblerze? Po co w tych urządzeniach jakakolwiek elektronika cyfrowa? Rozumiem, że to pytanie retoryczne w czasach, gdy nie gdzie indziej jak na tym forum niemal każde rozwiązanie wymagające użycia więcej niż jednego układu sprowadzane jest do rady "użyj uC"....
Ma ktoś jakiś pomysł jak podzielić przez siebie dwie liczby w kodzie BCD? Tylko nie odejmowanie, bo to za długo trwa... Moje liczby są 8 cyfrowe. mj
Witam. Jeśli można to bym prosił kolegę asembler o jeszcze trochę dokładniejsze opisanie tego sposobu pomiaru napięcia bo bardzo mnie to zaciekawiło. 1.22 V to stałe napięcie odniesienia wytwarzane przez procesor , na jego podstawie przez wbudowane wzmacniacze operacyjne wytwarza on napięcie 2,56 V . To rozumiem. Jeśli napięcie zasilania podamy również...
Rozwiązanie opisane przeze mnie jest rozwiązaniem czysto sprzętowym a więc sam program może być napisany w czymkolwiek. Jeśli jest potrzebna korekcja wartości timera, to będzie trzeba napisać krótką sekcję atomową w asm, która od TCNTx odejmie wyznaczony przez synchronizację offset - wtedy timery będą chodziły dokładnie w tych samych fazach. W przypadku...
Najlepiej zamienic na odejmowanie w pętli odejmujesz dzielnik od dzielnej i zwiekszasz licznik jezeli dzielna<dzielnik w dzielej masz resztę w liczniku iloraz
Witam Sa takie mnemoniki jak 'jc' i 'jnc' które możesz dać zaraz po odejmowaniu. Skróci to troszkę kod. Pozdrawiam
Witam Muszę napisać program komparatora do atmelowskiego c51 w µVision (podobno asembler) porównujący wartość com1 z com2 i wysyłający odpowiedni wynik na com3. Napisałem program odejmujący wartości między portami com1 i com2, udało się rozróżnić czy wartości są równe czy też nie. Problem w tym że nie mam pojęcia co zrobić żeby rozróżniało która...
Oczywiście, przepraszam i wklejam poniżej: ;SzukajWolnegoKlastra: ; czytamy sektory tablicy alokacji plików w poszukiwaniu wolnego klastra danych ldi r22, 0 ; Adres wolnej JAP ldi r23, 0 ldi r24, 0 ldi r25, 0 ldi r21, 1 ; do zwiększania numeru JAP Lds R16,BeginOfAlocationTable_Half Lds R17,BeginOfAlocationTable_Half+1 Ldi R18,0 Ldi R19,0 mov r8,...
Autor się pyta, czy to możliwe, gdy tak naprawdę najwięcej zależy od niego. To, że jeden człowiek da radę, nie znaczy, że inny też może, każdy ma inne możliwości. Życie to nie telewizja, gdzie wystarczy tylko chcieć, żeby się udało. Możliwości umysłowe, finansowe, umiejętność pozyskiwania materiałów i narzędzi, przestrzeń na warsztat, czas, wytrwałość:...
Witam, Na wejściu mamy 40-bitową liczbę binarną, potrzebujemy ją skonwertować na zapis przy podstawie 10. Chcemy tego dokonać bez angażowania 'dużej biblioteki'. Najlepiej jest tego dokonać metodą kompensacyjną. [syntax=C] /* niezbędne deklaracje np. uint8_t arr[5]; itp. Także kolejność lsb..msb bardziej pożądana, ale nie niezbędna */ /* Tablica użyta...
Instrukcją asemblera? A może byś napisał coś więcej?
Może się mylę, ale do prosto osiągnąć coś takiego w asemblerze : Zakładam że bajty są MSB -> LSB 1. Tworzysz tablicę dopełnień - 1111 1111 - 0111 1111 - 0011 1111 itd. 2. porównujesz bajt wejściowy z elementem tablicy (może być odejmowanie i test zera) 3. jeżeli będzie równy lub mniejszy to wynikiem będzie funkcja OR bajty startowego i elementu tablicy....
W czasie operacji odejmowania w zależności od wyniku ustawiają Ci się wskaźniki C,DC,Z gdzie: C - przeniesienie/pożyczka - wynik przekroczył 255 albo jest mniejszy od 0 Z - zero - wynik jest równy 0 jeśli odejmiesz 1 od danej - równej 0 to wyjdzie Ci -1 czyli wynik jest mniejszy niż 0 a że procek nie może zapisać -1 to ustawia C - pożyczkę - równej...
a w jakim języku programujesz ? Bo np.: w Bascomie jest gotowa funkcja. Programuje w asemblerze. Teraz mi się przypomniało, że 6 się dodaje po dodaniu dwóch liczb bcd. Najpierw do mniej znaczącej liczby. Jesli nie nastąpi przepełnienie półbajtu to się tą 6 spowrotem odejmuje, jak nastąpi to się zostawia i robi to samo ze starszym półbajtem. ... Więc...
Ogólnie wszyscy macie bardzo dobre pomysły na wykonanie tego zadania. Ale skoro autor napisał że ma podstawową wiedze w zakresie cyfrówki to pewnie o mikrokontrolerach wie jeszcze mniej. Moze ten projekt nie powinien być aż taki ambitny jak normalny kalkulator tylko jakiś uproszczony aby pokazać tylko że opanowało sie uC w stopniu wystarczajacym do...
0 jakiegokolwiek wytłumaczenia, wprowadzenia. Zróbcie mi kalkulator w Asemblerze działający na MSP 430 i tyle. Gdzie to takie studia ? Bo coś mi się nie chce wierzyć w Twoją wersję wydarzeń. Dlaczego każda operacja( DODAWANIE, ODEJMOWANIE MNOŻENIE ) ma w swoim bloku skok do DZIELENI?? Czyj to kod jeśli pytasz o takie rzeczy? Bo na pewno nie Twój. Jeśli...
Rozumiem, że przez "obliczyć %" masz na myśli policzenie 100 * x/15360. Żeby było prościej liczysz x/153 - błąd nieduży - przy niskich wartościach niweluje potrzebę korekty zaokrąglania, przy bliskich 100% błąd jest największy i dochodzi do 0.5%. Możesz sobie ręcznie zoptymalizować procedurę dzielenia dla znanego dzielnika - 153 to 0x99 binarnie, a...
Programy się zwykle pisze a nie robi :) Przy pisaniu programów musisz wykonać następujące kroki: 1. Zdefiniować problem W przypadku twojego kalkulatora musisz określić: - typ obsługiwanych danych - czy to będą liczby wyłącznie całkowite czy całkowite i ułamkowe (ogólnie mówiąc rzeczywiste) - rodzaje działań jakie ma wykonywać twój kalkulator, np. dodawanie,...
Dziękuję za podpowiedzi. Mało precyzyjnie się wyraziłem, ale i tak wiedzieliście o co mi chodzi. Wprowadziłem małą poprawkę w swoim początkowym pytaniu. Tak chodzi o przedstawienie tych działań na liczbach stałoprzecinkowych w kodach znak-moduł (ZM) oraz uzupełnienie do dwóch (U2).Oczywiście oddzielne działania wykonuje dla ZM jak i dla U2 nie łącze...
Najlepszą metodą znalezienia błędu w przypadku jak nic nie pomaga jest analiza kodu w asemblerze jaki został wygenerowany z twojego programu i porównanie go z działającym programem. Pamiętaj że rdzeń cortex-m0 w przeciwieństwie do cortex-m3 jest znacznie prostszy i analiza asemblera nie jest aż tak skomplikowana oczywiście na początku wyda ci się to...
Witam. Po przeszukaniu forum nie znalazłem rozwiązania tego problemu. Napisałem swego czasu procedurkę obsługi enkodera, wszystko było dobrze ale przy ipulsatorze 50imp/obr. i prędkości obrotowej ok.500 obr./min niestety wysypuje się. Mam przeczucie że jej wykonanie trwa zbyt długo.Nie jest może to procedurka najprostsza z możliwych ale jest b.skuteczna...
Witam. Chce napisac program i wgrywac do uc Atmega328p. Cale urzadzenie z tym uc chce sprzedawac jako firma. Kod chce napisac asemblerze w Avr studio 4.18 i podpiac tam kompilator Avrdude 6.3. Czy te oprogramowania sa darmowe nawet do celów komercyjnych oraz czy moge skorzystac z not aplikacyjnych (skopiowanych 1:1) atmela w tym programie (chodzi mnie...
Witam. Wiele jest algorytmów dzielenia. Jednym z nich jest zastosowanie odejmowania. 1. A- 64 bitowa liczba; B - 32 bitowa liczba 2. A:=A-B; 3. Jeżeli A>=B wróć do punktu 2 jeśli nie to idź dalej. 4. W A jest reszta z dzielenia. P.S. jeśli byś chciał wynik dzielenia to musisz zliczac ile było odejmowań.
Kiedyś miałem podobny problem ale nie zachowałem listingiu tego programu, pamiętam tylko żeby nie wykonywać dzielenia, rozwiązałem to w następujący sposób: od zadanej liczby, w pętlach odejmowałem odejmowałem 100, następnie 10, zliczając za każdym razem ilośc przebiegów pętli i zapisując w trzech bajtach. W ten sposób miałem ilość setek, ilość dziesiątek...
Witam Mam do zrobienia konwersje dwubajtowej liczby dziesietnej na szesnastkową. Robimy to w asemblerze `51. Zalecono zastosowanie jakiegos odejmowania wag (1,10,100,1000) i zliczanie...nie za bardzo rozumiem o co w tym biega. Jesli ktos moglby to wytlumaczyc byłbym wdzieczny
A nie można tego programowo zrobić na kontrolerze? Nawet najprostrzym (np. pic12c509). Po prostu będzie tylko liczenie czasu potem proste odejmowanie czasów i ustawienie portów. Najprościej to zrobić na kontrolerze ;) (wspomniany PIC czy jakiś ATTiny), jeśli tylko ta rozdzielczość czasowa jest dla autora tematu wystarczająca. Kawałek kodu w asemblerze...
witam czy poratuje mnie ktos i napisze, jak zaimplementowac takie dzialanie DPTR = 65536 - (10^6/(2*f[Hz])) w asemblerze dla 8051 gdzie f jest wartoscia pobierana z tablicy f: dw 352,268,152. Nie moge uzywac dzielenia (ma byc zrobione za pomoca odejmowania) z gory dziekuje za pomoc (mam brzytwe na szyi - warunek z przedmiotu) pozdrawiam serdecznie
jacynka84 W tym poście [url=http://www.elektroda.pl/rtvforum/vi... podałem ci działający przykład z wykorzystaniem DMA i SPI. Mylisz się co do ramu. Gdzieś te dane musisz trzymać. Chyba, że masz pamięć zewnętrzną SDRAM\SRAM, to co innego. DMA jedynie pomaga przepchać informacje do peryferiów. A co do kawałka asemblera,...
Zauważ, że sposób pierwszy umożliwia tylko inkrementację 32-bitowej liczby, natomiast sposoby 2 i 3 to ogólne sposoby dodawania i odejmowania dwóch 32-liczb. Sposób z ADIW co prawda nie daje szybszego kodu, ale za to skraca go o jedno słowo. I teraz zawrto sobie potestować avr-gcc i zobaczyć, że to co odkryłeś wykorzystuje kompilator stosownie do potrzeb....
Mam już napisany w dużej mierze program w asemblerze pod mikrokontroler Atmega16. Xmega to inna architektura i robienie wszystkiego od nowa. Przetwornik A/C 10-bit to dość mało. Wykorzystując wewnętrzny komparator i wzmacniacz odejmujący dodałem jeden bit, ale to i tak za mało. Dobry jest MCP3302, bo ma 13-bit, ale interfejs to SPI. Piny SPI mam już...
Witam, to jest mój pierwszy post i mam nadzieję, że nie złamię nim żadnego z punktów regulaminu. Mam pytanie- prośbę, mianowicie: Moim zadaniem jest napisanie programu kalkulator który dodaje, odejmuje, mnoży i dzieli liczby dwubajtowe. Nie chcę prosić o podanie gotowego programu, bo nie o to chodzi. Czy na początku programu powinnam najpierw podać...
Jak dla mnie to przekombinowane, raczej trudno będzie zapanować nad w miarę stabilną częstotliwością. Masz racje..sprawdziłem to właśnie w praktyce...nie dość, że obliczanie nowych (po przepełnieniu timera1) wartości OCR1x trwa trochę, to częstotliwość nie jest stabilna i niedokładna z obliczeniami. A obliczanie i odejmowanie jakichś wartości wynikłych...
http://obrazki.elektroda.pl/4029783300_1... 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...
Najszybciej będzie tworząc 256-bajtową tablicę na każdy poziom. I to chyba jest myśl. Właściwie wystarczą dwa poziomy, potrzebuję tego do samplera perkusyjnego, tu nieco na jego temat: Można ew. kombinować z zachowywaniem najstarszego bitu, odejmowaniem 0x80, warunkową negacją, odczyt z tablicy, warunkowa negacja i dodawanie 0x80 - ale to więcej operacji,...
Keil nie obsługuje natywnie arytmetyki stałoprzecinkowej. Cortex-M3 ma instrukcje nasycające rejestr do n-tego bitu, ale żeby z nich korzystać, musisz pisać w asemblerze lub skorzystać z gotowych funkcji CM3_intrinsics. Cortex-M3 nie ma instrukcji natywnie pracujące w jakimś stałoprzecinkowym formacie (np. Q15, jak dsPIC) - te operacje musisz robić...
przed subb a,r7 musisz dodac clr C. Wynik odejmowania zalezy od ustawienia flagi C. jezeli nie wyzerujesz pokaze zly wynik.(przy A=R7 prawdopodobnie bedzie to 255). Nie wiem czy tablica "cyfry" jest przypadkowa, ale jak pisze zumek po wykonaniu jnz szukaj wynik jest w B. W przypadku innej tablicy "cyfry" ostatnie 3 linijki sa potrzebne. Petla jest taki...
Zwykłe binarne dzielenie nierestytucyjne przy 10 bitach będzie prawdopodobnie prostsze, niż każda z tych kombinowanych metod - to w końcu tylko 8 obiegów pętli z porównaniem, przesunięciem i warunkowym odejmowaniem, tyle że te trzy operacje trzeba zrobić na 10 (czyli w praktyce 16) bitach. Gdyby toto miało przynajmniej 8-bitowe dzielenie, jak stary...
Czysto informacyjnie - licznik domyślnie liczy w górę, stad odejmowanie wartości CTC(właściwa wartość do odliczenia przez licznik) od 65535. PS: LordBlick czyli w końcu twierdzisz (nie używam CTC),że powinna być wartość 49910? Nie twierdzę nic w tej kwestii, ponieważ obsługa tego przerwania w Bascom nie jest dokładna i nie nadaje się do odliczania sekund...
To przyklad funkcji do konwersji liczby na stringa z zastosowaniem operatora modulo. Dlaczego tak długo i nieelastycznie? Jesli w ogóle to tak: (ale jest standardowa funkcja itoa,uitoa itd, być moze w asemblerze a wtedy modulo i dzielenie być może oszczędniej robi) To dwie najbardziej kosztowne operacje. Optymalizować można też przez wprowadzenie odejmowania...
W sumie i tak w obszarze pamięci masz magistralę równoległą, więc taka, czy inna konwersja serial-parallel-serial wchodzi w grę. Jeśli nie masz elementu "inteligencji" w postaci procesora, czy kości programowalnej, może należałoby poprzestać na układach równoległych (adc, dac), ale to kwestia ceny. Inna sprawa, że rozwiązując cały problem w klasycznej...
A w czym dokładnie masz problem? Do zapisania danych pod adresami odpowiednimi uzyj adresowania pośredniego. Przykładowy algorytm moze wygladac tak: 1.Do jakiegos rejestru wrzuc pierwsza liczbę. 2. Potem odejmuj od niej każdą następną. Ze zbioru. 3. Po kazdym odjeciu sprawdz czy wynik jest ujemny (sprowadza sie do sprawdzenia jednego bitu ). Jesli jest...
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):...
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...
Tu jest taki dość "przyjazny" algorytm, bez dzielenia i mnożenia, ale potrzebne są instrukcje przesunięć logicznych, porównywania, oraz AND i OR http://www.cp.eng.chula.ac.th/~krerk/pub... Jest jeszcze coś takiego, myślę, że Ci będzie pasować. Liczy pierwiastek z 32 bitowej liczby naturalnej (n), wynik w root: root=0 for(N=15;...
1. Normalizować w tym przypadku nie trzeba bo mozna zapisać bajt.2 2. Porównywanie instrukcji Cortexów mija się z celem - bo są one bardziej rozbudowane (np to mnożenie mogę zrobić od razu z dodawaniem i odejmowaniem wartości), dużo bogatszych trybów adresowania itp. Tak samo jak pipeliny powodują że niekoniecznie czas wykonania operacji następujacych...
Witam. Przeszukałem dokładnie internet i nie znalazłem podobnego przykładu stąd zapytanie. Czy może ktoś podpowiedziec jak napisać obliczenia na zmiennych ? Mam zadanie napisać listing i zaprogramować procka , który będzie mierzył ile impulsów z timer1 mieści się w przerwaniu INT1 , tzn. kiedy INT1 =1 wtedy ile w tym czasie impulsów zliczy Timer1. Licznik...
Gdyby chodziło o jakieś na prawdę krytyczne czasowo procedury np gdzieś w przerwaniach , gdzie miałbyś takie przeliczenia robić i zależałoby ci na każdym takcie zegara to wtedy też rozumiałbym jakieś próby optymalizacji tego o co pytasz. Ale wtedy do albo bym sięgnął po wstawkę asemblerową w przerwaniu albo jak pisze tmf, w ogóle bym sobie głowy nie...
Masz zadeklarowaną tablice(pole 16-bajtowe) TABLICA EQU 50 ;od adresu w RAM-e = 50 I teraz nie piszesz gdzie sumujesz te osiem srodkowych wartosci ale zakładam że np do akumulatora, więc najprościej jest tak: CLR A ;zeruję bo tam będę sumował ADD A,TABLICA+4 ADD A,TABLICA+5 ADD A,TABLICA+6 ADD A,TABLICA+7 ADD A,TABLICA+8 ADD A,TABLICA+9 ADD A,TABLICA+10...
witam czy poratuje mnie ktos i napisze, jak zaimplementowac takie dzialanie DPTR = 65536 - (10^6/(2*f[Hz])) w asemblerze dla 8051 gdzie f jest wartoscia pobierana z tablicy f: dw 352,268,152. Nie moge uzywac dzielenia (ma byc zrobione za pomoca odejmowania) z gory dziekuje za pomoc (mam brzytwe na szyi - warunek z przedmiotu) pozdrawiam serdeczniemod="TONI_2003"]Post...
Witam. Piszę w asemblerze w środowsiku RIDE na mikrokontlorer 8051 Mam takie zadanie: wczytać z pamięci zewnętrznej dwie 8 bitowe liczby (ze znakiem), a następnie dodać je i wypisać gdzieś w pamięci. Przykład zapisania tych liczb w pamięci: http://img5.imageshack.us/i/pamiech.jpg/ Mam już wczytywanie tych liczb i dodawanie/odejmowanie decymalnie (działa!),...
Powiem szczerze, że nie do końca rozumiem o czym mowa.... Jeśli ktoś ma juz gotowe (sprawdzone przez siebie) implementacje obsługi i2c, ADC, timerów, SPI i czego tam dusza zapragnie, to połączenie tego w gotowy program nie potrwa znowu tak długo, a pewność optymalizacji kodu jest dużo większa niż przy jakimkolwiek kompilatorze C/C++ etc. Podejrzewam,...
Po ustawieniu TXC już jest za późno na załadowanie bajtu, jeśli transmisja ma iść ciągle! Ale w czym problem? Pomiędzy parami bajtów zostaną dodane krótkie odstępy, o ściśle określonym czasie trwania i wartości 1. I to nawet lepiej bo można je wykorzystać jako początek nadawania kolejnego bitu, w efekcie można upchnąć w dwubajtową ramkę (z wyjątkiem...
http://obrazki.elektroda.net/74_12498390... Witam. Chciałem przedstawić projekt licznika opartego na mikrokontrolerze atmega8. Projekt ten powstał z chęci sprawdzenia swoich umiejętności w asemblerze więc przy komentowaniu projektu proszę zwracać większą uwagę na software niż na hardware. Projekt został ukończony parę miesięcy temu ale dopiero...
Dar.El , tak szczerze to się zastanawiałem co Twoja modyfikacja wnosi... Rozszerzyłeś rejestr reszty z 16 do 24 bitów, ale reszta nie może być większa niż dzielnik. Aha! Jeśli dzielna ma więcej bitów niż dzielnik, to rejestr reszty może się przepełnić i porównanie da wtedy błędny wynik - tego nie uwzględniała moja modyfikacja ;) Jeśli wysunięty bit...
Przyjmijmy, że masz funkcje do operowania na liczbach o dowolnej długości (dodawanie, odejmowanie, mnożenie, dzielenie, dzielenie modulo). w takim przypadku zamiana liczby "42949672954294967295" na postać hex może wyglądać tak: t = 0 dla_kazdej_cyfry(od lewej do prawej){ t = t*10 + cyfra; } wtedy masz zamieniony ciąg znaków na liczbę...
Witam Napisałem program w asemblerze obliczający bubble sort. Wiem że jest tego pełno w internecie dlatego siedziałem nad nim tydzień i próbowałem naprawić sam. Problemy: 1. W Start: po "mov ds,ax" w Turbo Debugger widok segmentu danych(DS) zmienia się na segment dodatkowy(ES) 2. Nie jestem pewien ale drugi jest związany chyba z 1. a dokładnie (tak...
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ć...
Nie chcę zakładać nowego tematu więc tutaj pochwalę się tym co udało mi się dzisiaj uruchomić. Zbudowałem sobie falownik trójfazowy na mikrokontrolerze avr. Wzorowałem się na programie falownika jednofazowego kolegów Tomasza Gumnego i Adama Tatusia. Niestety większość avr-ów posiada tylko dwa rejestry porównania OCR, tak że niezbyt się nadają do wytwarzania...
mam taki problem bo nie wiem jak policzyć ile poniższe programy zajmują bajtów nie wiem jak to policzyć czy mogłby mi ktos w tym pomóc czy chociaż naprowadziłby mnie ktoś na jakiś link gdzie mógłbym to sam wykombinować są to programy w asemblerze avr programy na sume i różnice liczb 16 bitowych bardzo prosze o jakieś wskazówki zgóry dziekuje oto te...
http://obrazki.elektroda.pl/7805368800_1... http://obrazki.elektroda.pl/4555306000_1... Tiny Gad A- żegnajcie nudne wyświetlacze ;) Prawie luxomierz na ATTINY13 Nie da się ukryć, że z pewnych kontrowersyjnych ;) powodów szczególną sympatią darzę najmniejsze z procesorów atmela. Przedstawiona konstrukcja kolejny raz opiera...
PO. : ad 1/ avr'y są ośmiobitowe, ale obsługa zmiennych 16-bitowych jest optymalna. W przypadku średnim obsługa zajmuje 2* więcej czasu: podstawienie pomiędzy rejestrami (2*mov=2 cykle lub w szczególnym przypadku movw=1 cykl), inkrementacja (subi+sbci = 2cykle, odejmowanie wartości ujemnej, gdyż nie ma dodawania o stałą podaną bezpośrednio; w przypadkach...
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...
Witam. Posiadam AT89S52, do którego podłączone jest: - 4x7-seg. na całym porcie P0 mam a-h, a wybieranie wyświetlacza odbywa się między: P1.0 a P1.3 - klawiaturę matrycową 0-9 na porcie P3 - 4 przyciski na P1.4 - P1.7 Moje zadanie polega na tym aby po przyciśnięciu jednego z przycisków cyfra, która jest wyświetlana na wyświetlaczach była co sekundę...
liczba odejmować odejmować wzmacniacz odejmować excel
piszczenie dysku twardego pamieci tomtom odkurzacz gniazdo łożysko
Yihua 706 - Lutownica nie nagrzewa grzałki Sinotrack nie wysyła SMS o starcie zapłonu i wstrząsach