ecx jest rejestrem, nie zmienna lokalna. Jesli wolana funkcja korzysta z tego rejestru (a moge sie zalozyc, ze tak jest), to Twoja petla sie rozsypie.
witam ! potrzebuje pomocy z tematem ktory mam do opracowania ale nie mam najbledszego pojecia jak sobie z tym poradzic. pomyslalem ze tutaj znajde napewno kogos kto znalby odpowiedzi na ponizsze pytnia. oto one: 1) Napisz w asemblerze pętlę, w której będzie zmieniany bit 0 portu P1 (P1.0) na przeciwny dokładnie co 4 cykle zegarowe. Ten fragment programu...
Witam, czy znacie może jakieś ciekawe materiały które w sposób wyczerpujący omawiają pętle w Assemblerze dla mikrokontrolera 8051. Napisałem już kilka prostych programów realizujących poszczególne rodzaje pętli,ale na pewno jest coś czego nie potrafiłbym zrobić. Z góry dziękuję za pomoc
Nie wiem jak to działa gdy kasujesz TI w przerwaniu. To już poziom assemblera czy wcześniej sprawdzasz warunek pętli while(TI==0) {}; czy też w obsłudze przerwania jest kasowana flaga TI. Włącz debugger w keilu ustaw breakpoint w przerwaniu i zobacz jak program działa. Sądze że skasowanie linii "if (TI) { TI=0; }" rozwiąże problem :) Korzystanie z funkcji...
Bez wątpienia na wyjściu uzyskasz stan wysoki. Jeśli chcesz ustawić pin jako wejście z podciąganiem, to kasujesz odpowiedni bit DDRB (cbi) ale w PORTB ustawiasz odpowiedni bit (sbi). ps. brakuje pętli nieskończonej na końcu.
v5 wygląda na wskaźnik na tablicę bajtowych elementów, które są indeksami dla tablicy dword_40F458 po wykonaniu operacji xor z bajtową zmienną i. Po każdym obrocie pętli wskaźnik ten jest przesuwany na następny element tablicy (v5++).
Witam. Nie mogę zrozumieć co oznacza symbol $ stosowany w programach np: DELAY:PUSH AR0 PUSH AR1 PUSH AR2 MOV R0,#01H QWE2:MOV R1,#0FFH QWE1:MOV R2,#0FFH DJNZ R2,$ DJNZ R1,QWE1 POP AR2 POP AR1 POP AR0 RET Pomóżcie proszę. Grzegorz. Przeniesiono z Programowanie Ogólne. - arnoldziq
A co kolega ma na myśli ? Mniej optymalny kod obsługi przerwań, niż jest możliwy, źle dobrany rejestr zerowy, brak możliwości globalnego zagarnięcia kilku rejestrów na specjalne zmienne szybkiego dostępu. http://www.elektroda.pl/rtvforum/topic20...
Ad4.Wykorzystałbym to że można w pętli przekręcać akumulator na siebie i kopiować jego wartość na port P3.Wcześniej ustawić P3 w stan wysoki i wpisać odpowiednią wartość do A.
Czy jest to w ogóle możliwe gdy napisze się ją w assemblerze? Aktualnie zajmuje ona ok. 15ms. O ile może się skrócić? Jeśli dobrze operujesz assmeblerem, to pewnie się trochę skróci. Generalnie sprawa wygląda wg mnie tak, że można napisać jeden z 4 kodów: - kiepski kod w C, - kiepski kod w assemblerze, - dobry kod w C, - dobry kod w assemblerze. Porównując...
Witam Kiedyś podczas poszukiwania materiałów i gotowych przykładów na PICe znalazłem stronę na której jest skrypt generujący takie właśnie pętle. Wpisujesz kilka podstawowych parametrów i otrzymujesz gotowy kod do wklejenia. http://www.piclist.com/techref/piclist/c...
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...
temat do zamknięcia
Witam potrzebuje pomocy z zadanie. Program ma dzielić 2 liczby z a i b. Nie mam pomysłu jak to zrocić by nie podawać wartości c [syntax=assembler] POB a pętla: SOM koniec POB c ŁAD b ODE c POB a DOD Jeden ŁAD a SOZ pętla koniec: POB c STP a: RST 12 b: RST 24 c: RST 2 Jeden: RST 1[/syntax][/code]
z tego co ostatnio liczyłem to taka pętla: Dodano po 1 A no i bez nop'a kompilator przy pewnych ustawieniach wytnie Tobie całą pętlę.
Po pierwsze, to musiałbyś zrobić wczytywanie liczb, a nie cyfr. Czyli pętla odczytująca cyfry i wynik zapisująca do rejestru/zmiennej. Potem wyświetlanie też najlepiej oprzeć na pętli, bo powtarzanie kodu jest po prostu bez sensu. Wygodnym tutaj może być użycie funkcji ROL w celu przerzucenia 4 najstarszych bitów na najmłodsze pozycje i wymnożenie przez...
http://www.avrbeginners.net/ a dalej: AVR Assembler --> Conditional Branches / Loops
oj po co tyle kodu ???;) Jak odświerzanie wyświetlaczy ma być na pętli nieskończonej to nie potrzeba tyle kodu . Opisz jak sprzętowo podpięte są te wyświetlacze a dopiero po pokazaniu schematu można wogóle zacząć analizować kod. Pojrzyj na www.kloszi.prv.pl dział "Moje projekty->Symulator Softwarowy MCS-51" i tam jest właśnie zrobione sterowanie wyświetlaczami...
No właśnie może Wam się to wydać głupie, ale kumam assemblera nawet trochę ale pętle to moja zgroza :( Nie mówie że jestem specem ale swoje wiem. A w jaki sposób można wydłużać i skracać ten czas? I czemu zeruję rejestr np. R2?
Daj mi kod dla komputera Commodore C64 na cykliczną zmianę koloru ramki obrazu, osobno w języku basic i osobno w assemblerze Oczywiście! Oto prosty kod w języku BASIC i assemblerze dla komputera Commodore C64, który cyklicznie zmienia kolor ramki obrazu. **BASIC:** ``` 10 FOR I = 0 TO 15 20 POKE 53280, I 30 FOR J = 1 TO 1000 : NEXT J 40 NEXT I 50 GOTO...
A^{0.2} = A^{\frac {2} { 10}} = \sqrt Potęgowanie to wielokrotne mnożenie (mul, muls, fmul, fmuls) tej samej liczby przez siebie w pętli, przy czym ilość iteracji pętli jest równa potędze minus 1 (dla potęgi równej 1 nic nie robimy... ;) ). Co do pierwiastkowania to przydatna jest reguła pierwiastkowania iteracyjnego Newtona dla \sqrt \rightarrow y_{i+1}...
WDT w programie jest włączony i działa bardzo dobrze, ale do znalezienia usterki trzeba było go wyłączyć. Program jest napisany w Bascomie. Pętla, o której mowa, jest w bibliotece obsługującej wyświetlacz. Nie ja pisałem tę bibliotekę, ja nie znam assemblera. Mi wystarczy dołożenie licznika obrotów tej pętli i wyjście po jego przekroczeniu. Transmisja...
a) A=1 movA,#1b Do akumulatora A wpisujesz wartość 1 (wartość binarna 00000001b), pozostałe instrukcje nie wpływają na wartość akumulatora. b) A=0 movA,P2 Do akumulatora A wpisujesz wartość z portu P2 (port P2 do masy – co daje wartość 00000000b) c) A=2 movA, #2h Ostatnią wartością wpisaną do akumulatora A jest 2 (wartość szesnastkowa 02h) d)...
ok sorry może się trochę rozszalałem ale denerwują mnie strasznie kolesie szukający tu zaliczeń. Tak więc w asemblerze dobrze jeste przede wszystkim porządnie przygotować sobie strukturę programu: początek: .cseg ; .org 0 ; rjmp RESET ; .org INT0addr ; reti ; .org INT1addr ; reti .org OVF2addr reti .org OVF1addr reti .org OVF0addr ; reti .org URXCaddr...
W załączniku - przykład z dokumentacji DSM'a (Gałka). Wystarczy wyslac na wyswietlacz tekst, a potem wysylac zadanie przewiniecia w pętli.
Standardowa pętla zlliczająca X razy w assemblerze AVR to: ldi R16, X !Loop: nop nop nop nop dec R16 brne Loop Tylko że w Twoim przypadku trzeba zliczać o jeden raz więcej.
To wiem. Nie chodzi mi o czysty assembler tylko o wykonywanie pętli for w C (gcc). jak zmierzyć ile czasu będzie wykonywać się np. for (int i = 0; i < 255; i++); Przecież takie for to kilka instrukcji procesora (jakich) ? I tu tkwi sedno. Tylko nie pisz proszę abym zerknął w żródła kompilatora/libc :>
Zacznijmy od tego, ze za pomoca for w C nie da sie uzyskac dokladnego odliczania czasu! Przeciez w zaleznosci od optymalizacji (-O) i wersji kompilatora roznice beda siegaly tysiecy procent. Raz bedziesz mial 10Hz, a innym razem 0,01 Hz. Jesli chcesz w miare dokladnie odmierzac czas to albo korzystasz z funkcji z delay.h, albo piszesz wstawke w assemblerze...
Wielkie dzięki, A w MIDE-51 można pisać program w C i skompilować na hex zeby działał na tym atmelu? Bardzo ułatwiłaby mi napisanie programu pętla 'if' której nie ma w assemblerze i ciężko mi bez niej.
Ja też taki byłem, do czasu jak zacząłem mierzyć prędkość "obrotu" pętli głównej - wyraźnie widać, że im więcej się tam dokłada, tym wolniej się ona kręci. Jak miałem tylko 8 maszyn stanów to czas obrotu wynosił średnio ok 3us, jak dodałem następne cztery to już wynosi 5-6 us (at) 168MHz F4. W assemblerze to było o tyle optymalne, że do licznika rozkazów...
Napisać to nie ... ale mogę ci podpowiedzieć: Ja bym użył instrukcji test <adres>,1 i jak wynik jest zero to parzysta. Oczywiście wszystko to trzeba umieścić w jakiejś sensownej sprytnej pętli i podliczyć. (zakładam że chodzi o assembler x86)
Ogólnie programik miał przetworzyć otwierany plik, nagarć go jako inny i odpalić. Assembler'em można by było w pętli... no i bym nad tym siedział niewiadomo ile :). "Czas to pieniądz." Qbasic fakt darmowy i mam go w jednym paluszku..Oj dawne czasy... Sprawa załatwiona, wszystko działa, tematu jeszcze nie zamykam, żeby nie za wcześnie popadać w zachwyt...
Brakuje pętli nieskończonej na końcu programu. Wyświetlenie liczby 00-99 nie jest tak proste jak myślisz. Po pierwsze musisz ograniczyć sekundy do 99, po drugie rozbić sekundy na cyfry i po trzecie wyświetlić (co też nie zmieści się w jednej linijce kodu). Aby obsłużyć wyświetlacz musisz się dowiedzieć jak jest dołączony do procesora. Zacznij od prostego...
Na razie po staremu chciałbym zaprezentować uproszczoną grę TETRIS napisaną całkowicie pod assemblerem. Zawiera 16 losowo wybieranych kształtów klocków, które można obracać co 90 stopni w prawo lub lewo przez czas 20 sekund i przesuwać w prawo lub lewo przez kolejne 20 sekund. Podczas spadania nie ma luż możliwości korekcji upadku klocka. Jest to więc...
Kod jest bardzo nieoptymalny, zauważył kolega powtarzające się fragmenty? Od takich rzeczy są procedury. A całość powinna się wykonywać w pętli z inkrementacją (i wyjściem po uzyskaniu zadanej wartości czyli 9999)
Czyli jedynym wyjściem jest programowanie w C++. Tylko czy języki programowania inne niż Assembler są bardzo związane z procesorem, zajmują mało miejsca i są szybkie, co umożliwia chyba pisanie wirusów. Dopiero co w C++ uczę się pętli i nawet w miarę je umiem i wiem, że przede mną jeszcze długa droga dlatego chciałbym wiedzieć czy C++ to dobry wybór,...
a to nie lepiej zrobivc wstawke assemblerowa i zrobic taka petle w assemblerze? bedziesz mial wtedy o wiele lepsza dookladnosc, no chyba ze takiej niepotrzebujesz
Da się. Napisz program, który w pętli kolejno: wyświetla liczbę, czeka 10 sekund, gasi liczbę, czeka 10 sekund.
Możesz mi przybliżyć skrót PWN ? Czy dobrze rozumuję ? Zakładam,że chcąc kontrolwać częstotliwość generowango dźwieku muszę znać czas trwania cyklu maszynowego i brać pod uwagę ilość cykli, które tzajmuje wykonanie karzdej instrukcji zawartej wewnątrz pętli. Dopiero zaczynam dłubać w assemblerze i jakoś nie mogę wskoczyć. Wcześniej programowałem w językach...
unsigned char xdata T[3] _at_ 0x7000; void main() { T[0] = 0x12; T[1] = 0x34; T[2] = 0x56; // tutaj dalszy program } To działa i jest dokładnie tym, co potrzeba, ale przy dużej tablicy kod się rozrośnie do ogromnych rozmiarów. Nie chodzi tu o kod, tylko o wielkość skompilowanego programu. ... A jak...
double func( double A Hmm.. A jak 64-bitowa liczba double została zmieszczona w czterech 8-bitowych rejestrach? Magia się dzieje :) A co do pisania w ASM, moje zdanie jest takie, że dzisiejsze kompilatory są na tyle dobre, że przy włączonej optymalizacji naprawdę trudno jest samemu napisać lepszy kod. Oczywiście, tam gdzie jest potrzebna większa kontrola...
Witam kolegów. Chciałbym, żeby ktoś pomógł mi zrozumieć skąd się bierze i ile jest cykli podczas wysyłania/odbierania jednego bajtu przez SPI? Z tego co zrozumiałem to przy podzielniku SPI / 2, dla 8MHz, powinienem móc wysłać trochę poniżej 500kB/s. Zegar SPI ustawiłem na Fcpu / 2. Robię: [syntax=c]SPDR = 0; while(!SPSR & (1<<SPIF)); [/syntax]...
dokładnie. do assemblera, a potem to już tylko żmudne podstawiania i analiza kodu.. przyda się też znajomość tego, jak pętle (np. z C) są realizowane na poziomie assembera. przy krótkich programach - idzie to rozkminić. powodzenia! -- migod
Witam! Napisałem w C taką funkcję opóźniającą void wait100ms(unsigned char x) { unsigned char a,b; for (;x > 0; --x) for(b=50; b>0; --b) for(a=100; a>20; --a) __asm("nop"); } Niestety nie wiem jakie wartości mają mieć dokładnie a i b by pętla trwała 100ms. Zaglądałem do listingu ale nie znam dobrze assemblera do AVR i nie mogę sobie z tym poradzić,...
Język to ASM, Jeśli chodzi o samą składnię assemblera to raczej nie mam problemów, i też wiem co to pętla ;) Bardziej chodzi mi o zagadnienia bardziej teoretyczne w stylu metod rozbicia danego problemu w taki sposób aby pętla nie obracała się zbyt wolno żeby nie powodować zbytnich opóźnień w dalszych częściach programu które mogły by np powodować błędnych...
Witam! Po udanym skompliowaniu programu MASMem, wywolujac program wyskakuje mi w lini komend : Przekroczenie dzielenia. Czy ktos wie dlaczego tak sie dzieje ? Co to oznacza ? I jak mozna temu zaradzic? Dodam, ze mam w programie kilka petel przesuwajacych bity w lewo i w prawo oraz kilka dzielen. Z gory bardzo dziekuje ! Pozdrawiam.
ORG 100H to jest dyrektywa, że kod po niej ma się zaczynać się od tego nowego adresu, a nie rozkaz procesora... Myślę, że jak o pogooglasz pod hasłem "assembler directives", to się trochę rozjaśni... EDIT: Pogłębiłem i rozjaśniłem wypowiedź...
Mój nauczyciel od ukladów mikroprocesorowych zadał nam dwa zadania, w których to należy napisać program w assemblerze pod 8051. Oto ich treść: 1. Napisz prosty program sumujący dwie liczby binarne w assemblerze dla 8051. 2. Napisz program przenoszący wartość 10H pomiedzy rejestrem R0 a zewnętrzną pamięcią danych w nieskończonej pętli (assembler dla...
>dondu Autor tematu w pierwszym poście nic nie pisał o przesyłaniu komend assemblera a jedynie w następnym poście potwierdził sugestię Piotrus_999 która w tym przypadku jest błędna a autor wątku przyjął to za dobra monetę. Piotrus_999 nie wie jak jest skonfigurowany moduł Easy8051 więc pianie o rozkazie MOV P1,P2 nie ma żadnych podstaw merytorycznych....
:oops: przyznaje sie bez bicia - pic'ow nie programowalem 6502, 68k, x86, '51, od biedy z80 i avr no i pierwsza prawda programisty niskiego poziomu - assembler przenoszalny nie jest :) ale.. to tylko pomysl ze starych dobrych czasow
assembler darmowy assembler pętel pętel efekt pętel prądowy pętel prądowy
radio kasety grundig skanowanie komputera wyłączenie berlingo kontrolka ciśnienie
pilot bramy zasięg zawór ceramiczny melitta
Wymiana płyty głównej Junkers/Bosch Eurostar ZWE 24-3 – procedura, uprawnienia, konfiguracja Pralka Electrolux PerfectCare 600 - Diagnostyka i Rozwiązania