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...
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^{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}...
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
Wg mnie przydałaby się jakaś pętla opóźniająca bo efektów pracy tego programu na procesorze chyba nie zauważysz. Chyba że analizator stanów logicznych podłączysz.
Może nie stricte z tematem, ale miałem podobną sytuację na początku swojej zabawy z mikrokontrolerami. Pisałem programy w bascomie na 51 i na Avr i dla przyśpieszenia działania robiłem wstawki w asm. Po pewnym czasie moje programy wyglądały tak [syntax=c] $ASM Kod programu $ENDASM [/syntax] Wtedy doszedłem do wniosku że używanie bascoma nie ma sensu...
Witam! Tak, to jest gotowiec na uPC. Ściągnij sobie wszystko z tego linku, który zapodał "avatar". Jest tam źródło do programu w assemblerze, a więc nie musisz pisać wszystkiego od nowa, wystarczy wprowadzić stosowne dla Twojego projektu poprawki. Pozdrawiam
Wystarczy jak to zrobisz w pętli i będziesz je wyświetlał po kolei. Tylko musisz pamiętać o zwłoce czasowej pomiędzy znakami aby je można było zobaczyć na wyświetlaczu.
Po pierwsze musisz ten kod przetlumaczyc sobie na assembler. Nastepnie sprawdzic ile kazda instrukcja zajmuje cykli zegarowych, a to powoduje ze musisz wiedziec dla jakiego uC przeznaczony jest ten kod.
poczytać o podstawowych funkcjach (mov,add itp) poczytac o skokach (jmp,je,jle itp) scignac kompilator np ASM32 czy jakostak napisać programy typu: Sortowanie 3 liczb, jakieś pętle itd a gdzie infomacje : www.google.pl
Zacznij od robienia opóźnień pętlami i w ogóle od obycia się trochę z assemblerem, pomigaj na początek LEDami, a jak już nabierzesz trochę wprawy, to wtedy zabierz się za obsługę liczników / timerów i pozostałych peryferiow. Najlepsi programiści kiedyś od tego zaczynali... Porywanie się na początku za coś bardziej skomplikowanego tylko Cię zniechęci....
Wykonują się 3 kolejne pętle łącznie nieprecyzyjnie licząc to <100*80*80 * czas trwania rozkazu DJNZ> Dodano po 36 Jeśli koniecznie chcesz precyzyjnie licząc to: http://obrazki.elektroda.pl/6072410900_1... t_MOV - czas trwania rozkazu MOV t_RET - czas trwania rozkazu RET t_CALL - czas trwania rozkazu CALL t_DJNZ - czas trwania...
Tu: http://alds.stts.edu/APPNOTE/MCS51/AB-40... jest procedura dzielenia liczby 4 bajtowej przez 2 bajtową, trzeba tylko zwiększyć dzielną do 6 bajtów i liczbę obiegów pętli z 32 to 48. PS zakładam że jeśli bawisz się assemblerem to wiesz o co chodzi
Co dokładnie sekundę? Mniej więcej co sekundę? Tą pierwszą opcję trudno bez przerwań zrealizować. Drugą to robisz sobie pętlę która realizuje się w mniej więcej sekundę. Przecież w tytule wyraźnie jest napisane z timerami , po co więc pętla "mniej więcej". Trzeba w głównej pętli sprawdzać stan znacznika timera i podejmować odpowiednie działanie. Szczegóły...
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.......
może np tak: MOV TMOD,#00100001B MOV TH1,#0FDH MOV SCON,#01010000B SETB TR1 SETB REN TO JEST PRZYKŁADOWA KONFIGURACJA PARAMETRÓW TRANSMISJI 9600 b/s - powinna być umieszczona na samym początku obydwu programów. narazie zmontuj układzik i napisz prosty programik (bez przerwań) tak: i teraz tak (wysyłanie jednego bajtu): MOV SBUF,A ; WYSYŁA BAJT Z AKUMULATORA...
Możesz zbudować zewnętrzny zegar 4MHZ na bramce cmos i podać go do Attiny13 lub zamienić pętle opóźniające , jeśli się da oczywiście . Przy zegarze 4.8 będziesz miał do zliczenia o "kilka impulsów" więcej aby uzyskać ten sam czas. Przykładowo w programie autora jest : ldilicz1,0x32; początkowa wartość p1:ldilicz2,0x3B; odliczenie 2.25 msek p2:declicz2...
Widziałem gdzieś tam (chyba w bibliotece peryferyjnej STM32 albo w CMSIS dla STM32), no ale co z nimi? Mój startup robi z grubsza to samo, dodatkowo korzysta z dwóch stosów i jest krótszy (tego typu pętle, nie wiedzieć czemu, zawsze kompilują się do wieeeeeeeelu rozkazów assemblera, choć wystarczy te kilka które jest u mnie). 4\/3!!
Jedyny problem - to długość dzielnika. z tego powodu praktycznie nie możesz użyć dzielenia stałopozycyjnego i musisz zrobić je na piechotę, czyli przez przesuwanie i odejmowanie - pętla iterowana max. 53 razy. Przed dzieleniem do manytsy musisz dopisać bit części całkowitej. Na końcu czeka Cię jeszcze korekcja wykładnika.
Ja w sumie jestem ciekawy czy ktoś miał możliwość debugowania kodu gdzie został wykorzystany super scalar. Analizowałem jedynie assembler wyjściowy po optymalizacji pod super skalar (TI ma bardzo fajne narzędzia do swoich procków do analizowania i eliminacji bottle necków w kodzie dla pętli for), ale nie było mi dane debugować (i niestety nie będzie)...
Więc tak, program ma wyświetlić na wyświetlaczu LED moje imię i nazwisko oraz klasę, to właśnie podałem w kodzie i to działa, druga część programu ma się składać na to że jeżeli wcisnę np. enter wyświetli mi datę na segmentowym ( 7 segmentów ) To ma działać jako jedna całość nie dwa programy. Jak doczytasz kod zauważysz że próbowałem wstawić key tylko...
Dość dawno już nie pisałem w assemblerze ale z tego co widzę, to program nie może pozostawać w pętli start_i2c, bo nie ma tam żadnej pętli. Proponuję zajrzeć tutaj - powinno w rozwiązać problem: http://www.elektroda.pl/rtvforum/topic53... W podprogramie start_i2c, po zapisaniu rejestru TWCR powinienes poczekac na ustawienie flagi TWINT (oznaczajacej...
Kwestia czy to się opłaca czasowo... Wszystko zależy od tego, co chcemy osiągnąć. Nie próbuję tutaj forsować używania na siłę przerwań, ich zagnieżdżania i maskowania. Niemniej uważam, że to cenna umiejętność. ... ja wyznaję zasadę: im krócej w przerwaniach tym lepiej Myślę, że to dobra zasada, jednak nie zawsze się da tak krótko, jak by to było pożądane,...
W opisie do VDSP++ (dla procków BlackFin) jest napisane jak należy programować w C, aby kompilator wykorzystywał sprzęt DSP. Są tam przykłady jak organizowac pętle, mnożenia itp, a jak tego nie robić. Chociaż moim zdaniem i tak pełną kontrolę daje dopiero assembler.
Dzięki wielkie za pomoc, oczywiście po wprowadzonych poprawkach program działa :) 1. Tak masz racje SIGNAL wyłącza automatycznie wykonywanie przerwań 2. Co do goto to takie przyzwyczajenie z assemblera zostało. W każdym razie dzięki za wskazówki i za pomoc, która sie przydała :] Pozdrawiam Marcin
No cóż, jak dla mnie to 2 sprawy do przerobienia : 1. Pomiar czasu na Timer0 - jakaś parka bajtów w SRAM, służąca za licznik, który co przerwanie zmniejsza swoją wartość do zera, ale się nie przekręca. Jak chcemy zmierzyć czas, to cli, zapis licznika, sei i już tylko sprawdzamy czy licznik jest wyzerowany, a w międzyczasie program może wyskoczyc do...
LED-MASK EQU 10000000B LJMP START ORG 100H START: LOOP: ; początek pętli LOOP XRL P1 ,#LED-MASK ; funkcja exor na porcie P1 MOV A ,#10 ; tu przepisanie do A liczby 10 nic nie wnosi w pętli LCALL OPOZ LJMP LOOP ; koniec pętli LOOP OPOZ: ;poczatek petli opoznienia MOV R0 ,#0 MOV R1 ,#0 MOV R2 ,#0 X: DJNZ R0 ,X ; odejmuje od R0 liczbę 1 i sprawdza czy...
w pętli głównej programu umieszczasz odwołanie: ldi R16, X rcall Pomiar_ADC pomiar_ADC: ; ============ program pomiaru ADC=====================================... ldi R20, 0b11000000 ; ustawiamy PAX jako wejscie przetwornika napięcia i wybieramy add R20, R16 ; parametr określający nr kanału out ADMUX, R20 ; jako napięcie odniesienia Vref wewnętrzne...
Witam, Programy typu zapal diodę w pętli już przerobiłem, od paru dni męczę sie z Real Time Timer . Napisałem sobie program który co 2 sekundy zapala kolejną diodę, aż do 8 diody. W symulatorze program działa w porządku , ale jak testuje na płytce, to zapalają mi sie po 2 sekundach wszystkie diody i nie wiem co jest. Program jest napisany w Keilu. Oto...
Hmm, tak trochę pomyślałem i dochodzę do wniosku, że jednak tu nie ma mnożenia przez int'a, więc raczej problemów z tym nie ma :P. Rzeczywiście pokombinuję z tą stałą zmienną i zobaczymy, co się będzie działo. Z tym przeglądaniem assemblera, to na razie odpada, więc mam pytanie, czy jest jeszcze jakiś inny, lepszy (i darmowy) kompilator C dla '51?
Witam, problem nie tkwi w programie... Po "t2++;" nie masz żadnej instrukcji więc debugger wraca na początek pętli. Strzałka podczas debugowania pokazuje kolejną instrukcję do wykonania. ...i właśnie dlatego uważam, że naukę powinno się zaczynać od assemblera - żeby zrozumieć istotę działania(choćby przeskoków w tym przykładzie). Możesz włączyć disassember'a...
Witam Hmmm jak dla mnie to nie napiszesz dokładnie tego samego w C co w assemblerze chyba ze zrobisz wstawkę assemblerowską, pozatym wyłącz sobie optymalizacje w AVR studio to wykonanie 1 obiegu pętli z 11 cykli wzrośnie Ci do około 29 ;) Jak dokładniej chcesz zobaczyć jak kompilator tłumaczy Twój kod na assemblera to kliknij sobie view i dissasembler,...
Trochę metodą prób i błądów udało mi się zrobić działający kod. [syntax=c] // Sotware SPI assmbler 1 ver 2 well working void Spi_8_bittransfer(unsigned char data) { asm volatile( \ "ldi r24, 8 \n\t"\ "LOOP%=: \n\t"\ "cbi 0x18, 2\n\t"\ "cbi 0x18, 1\n\t"\ "rol %0 \n\t"\ "brcc ZERO%=\n\t"\ "sbi 0x18, 1\n\t"\ "ZERO%=: \n\t"\ "sbi 0x18, 2\n\t"\ "dec r24...
Wystarczy zwykły attiny2313 (chyba że musi być to atmega), przecież ma wbudowany układ UART. Odczytujesz w pętli (albo w przerwaniu timera) stan PinB, dalej, wysyłasz to poprzez UART do komputera.. Do napisania w pół godziny w assemblerze dla kogoś kto dopiero się uczy :) (Mogę Ci pomóc z tym kodem, daj tylko znać na priv...)
Na schemacie który przedstawiłeś nadal nie mam pojęcia co jest w jakiej kolejności wykonywane. Dlatego że tego nie opisałem. Jednak jest możliwość sprawdzenia z poziomu symulatora PC, albo bezpośrednio po komunikacji z US... Oczywiście jest możliwość zadeklarowania kolejności, bo niejednokrotnie jest to kluczowym elementem poprawności działania programu....
I dlatego wolę assembler od C ... Dobrze skonstruowane makra uwalniają człowieka od myślenia czy niektóre wyrażenia typu ">>==<<" :) działają jak trzeba, czy jak powinny, o ile w ogóle działają....
org 0h start: ;wlasciwy poczatek programu ; mov a,#1 ; mov b,#0ffh acall polskie acall lcd_clear main_loop: acall lcd_init ;inicjacja wyswietlacza acall powitanie ajmp main_loop ;skacz do poczatku polskie: Coś mi tu nie gra! Najpierw robisz lcd_init, potem powitanie, a potem znów init ... i tak w kółko! Inicjalizację lcd zrób tylko raz - najlepiej...
(at)nsvinc Falowniki to nie tylko wielkie kombajny z algorytmem FOC (Field Oriented Control), możliwością pracy jako napęd pozycjonujący i pracujące w zamkniętej pętli sprzężenia zwrotnego. Prosy falownik pracujący w otwartej pętli sprzężenia i stosujący regulację U/f=const. da się zaimplementować na AVR kożystając z czystego assemblera albo z wstawek...
Odpowiedź jest bardzo prosta: instrukcja if ( zresztą każda instrukcja wrunkowa czy pętli ) napisana w języku wysokiego poziomu, przed załadowaniem do procka, musi zostać przetłumaczona na kod maszynowy ( assembler ). W języku takim jak Basic ( czy dowolny inny ), widzisz tylko jedną linijkę, ale w kodzie maszynowym zajmuje ona dużo więcej ( wręcz tworzona...
Witam, nasunął mi się taki problem związany z programowaniem ;) Używam od jakiegoś czasu gotowca Arduino Nano, bo wychodzi najtaniej ;) Próbuję tworzyć w wolnej chwili różne różności ;) ogólnie fascynacja AVR zamiast z czasem zanikać to rośnie. Ostatnio powstał w mojej głowie i w realu projekcick obsługujący 4 dwustanowe przełączniki. Fajnie by było...
http://obrazki.elektroda.pl/6793166500_1... Mini DDS (Direct Digital Synthesis) Często potrzebny jest prosty generator funkcyjny dla wygenerowania określonej częstotliwości. Generatory komercyjne są drogie, więc najtaniej jest zbudować generator samemu. Niniejszy projekt przedstawia bardzo prosty generator typu DDS składający się z układu...
Jaki przykład ? Pytałem z twojej strony o przykład podnoszenia do dowolnej potęgi dla liczb zmiennoprzecinkowych podwójnej precyzji i się nie doczekałem, więc czemu ty liczysz na przykłady od kogoś, skoro wskakujesz do wątku, wykrzykuesz "Viva la assembler!" ale rękawicy już nie chcesz podjąć? jeśli chcesz przesunąć o jedno miejsce w lewo mnożysz razy...
Kolego, najwyraźniej nie wiesz ani o co pytasz, ani jak daleko jesteś od celu :) Ale to do wybaczenia, skoro się dopiero uczysz. Zacznijmy od tego że nie ma tak jednoznacznego pojęcia jak "programowanie robotów". Co w ogóle masz na myśli mówiąc "robot"? Zabawka z Lego Mindstorm? Piesek Aibo? Spawarka przemysłowa? Bezzałogowy Predator? To wszystko są...
A może jednak spróbuj assemblera - przerwania są bardzo łatwe w używaniu. A co do sterowania diodami to : Napisz sobie dwie (lub więcej jak potrzebujesz) pętli w których masz zapisane sekwencje sterowania diodą i użyj przerwania timera do sprawdzania stanu na wejściach(przyciskach)- w zależności od tego który przycisk jest wciśnięty skacz do wybranej...
Witam, Nic nie przychodzi mi do głowy, choć rozwiązanie jest z pewnościa banalne. Chodzi o to, że jeżeli nastąpi przerwanie z INTn, po jego wykonaniu uP ma wrócić do głównej pętli, czyli zakończyć wykonywany podprogram niezależnie w którym miejscu został przerwany. Nie wiem jakiej instrukcji użyć być może z assemblera, którego już w ogóle nie pamiętam...
Ciekawostką jest to, że ARM jest jedną z niewielu, jeśli nie wręcz jedyną architekturą, w której moduł startowy może być napisany całkowicie w C, bez jednej linii kodu asemblerowego. Drugą ciekawostką jest to, że jedynym znanym mi producentem, który z tego skorzystał, był NXP (zdaje się, że jednak obecnie start dloa NXP jest częściej pisany w asemblerze)...
Witaj Lulubella . Co prawda zbyt wiele Ci nie pomogę (sam sie uczę ASM), ale jednak lepsze coś niż nic. A więc zacznijmy od początku. Niezbędnym dla rozwiązania Twego problemu jest utworzenie tablicy 100-tu element owej w pamięci flash mikrusa. Oto ta tablica .org $2500 oznacza umieszczenie tablicy od adresu 2500 * 2 Teraz przyszedł czas na odczytanie...
juz nieaktualne, poradzilem sobie :) 1. W takim razie wypada podać rozwiązanie. 2. Wypada dokładnie przepisać podany przez wykładowcę program "odluz" "w cx wsp.X, w dx wsp.Y" To jest nieprawda. Współrzędne są w rejestrze dx. dl - wpółrzędna y dh - współrzędna x cx to w tym programie tylko licznik pętli. Gdyby nie te błędy, może wcześniej by Ci ktoś...
Po prostu zabrałeś się za coś co przerasta znacząco poziom Twojej wiedzy. Nie ma RE bez głębokiej znajomości programowania. Tego po prostu nie przeskoczysz. Skup się na razie na nauce C i asemblera, dopiero później czytaj o czymś co wymaga tej wiedzy. Niestety odwrotnie się nie da. Myślę że masz rację, jednakże nie jestem do końca pewien na czym dokładnie...
Co do odmierzania czasu to możesz to zrobić na wiele sposobów. W normalnych pętlach albo klawiaturę obsługiwać w przerwaniu, wtedy opóźnienie definiuje to przerwanie i nie angażuje zbytnio procesora. A z drugiej strony to poszukaj na forum, sam tu umieszczałem program obsługi klawiatury matrycowej.
Nie wiem czy to poprawili, ale zmienne przesunięcia nie są za dobrze generowane dla avr. Kompilator robi takie przesunięcie w jakichś magicznych pętlach (zamiast np 1 << 6 robi 6 pętli po 1 << 1). Fajnie jakby ktoś kto się nie boi asemblera to sprawdził bo ja nie mam takiej możliwości chwilowo. Ale nie ma możliwości zrobić inaczej, bo AVR...
Witam. Mam taki problemik. Dwa silniki krokowe są napędem ploterka XY i załóżmy, że 1 krok to 1mm i jesteśmy w punkcie 0,0 a musimy pojechać po prostej do punktu XY [mm]. I teraz jak powinien wyglądać algorytm jazdy - wcześniej to robiłem w komputerze w delphi i tam sobie wymyśliłem algorytm ale on wymagał sporej dokładności liczb (wielobajtowych) i...
Dziękuję wszystkim za zainteresowanie i szybką pomoc. Brak powrotu z podprogramu wielokrotnie wywoływanego występuje tylko jeden raz, gdy wciśnięto klawisz S. W pozostałych przypadkach wraca do głównej pętli początkowej programu, gdzie wyświetla się animacja i tworzony jest jednobitowy dźwięk obsługiwany przez Z-80. Po wykryciu wciśnięcia klawisza S...
(at)Freddie - czy pycrc też generuje taki kod dla sumy kontrolnej w takiej postaci jaka jest tu (Modular sum) czy tylko na podstawie jakichś wielomianów CRC, bo to jest chyba różnica. Hmm, no może faktycznie - pycrc służy oczywiście do generowania kodu liczącego CRC, trochę się pospieszyłem bo tutaj widzę jest liczenie zwyczajnych sum a nie CRC - zmyliło...
assembler darmowy assembler pętel pętel efekt pętel prądowy pętel prądowy
telefon cichy muzyk atmega32 przerwania zegar regulator
identyfikacja scalaka soniczna szczoteczka
Identyfikacja układu scalonego 3925A - EEPROM czy wzmacniacz? Symetryczny ogranicznik napięcia -5,6V do +5,6V z diodami Zenera