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 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]
Witam. W A'51 (to zależy od wersji assemblera) oznacza adres pod jakim znajduje sie dany rozkaz !! W rozkazach skoku oznacz on skok do "samego siebie". przyklad podany przez ciebie to poprostu pętla opóźniająca (zatrzymuje program na jakis czas) ale możesz spotkać się z tym przy innych rozkazach skoku!! np. sjmp $ - służy do zatrymania programu "bez...
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...
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...
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)...
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
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...
Napisałem że mój kod jest napisany w x86 żeby pokazać ideę jak ma wyglądać pętla, co za problem wziąć list instruction do 8051 i poszukać odpowiedników do x86?
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...
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.
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...
nie jestem pewien czy w pętli dobrze odczytam enkoder, bo muszę wykrywać zbocze opadające ,a nie konkretny stan styków, poza tym w innych pętlach w programie też czytam enkoder łącznie z wyświetlaniem lcd ,ale już przy wolnych obrotach, chciałbym się głównie dowiedzieć co w bascomie przymula to liczenie, skoro jest tam niewiele linijek programu.
lepiej: [syntax=asm] START: setb p1.7 mov r7,#X djzn r7,$ clr p1.7 mov r7,#X djnz r7,$ sjmp START [/syntax] Opóźnienie 1+1+2*x Swoją drogę C jest bardzo dobrym językiem ale nie na 51 niestety. Architektura nie jest zoptymalizowana pod kątem programowania w C.[/code]
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...
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...
Wiem że temat już nieświeży i że odejdę od ostatniego wątku, ale jak zobaczyłem to: dla bankow nie dosc ze pisze sie w C++ to jeszcze w kompilatorze M$ to po salwie śmiechu i wiążącej się z tym upadkiem z krzesła, naszła mnie pewna konsternacja i głęboka nadzieja że autorka postu tylko żartowała. Dziękuję za uwagę. EDIT: Jako że trochę późno zauważyłem...
mozna tez inaczej, ale twoje bascomowe petle musialy by byc calkowicei assemblerowe metoda jest bardzo brutalna ale jednoczesnie bardzo efektywna.. polega na modyfikowaniu stosu w przerwaniu... powiedzmy ze jestes gdzies w drugiej petli i wystapilo przerwanie - przerwanie latwo "dowie sie" gdzie jest pc sprawdzajac adres powrotu, teraz tabelka gdzies...
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...
Zobacz co na to assembler wygenerowany z tego kompilatora.Nigdy nie spotkalem sie z takim przypadkiem.Byc moze jest to bug kompilatora (kilka w SDCC juz sam zglaszalem).Sprobuj tez innej petli np while i zobacz co sie stanie.
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.
Po co przekształcać na wartość, wystarczy porównanie leksykograficzne. Napisz odpowiednik funkcji strcmp, która porównuje 2 napisy kończące się spacją lub bajtem 0. Jeśli p1 i p2 to wskaźniki na znaki, to: p1 = początek napisu p2 = początek napisu pętla: pomiń_nie_litery(p2) jeśli (at)p2 == 0 -> koniec tmp = strcmp(p1, p2) jeśli...
Czy to musi być assembler? Wbrew pozorom napisanie tego w języku wyższego poziomu może być znacznie prostsze, zwłaszcza dla początkującego :-) Osobiście uważam, że łatwiej jest się nauczyć podstaw C czy BASCOM'a na tyle ile się potrzebuje, niż nauczyć się pisać dobry i niezawodny kod w asemblerze. //Edit Poniżej, jak to by mogło wyglądać w C: //jakie...
Nie od parady był ten uśmieszek. Dlaczego? Cóż kolega stworzył bardzo mądry programik :D No to wręcz przeciwnie. Gorszy. Dlatego napisałem że nawet on się nie zawiesza. Chodzi mi o to że klasyczny algorytm dzielenia to zwykła pętla przesuwająca bity. Nawet jak dzielna będzie równa 0 to pętla powinna się wykonać tyle samo razy co zawsze, w przypadku...
Witam, zmagam się z napisaniem programu, który będzie sterował motorem za pomocą klawiatury, cyfry odpowiadają liczbie obrotów, zaś gwiazdka i krzyżyk za kierunek obrotów. Wyobrażam sobie napisanie tego porogramu w nastepujący sposób. Pierwsza część programu wyszukuje, czy któryś z klawiszy został wciśniety, druga część to pętla, w której jeżeli gwiazdka...
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...
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...
Bitwait S1, set Przepisz proszę na CC++. Zakładam, że przez "Bitwait S1, set" masz na myśli instrukcję, która czeka na ustawienie (set) konkretnej wartości bitu, np. oczekiwanie na to, aż przycisk (oznaczony jako S1) zostanie naciśnięty. W językach niskiego poziomu, takich jak assembler, operacje na bitach są bardzo często wykorzystywane...
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.
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.
Jak wyliczyć (Wykonać) dokładnie opóźnienie np. 500ms Nie chcę tego robić na timerze ! Chodzi mi o to jak wyznaczyć taką liczbę cykli procesora które zajmie pętla for tak aby wykonała się dokładnie w 500ms Do dokładnego odmierzania czasu służą timery. Jeżeli nie chcesz, to masz złe podejście. Nie chodzi mi o czysty assembler tylko o wykonywanie pętli...
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?
Właśnie jeszcze nie ogarniam przerwań - domyślam się o co chodzi ale jak się za to zabrać? Bo jak próbowałem zrobić "warunkami" to zdarzało się tak, że gdy raz nacisnąłem jeden klawisz np. "1" to na wszystkich segmentach pojawiało mi się 1 - domyślałem się, że pętla tak szybko za działa, że to moje jedno klikniecie odebrała jako 4 kliknięcia - wtedy...
W praktyce wychodzi, że znajomość asemblera + języka wyższego poziomu się opłaca. Ja w tej chwili dziobię głównie w C, ale do asemblera też sięgam. Najczęściej w dwóch przypadkach: 1. trzeba sprawdzić jaki kod generuje kompilator. AVR GCC na przykład lubi mi namieszać w pętlach opóźniających. W takich przypadkach bardzo przydaje się umiejętność czytania...
Prowadzącemu być może chodziło o sterownaie wyświetlaczy w przerwaniach, Ty zrobiłeś to na pętlach opóżniających. Akurat te dwa klawisze możesz sprawdzać właśnie w tych przerwaniach obsługujących wyświetlacz albo całkiem śmiało po za przerwaniami. Bez sensu jest używać aż dwóch przerwań. Jeśli już, to podepnij klawisze pod jedno wejscie INT. DELAY:...
A mógłbyś mi wytłumaczyć znaczenie IN s0, leds , bo nie rozumiem tego i dalej nie mogę tego poskładać żeby działało. PBlazeIDE to program, na którym mam to wykonać, taki sobie wybrał wykładowca i jeżeli nie warto zagłębiać się w ten mikrokontroler to już nie będę ściągał innych programów. Dodano po 6 NIE!!, przepraszam, już mam [syntax=asm]leds dsout...
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ę.
LJMP START ORG 100H START: LCALL LCD_CLR MOV A,#'D' PUSH ACC LCALL WRITE_DATA MOV A,#'=' LCALL WRITE_DATA MOV A,#'D' ; domyślam się, że tą linijkę trza dodać POP ACC LCALL WRITE_HEX CZEKAJ: ; pętla opóźniająca, znak się wyświetlił, chwile czekamy MOV A, #100 NOP NOP NOP DEC A JNZ CZEKAJ LCALL LCD_CLR ; pochwili czyścimy MOV A,#'P' ; i wyświetlamy...
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++).
Musze napisać program (opisać go komentarzami, napisać schemat blokowy a także pokazać co robi ten program) Prosze o pomoc! Z góry dziekuję! Treść projektu: Napisać program zliczający zapalone bity na portach A i B i wyprowadzający liczbę zapalonych bitów zakodowaną w formacie BCD na port C kolega z grupy wysłał mi ten program co robiliśmy na zajęciach...
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...
(at) JacekCz Jak tak się mądrzysz i peszysz to wstaw lepszą wersję CPP i Assembler ;] Ja się nie peszę (bo tak słowa użyłeś). Kryształowa kula i Pierwotny Pytający milczy, jaki assembler jest oczekiwany w szkole Pytającego. Cros kompilacja z C/CPP -> ASM jest totalnie bez sensu ze wszystkich względów (dydaktycznych, technicznych itd). Ostatni prawdziwy...
Z wykorzystaniem języka assembler można zredukować niezbędną liczbę cykli zegara do 7, co spowoduje zwiększenie liczby próbek do 15 przy 150 kHz. Nie jest to zbyt wiele, ale różnica w wyglądzie przebiegu jest wyraźna. W jednym z projektów generowałem przebieg sinusoidalny z wykorzystaniem drabinki R-2R i ATTiny 2313. Udało mi się zejść do generowania...
http://www.avrbeginners.net/ a dalej: AVR Assembler --> Conditional Branches / Loops
Dla przebiegu o okresie 30 ms i współczynniku wypełnienia 20% w trybie przerwania [syntax=assembler] ORG 0 ; wektor zerowania JMP main ; bezwarunkowo skocz poza obszar wektorów przerwań ORG 000BH ; wektor przerwania po przepełnieniu timer0 CALL podpr RETI ; powrót z przerwania ORG 0030H ; początek programu głównego main: CLR P0.7 ; wlaczenie oscyloskopu...
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....
Eee i w czym ten język jest lepszy od C++ że go tyle się wałkuje... I java i c# i assembler a c++ to jakiś niepotrzebny czy co? I powiedzcie mi jeszcze, że nie da się używać bibliotek z C++, tzn. chodzi o coś takiego potrzebuje w C# użyć funkcji fillrectattr() z newconio: void fillrectattr(WORD attr, int xb, int yb, int xe, int ye) { CONSOLE_SCREEN_BUFFER_INFO...
Po co stosować tu przerwanie? Kardynalny błąd to stosowanie polceceń opóźnień w przerwaniach. W tym programie problem tkwi w: If Przycisk = 0 Then Waitms 100 If Przycisk = 0 Then Incr Sekwencja If Sekwencja = 0 Then Incr Sekwencja If Sekwencja = 4 Then Sekwencja = 1 End If End If End If End If Popraw na: If Przycisk = 0 Then Waitms 100 If Przycisk =...
to proste ; specjalnie dla urzytkowników forum elektroda :)Eagle ; przerwanie t0 z czestoliwoscą 1Hz ; dla kwarcu 4 MHz ; uC = 89s2313 .include "2313def.inc" ; definicje rejestrów ; trochę teorii ; 1 sek przy oscylatorze 4 Mhz to 4 000 000 cykle timer 0 jest 8 bitowy ; wiec 4 000 000 / 256 = 15 625 ; sprawdzamy czy prescalerem możemy coś zdziałać podział...
Przy dłuższych liczbach bardziej opłaca się użyć agorytmu z przesuwaniem i dodawaniem a działa on tak (4 bajty x 4 bajty, wynik 8 bajtów): Przygotuj 8 bajtowy rejestr komórek w pamięci na wynik, w postaci: |Mnozna|00000000h| Gdzie 4 starsze bajty to mnożna a cztery młodsze to zera. Teraz wykonujesz pętlę 32 razy (4 bajty) Przesuwasz 8 bajtowy wynik...
Sczerze to dalej nie rozumiem> Niżej jest kod programu który napisałem, odlicza od 9-0 i wyświetla napis "koniec".Może komus uda się go tak zmodyfikowac żeby odliczał od 99 z góry dziękuję. SEG_ON EQUP1.6;włączenie wyświetlacza 7-segm. ;Stałe używane w programie ZEROEQU03FH ONEEQU006H ;kod cyfry 1 TWOEQU05BH ;kod cyfry 2 THREEEQU04FH ;kod cyfry 3...
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.
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]...
W załączniku - przykład z dokumentacji DSM'a (Gałka). Wystarczy wyslac na wyswietlacz tekst, a potem wysylac zadanie przewiniecia w pętli.
Teraz już sprawy idą w lepszym kierunku. Problematyczny jest jeszcze sposób deklaracji zmiennych w programie. Proponuję pobrać z internetu dowolny assembler na 8051 (np. ASEM-51), wtedy wszystkie błędy składniowe można na bieżąco sprawdzać. Struktura programu (dowolnego) może wyglądać np. tak: - deklaracja zmiennych i stałych, - instrukcja skoku do...
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.......
>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....
[syntax=assembler] ORG 0 ; wektor zerowania JMP MAIN ; bezwarunkowo skocz poza obszar wektorów przerwań ORG 000BH ; wektor przerwania po przepełnieniu timer0 JMP PODPR_L MAIN: MOV TMOD, #01H ; ustaw dla timer0 tryb 1 MOV TL0, #01110000b ; 65536-10640=54896 MOV TH0, #11010110b ; SETB EA ; globalnie zezwól na przerwania SETB ET0 ; zezwól na przerwanie...
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! 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ć,...
Z opisu funkcji wynika, że pętla używa 8-bitowego licznika. Gdzie w tej funkcji jest odniesienie do licznika.? W tej linii: dec %0 Po prostu jeden z rejestrów jest używany do odliczania opóźnienia i dlatego został "przezwany" licznikiem. Nie ma to nic wspólnego z fizycznymi licznikami/timerami. O wstawkach assemblerowych możesz przeczytać w manualu...
Masz napisać procedury mnożenia liczb: 1 bajtowej przez 1 bajtową (8x8) wynik będzie 16 bitowy (2 bajty) 2 bajtowej przez 1 bajtową (16x8) wynik będzie 24 bitowy 3 bajty 2 bajtowej przez 2 bajtową (16x16) wynik będzie 32 bitowy (4 bajty) Procedura przebiega tak w kodzie naturalnym binarnym: 1. Przygotowujesz rejestr wyniku o długości równej sumie ilości...
Zaczynam przygodę z STM32 i na początku już schody z którymi nie mogę sobie poradzić. Mam zainstalowane Eclipse jak i Sourcery 4.7.3, ściągnąłem przykładowy projekt z strony Freddiego do mrugania diodą i tu kompiluje się bez problemu. Lecz nie bardzo leży mi ten przykład (bez obrazy). Lubię mieć wszystko poukładane a w tym przykładzie wszystko jakoś...
Napisałem funkcję obliczającą filtr FIR - 16 współczynników - w moim playerze mp3 na kontrolerze Atmel at91sam7s256. Wszystko działa super, ale po przepisaniu funkcji z C na assembler (kod w C oraz w asm poniżej) niestety nie działa poprawnie. pętla liczenia filtru dla kolejnych sampli smp_loop jest wykonywana bez przerwy, a nawet jeśli nie to i tak...
Napisałem funkcję obliczającą filtr FIR - 16 współczynników - w moim playerze mp3 na kontrolerze Atmel at91sam7s256. Wszystko działa super, ale po przepisaniu funkcji z C na assembler (kod w C oraz w asm poniżej) niestety nie działa poprawnie. pętla liczenia filtru dla kolejnych sampli smp_loop jest wykonywana bez przerwy, a nawet jeśli nie to i tak...
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...
jak narazie to tylko umiem to zrobić sposobem kopiowania ale to za długo trwa Nie wiem czy istnieje sposób sortowania sposobem kopiowaniem. Sortować można same komórki lub w przypadku sortowania łańcuchów wskaźniki na te łańcuchy. Załączam materiały o sposobach sortowania. Żle się wyraziłem chodzi o to że ustawiam wartości np w adresie ds 0001 i je...
Witam, Bawie sie płytka STM32F0Discovery, napotkalem na dziwne zachwowanie prostej funkcji opozniajacej. Od razu mówie ze docelowo bedzie ona i tak uruchomiona na timerze, a to co ponizej traktuje jako swego rodzaju ciekawostke. Mianowicie zmienna timer_cnt schodzi do 0, a petla while sie nie chce zakonczyc. W tym czasie przerwania, DMA i Systick działa...
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
Mi komenda lpm temp,Z zgłasza ostrzerzenie(komenda nie wspierana w tym procesorze) Asembler ma bardzo dużo tzw. "knyfów". Długo już w nim piszę i nie jeden program nie zadziałał. Czy oby na pewno wszyscy mówimy o ATMEGA8 bo ja odnoszę wrażenie że chyba każdy tutaj pisze pod inny procesor. Stos źle skonfigurowany. Chyba że kolega kompiluje pod zupełnie...
Mnie tam sysutils.time() bardziej przypomina Delphi niż TP, ale nie chcę się kłócić :P Wiele lat temu, w TP7.0 robiło się takie rzeczy w taki sposób :[syntax=pascal]program minutnik; uses WinDos,CRT; var czas,zostalo, alarm : TDateTime; zakoncz : boolean; czas_i,alarm_i,zostalo_i : longint; zmm_word : word; procedure HideCursor; assembler; //kosmetyka...
Opóźnienia najlepiej realizować w postaci wstawek assemblerowych, bo wtedy możesz doliczyć się ile dana pętla pożera cykli. W C tego dokładnie nie zrobisz. Możesz sobie napisać funkcję, która będzie wykonywać pętlę for albo while wykonywała określoną ilość razy, ale jedynie metodą prób i błędów można dojść jakie faktycznie opóźnienie wykonuje. Możesz...
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...
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)
Witam Mam pewien problem, potrzebuje napisać sterownik do 6 serw. Sterowanie serwami rozwiązałem (jeśli ktoś ma lepszy pomysł to chętnie wysłucham), problem tkwi w komunikacji z komputerem, sama komunikacja działa, dane wysyłane są raczej poprawnie. Jeżeli obsługuje RS'a w przerwaniach to serwa zmieniają położenie tak jak należy, ale strasznie przy...
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...
off topic, ale po prostu musiałem... break - to jest bardzo niewygodna wada kompilatorów języka C. Mnie to bardzo kole w oczy. Na 99% to jest macro, które powoduje skok poza zasięg rozkazu masowego porównywania select lub swith break to nie makro, tylko normalna instrukcja Wada?! Zaleta! Pozwala programiście kontrolować przebieg programu. Tylko kwestia...
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...
Chciałem Wam bardzo podziękować za zainteresowanie i profesjonalne odpowiedzi. Dziękuję! Co do Assemblera - patrzyłem na jego kod. W pewnym momencie następuje pętla w której następuje 'przes'-krotne przesunięcie bitowe w lewo (za każdym razem o jeden - rozkaz LSL), następnie w pamięci umieszczana jest dziwna wartość rejestru R24 (nie wiem czy dobrze...
witam. ja zaczynalem od assemblera, potem pisalem w c a ostatnio od kilku lat w bascomie. ten ostatni jest zdecydowanie najprostszy a dzieki temu ze wiele instrukcji ma wbudowanych stworzyc zeragek na pcf8583 to ok 10 min roboty co w asemblerze pewnie robilbym tydzien. moze i jest niedopracowany (szczegolnie w kwestii stosu - mialem dokladnie se same...
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.
(at)p.kaczmarek2 , to: [syntax=cpp]b<0?-b:b[/syntax] nigdy nie będzie szybsze od abs() lub fabs() przynajmniej na x86 bo masz warunek zamiast jednej instrukcji assemblera. Natomiast: [syntax=cpp]((b >> sizeof(int) * 8 - 1)+mask)^mask[/syntax]: na 100% będzie wolniejsze (zdecydowanie zbyt dużo operacji) no i przestanie działać przy LittleEndian...
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...
Witam. To mój pierwszy post wiec proszę o wyrozumiałość. Wraz z kolegami z zespołu dostaliśmy zadanie aby zrobić termometr przy użyciu dekoderów cd4511be do które będą sterowały dwoma wyświetlaczami siedmio-segmentowymi które działają w ze wspólną anodą. Temperatura ma być podana z dokładnością do 1 stopnia C. Napisaliśmy program do terowania MC. Używamy...
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)
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, 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...
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.
Ściślej mowiąc, na 8051 nie da się zrobić operacji push R2 (na przykład). Na stos można odkładać (i zdejmować z niego) tylko akumulator i rejestr B. Trzeba wtedy zrobić tak: mov A,R2 push ACC I tu uwaga, rozkaz push A też nie przejdzie. Nie pamiętam dokładnie, ale jest to coś z adresowaniem rejestrów w przestrzeni SFR. Podobnie zachowuje się rozkaz...
(at)newtornus jeśli chodzi o podświetlanie kodu, to przechodzisz do "pełnej" odpowiedzi/edytora i tam jest "syntax" ja używam Arduino, ale jest cała lista do wyboru. Guzik Odpowiedź i Odpowiedź, to różne guziki :) Z tego opisu flagi wynika że twój sposób nie jest zły, czyszczenie jest opisane że następuje po odczycie ustawionej flagi i dostępie do rejestru...
[syntax=avrasm]# Hey Emacs, this is a -*- makefile -*- #---------------------------------------... # WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. # # Released to the Public Domain # # Additional material for this makefile was written by: # Peter Fleury # Tim Henigan # Colin O'Flynn # Reiner...
Nawet gdyby same porty GPIO się wyrobiły, to nie wyrobi się cała reszta. Skoro chcesz wykonywać odczyt z częstotliwością 40MHz, to masz mniej więcej 4 takty zegara na wykonanie wszystkiego. W super-extremalnym przypadku pętla która by to realizowała ma 4 rozkazy assemblera: 1. odczyt GPIO do rejestru 2. zapis z rejestru do RAM z postinkrementacją wskaźnika...
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...
Witam, Mam problem z początkiem nauki programowania mikrokontrolerów. Zakupiłem na Allegro programator USBasp oraz podstawkę do programowania. Taki jak w linku: <ciach> Na USBasp ustawiłem przycisk na 1-ON, 2-ON, 3-OFF. Sterowniki zainstalowałem libusb_0.1.12.1. Dodatkowo zainstalowałem WinAVR do pierwszego programowania. Następnie utworzyłem...
memcpy nie ma prawa blokować jakiegokolwiek timera. To jest zwykła funkcja biblioteczna, i na pewno nie sprawdza ktory akurat timer masz włączony i również nie ma kodu aby go wyłączyć. Memcpy jest najpewniej napisany w assemblerze i został odpowiednio zoptymalizowany. Kopiowanie duzej tablicy bajtów w pętli spowoduje kopiowanie się bajtu po bajcie,...
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
Przerwania podstawowe muszą być z częstotliwością 4*minimalna częstotliwość wyświetlania pojedyńczej cyfry. Spróbuj np. przerwania o częstotliwości 100 Hz. Co przerwanie wyświetlasz kolejną cyfrę. Co 100 przerwań zwiększasz stan zegara o 1 sekundę. Modyfikację czasu robisz po pełnym cyklu wyświetlania (4 cyfry). To co ci podałem to zasada działania...
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,...
Jeśli zachodzi potrzeba takiej optymalizacji to chyba czas najwyższy zmienić procesor na lepszy :-) Nie ma znaczenia jaki procesor, na każdy chciałbym tą funkcję zoptymalizować bo chodzi o czas odpowiedzi, im mniejszy tym lepszy. Wydaje mi się, że wpadasz w płapkę permanentnej optymalizacji. Gdyby tak było to męczyłbym Was assemblerem. Sam wiesz dobrze,...
assembler darmowy assembler zamknięta pętla otwarta pętla
czujka zalania konfiguracja thinkpad power buderus instrukcja serwisowy
hisense 55e7nq karta graficzna
Widok płyty głównej Harman Kardon AVR 660 Dane techniczne głośnika STX W.STX.10.2.180.16.F.S.MC