Wg mnie powinno być tak: mov R2, #x ; +1 P3: mov R1, #y ; +1 | P2: mov R0, #z ; +1 | | P1: djnz R0, P1 ; 2 | *z | *y | *x djnz R1, P2 ; +2 | | djnz R2, P3 ; +2 | Czyli: djnz R0 zajmuje 2 cykle, wykonuje się #z razy = Z. P2 to +1 mov, +Z, +2 na djnz R1, to wszystko razy #y, czyli Y = (1 + Z + 2) * y I tak dalej i tak dalej :) Pozdrawiam,...
warunkiem i pętlą
Producent Bascoma nie udostępnia nawet generowania kodu w asemblerze, więc tym bardziej nie oczekuj że powie Ci ile poszczególne "instrukcje" trwają. Jeśli musisz napisać coś krytycznego czasowo, to pozostaje Ci tylko asembler.
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ść....
Poczytaj o licznikach 8051, ładujesz wymierzoną liczbe do licznika, licznik odlicza tyle cykli maszynowych, i po odmierzeniu tej liczby (20ms) zmieniasz w przerwaniu stan portu, i tak w kółko, trzeba znać częstotliwość taktowania. Taki skrót żebyś wiedział czego szukać.
Kolega (at)excray słusznie zasugerował użycie symulatora. A możesz go użyć już dzisiaj, bo jest on dostępny w darmowym pakiecie Atmel Studio. Eclipse się tu do niczego nie przyda, bo ani nie ma symulatora, a hardwarowo policzenie tego wymaga odpowiedniego użycia timera, a i JTAG by się przydał. Liczba cykli będzie zależeć czy warunki w programie będą...
2 zmiennych dokładnie w tym samym czasie ( A nie prościej wyłaczyć przerwania na te 4 takty zegara. Zamiast systicka zastosuj inny timer np 32 bitowy. Wtedy przepełnienie będzie następować przy 72MHz co ok 60 sekund. Powinno wystarczyć. Masz tez specjalny rejestr co liczy cykle zegara przy wykonaniu programu (proponuję zapoznać się z DWT). Dlatego...
Przez rejestr B sie nie da. Do pobierania danych z pamieci programu sluzy instrukcja MOVC A,(at)A+DPTR. Przyklad: MOV DPTR,#Tablica MOV A,#4 <-chcesz 4 element MOVC A,(at)A+DPTR <-Do A zaladuje 4 element z tablicy ... dalsze instrukcje na A Tablica: DB 1,2,3,4,5,6,7,8,9........... UPDATE: W przykladzie kolegi powyzej to to samo tylko ze marnowane...
Jeśli dobrze pamiętam to tak to się liczyło delay1: ldi R16, 0 ;1 cykl del1: inc R16 ;1cykl brne del1 ;2 cykle (1 gdy nie ma skoku) ret ;4 cykle ;razem (1+1+2)*256-1+4=1027 cykli delay2: ldi R17, 0 ;1 cykl del2: rcall delay1 ;3+1027 cykli inc R17 ;1 cykl brne del2 ;2 cykle (1 gdy nie ma skoku) ret ;4 cykle ;razem...
Do pętli czasowych dłuższych niż 255 cykli dobrze jest stosować ten sposób: [syntax=asm] // chcemy wykonać pętlę trwającą 12380 "kółek" //wpisujemy do r24 i r25 odpowiednio 0x30 i 0x5C gdyż 0x305C to 12380 dec ldir24, low(12380) ldir25, high(12380) petla: //właściwa pętla sbiwr24, 0x01 //2 cykle brnepetla //2 cykle //kolejne rozkazy już za pętlą[/syntax]...
Witam! Kiedyś udało mi się "przyspieszyc" orginalne procedury dzielenia z noty AVR200. Oto to samo dzielenie 24/16 bitów troszkę szybciej: ;***************************************... ;* ;* "div24u" - 24/16 Bit Unsigned Division ;* ;* This subroutine divides the 24 by 16 bit numbers ;* "ddH:ddM:ddL"...
Interesuje Cię cała obsługa LCD ?? A proszę bardzo ;) ;------------------------------------ ;Obsluga LCD, kwarc 12 MHz ;tryb pracy - 4 linie danych ;znak przekazywany w R2 ;------------------------------------ RS equ P1.2 E equ P1.3 DB4 equ P1.4 DB5 equ P1.5 DB6 equ P1.6 DB7 equ P1.7 Enable equ P1.1 ljmp Program org 100h tablica: DB "Nie oszukam...
Czy to gdzieś w manualu powinienem szukać czy może w kodzie asm? Zrobiłem tez taki test że w main'e miałem: [syntax=c]AT91F_PIO_SetOutput(AT91C_BASE... AT91C_PIO_PC6); AT91F_PIO_ClearOutput(AT91C_BASE_PIOC, AT91C_PIO_PC6); licznik++; if(nHzTicker) { printf(licznik); }[/syntax] sam Timer szedł 1000Hz. Licznik naliczał zaledwie do około 279900, podczas...
... Proszę o szczegóły. Dlaczego oczywiste jest, że timer że 16-bitowy odliczy 1s? Zakładamy że taktujemy kwarcem 4MHz. Jeden takt to 1/4 000 000=0,25us. 16 bitów to 65536 cykli. 65536cykli*0,25us=16,384ms Proponuję więc zliczyć 100 cykli 10-cio milisekundowych. ilość cykli = 10ms/0,25us=40000 cykli. Wpisujesz więc do timera 40000 i czekasz aż się...
Z tego co widzę to połączyłeś kilka różnych idei i próbujesz z nich złożyć jeden system. Kolego proponuję doczytać dokładnie na czym polegają poszczególne metody a później eksperymentować. Bo taki schemat jak masz na zdjęciu to pod żadną z nich nie podchodzi. Dla przypomnienia: http://obrazki.elektroda.pl/1696615100_1... Porównaj to...
Do tej pory pisałem w C i moje programy działają bardzo dobrze i szybko, ale czasami zachodzi potrzeba żeby fragmenty programu wykonywały się w mniejszej ilości cykli zegarowych i jedyną taką możliwość daje mi Asembler o którym praktycznie nic nie wiem. Dlatego prosiłbym o rady jak zacząć, o czym powinienem pamiętać pisząc program, oraz pomocne linki....
Co do 1) standard zapisu znaków. Masz 8 bitów i pod nimi ukryte sa literki,cyferki, powrot karetki, nastepnej linii itp. 2)Tak CL mniej znaczacy bajt, CH bardziej znaczacy bajt CX 3) procek 8086 ma dwa bloki BIU i EU (BusInterfaceUnit i ExecutUnit) prauja one niezaleznie. EU dekoduje rozkazy wykonuje je, BIU zapewnia komuniacje z otoczeniem, zapelnia...
... Sorry za moją ignorancję może to jest aż tak proste, że niepotrzebnie pytam ale ... może znajdzie się ktoś chętny mi pomóc Czy poniższe makro jest bardziej czytelne , jeśli przypomnę że obliczenia dotyczą milisekund , których w sekundzie jest 1000 , a znamy ilość cykli oscylatora na sekundę :?: .MACRO Laduj_Licznik ****************************************...
Jak 10 lat temu kończyłem swoją przygodę z '51 to na celownik wziąłem PIC i AVR jako następców. Na procesory wtedy patrzyłem pod kątem programowania w asemblerze. Przeczytałem noty katalogowe 2 najbardziej popularnych przedstawicieli i wnioski moje były takie: AVR- świetna, bogata lista rozkazów na dodatek większość realizowana w jednym takcie, bardzo...
Witam Zrobiłem programik w asemblerze i dla najgorszego przypadku zajęło to 38 cykli zegara, razem z wywołaniem i powrotem, ale jako licznik użyłem jednego rejestru. Napisz jakiej wielkości musi być licznik?
Fakt, trzeba wszytko robić programowo, ale podejście jest podobne: asembler, synchronizacja z rastrem, cyklowanie. (każdy pojedyńczy cykl procesora to czasami odległość jednego lub kilku pikseli w linii ! , czasem ważne było dołożenie jednej lub kilku instrukcji nop (No Operation)) Więc cały czasowo krytyczny rdzeń programu jest napisany w asemblerze,...
piszę w Keil-u j++; nie trwa jeden cykl? to istnieje coś co trwa jeden cykl? wstawka z asemblera jak będzie wyglądać? a nie da się tego jakoś zrobić w C?
Wpisanie stałej zajmuje 1 cykl, a djnz 2 cykle czyli 1 + (1+2)*100=301us
Jeśli pan podpina wyświetlacz do at89c2051 ,który nie ma wyjścia magistrali 8080 i emuluje pan jedną żeby przerobić na drugą dodając jeszcze zewnętrzne bramki to nie wiem do końca czemu ma to służyć profesjonalizmu to tu jakoś nie mogę się doszukać . U dobrego programisty to jest stabilizator kilka kondensatorów rezonator kwarcowy o ile jest taka potrzeba...
Witam! Niejednokrotnie już korzystałem z usług tego forum lecz pierwszy raz zdecydowałem się założyć własny temat (po prostu nie znalazłem odpowiedzi na nurtujące mnie pytania w tematach już istniejących). Otóż mam następujące pytania: 1) Jak można inaczej zapisać instrukcje PUSH i POP w asemblerze nie używając tychże instrukcji? Do dyspozycji mam rejestry:...
Witam, potrzebuję pomocy w kwestii odczytu danych z układu TLC549, czy ktoś orientuje się jak miałby wyglądać program odczytu z takiego układu, biorąc pod uwagę mikrokontroler 89c51 posługując się asemblerem. Z dokumentacji wynika że konwersja składa się z 36 cyklów zegara czyli jak z rysunku z dokumentacji wynika że odebrane maja zostać dwa bajty,...
Nie znam BASCOM'a, ale sposobów na to byłoby mnóstwo, niezależnie od języka jaki wybierzesz. Podłączyć jeden z pinów IO pod RESET. Ustawiając go jako WY dokonujemy resetu, a po resecie sam powróci jako WE. Wymaga to niestety przeróbki schematu. Możesz napisać procedurkę ustawiającą procesor "na czysto" i wykonać skok pod adres 0000. Tutaj najlepszy...
W pamięci mam przebieg ośmiobitowego audio, przy czym zero=080h. Szukam szybkiego algorytmu zmniejszającego poziom przebiegu na wyjściu d/a pamiętając o utrzymaniu poziomu zerowego na 080h (wystarczy kilka poziomów, np. różniących się bitową rozdzielczością). Liczy się każdy cykl, dlatego zadaję tu pytanie - może jest jakiś prosty sposób, na który nie...
Jaki masz zegar w układzie (częstotliwość)? Twoja procedura opóźniająca zajmuje około 256*256 cyklów, a to najprawdopodobniej za mało. Możesz np. wywołać funkcję CZEKAJ w analogicznej pętli, odpowiednią dla Twojego przypadku, liczbę razy.
Beda, beda :) W programie musisz ulozyc ich kolejnosc, przy kazdym cyklu. Potem tak, przy przerwaniu timera glownego wlaczasz wszystkie, i wlaczasz timerek 2 ktory odmierza czas swiecenia najciemniejszej diody. Wlacza sie przerwanie i bach wylaczasz te diode i wlaczasz znowu tyimer ktory odlicza czas swieceina drugiej njaciemniejszej minus czas swiecenia...
Sprawdziłem drugi raz te same 15 komórek które katowałem wcześniej. O ile wtedy wyniki były (nawet bardzo) powtarzalne, to teraz są zupełnie różne więc nie liczyłem średniej 31,213 3,202 261,906 191 357 94,567 5,561 3,914 268,649 44,019 529,265 308 12 404,232 231 Tak więc wychodzi na to że po pierwszym błędzie komórkę można uznać za martwą i nie warto...
100 cykli - no to faktycznie strasznie mało :( A czy próbowałeś już przerobić zegar na PLL tak jak chciałeś na początku tematu? Z analizą delay odpuszczę sobie bo z asemblerem PICów jestem nieco nie kompatybilny :) Ostatnio pisałem w asemblerze 8035 jakieś 15 lat temu.
do wejścia INT0 lub INT1 podłączasz generator 1Hz (np: na kostce NE555) i w pamięci pod adresem 0003h umieszczasz kod, ewentualnie możesz zrobić pętlę opóźniającą, ale wtedy musisz obliczyć czas wykonywania jednego cyklu na podstawie posiadanego kwarcu i ilość cykli wykonania jednej pętli i wyliczyć ilość iteracji pętli. mniej więcej wygląda to tak...
Wartosc 19453 (jak się nie pomylilem w liczeniu) wynika z tego ze masz kwarc 11.0592MHz wiec (65536-(50ms/1.085us)=19453) Mnie wyszlo dokladnie: 19456 ..... ale to dlatego ze ja nie zaokrąglałem wartości .. ale w sumie to bez znaczenia 3 cykle jedna czy druga strone ;)
a ja bym najbardziej polecał asembler, kod można tak uprościć.. taki cykl: (1) inicjuj ADC aby zaczoł próbkować (2) pobierz dane z ADC (3) wpisz dane do rejestru przesówanego (4) pobierz dane z ADC (5) inicjuj ADC aby zaczoł próbkować (6) jeśli rejestr przesówany niepusty to czekaj (7) wpisz dane do rejestru przesówanego (8) skocz do (4) w ten sposób...
Bo tyle wpisałeś do rejestru: "mov R2,#0xff". 0xFF to jest właśnie 255. W poprzednich tez tyle wpisałeś ale taka wartość tam wykona się tylko raz a następne pętle będą trwać 256 cykli. Dokładniej Twoja pętla wykona się 2*255*255 + 2*256*256*254 cykli plus cykle "mov...", "ret", i "call".
Procedury delay liczą 256*256 cykli co daje trochę ponad 65ms dla zegara 1 MHz... loop: inc r16 ;1 cykl brne loop ;2 lub 1 cykl inc r17 ;1cykl brne loop ;2 lub 1 cykl ret Teraz sobie policz , czy to zajmie procowi 65ms , czy może 197ms :D Co innego , gdybyś użył timera ;) Piotrek
Jezeli chodzi o Bascom to Bog jeden wie ile sie wykonuje jedna "instrukcja". Jezeli chodzi o asembler to istnieje cos takiego jak lista rozkazow. Wymienione sa wszystkie instrukcje, co robia i ile cykli maszynowych procesora zajmuja. Nie podales co to za procesor ale zakladam ze to AVR. Wiec AVR jest procesorem w ktorym 1 cykl kwarcu = 1 cykl maszynowy...
Witam. Na wstępie chciałem zaznaczyć że jeżeli chodzi o Asemblera to jestem kompletnie zielony, a pech chciał że musze wykonać dwa zadania z nim związane, więc będe wdzięczny za każdą wskazówke i okazaną pomoc ;) Zad 1) Napisz kod w asemblerze odpowiadający fragmentowi kodu w C z wykorzystaniem TYLKO instrukcji MOV, SHL, SHR, SUB, JZ, JNZ, POP i PUSH...
mam zamiar zacząc zabawe z programowaniem mikrokontrolerow, kupilem ksiazeke brogramowanie mikrokontrolerow avr w jezyku bascom, odwiedzilem kilka stron i nie wiem od czego mam zaczac czy ksiazka to dobry wybor, czy zestaw zl2avr na poczatek to dobry wybor, doradzcie mi cos Każdy od czegoś zaczynał. Czy to był asembler, C czy Bascom. Ja zaczynałem...
Jestem początkujący. Czy ktoś mógłby mi opisać jak zrobić opóźnienie na liczniku T0 w asemblerze. Ważne są ustawienia TMOD i TCON ale co dalej. Chce uzyskać opóźnienie około 1s (jak wywołać przerwanie od licznika i jak je realizowac aby trwało 1s) ? Kwarc 20MHz, cykl maszynowy trwa 0,8us.
autor chyba nie pisał tego w ASM :) Autor, owszem, pisał w asm. Świadczy o tym chociażby organizacja kodu. Nie ma wektorów przerwań, ani typowej dla C inicjalizacji zmiennych. Program zaczyna się od adresu 0x0000 i od razu jest inicjalizacja peryferiów. Plik .asm najpewniej nie pochodzi od autora, lecz od osoby trzeciej i na pewno został wygenerowany...
Skoro masz program, i mówimy o asemblerze to odpowiednie instrukcje potrzebują konkretną liczbę cykli procesora na wykonanie - przeanalizuj program zgodnie z dokumentacją techniczną procesora (uwzględniając częstotliwość z jaką będzie pracował)... co do poprawności - kod U2 służy głównie do wykonywania obliczeń na liczbach ze znakiem. Jak dla mnie -...
Witam. Kolejne pytanie z cyklu "jestem zielony w tym" - w jakim środowisku zaprogramować AT90S8051 ?? Znam C całkiem nieźle, mógłby być też asembler - znam go z laboratorium tak w miarę. Ale chodzi mi o podanie nazwy środowiska, ewentualnie linku do niego, skąd można go ściągnąc. Mam także prośbę, o jakiś link do opisu, jak zrobić programator do 8051...
No nie, poczekaj. Wstawka ta ustawia bit Enabled, odczekuje cykl i czyści bit.
Ja studiowałem zaocznie więc nie miałem żadnych praktyk. Na studiach uczyłem się asemblerów z różnych procesorów (łącznie z tym ile bajtów i cykli zajmuje rozkaz) i to nijak się nie przydaje, niestety nauczanie nie idzie z duchem czasu. Co do wypłaty, będąc po studiach czyli zero praktyki, to ok. 2kPLN netto można zarobić a później to do ok 3kPLN albo...
Witam. Mam np. polecenie w asemblerze: ADD AL, (00FFH). Jak określić, ile wykona się cykli rozkazowych a ile maszynowych?
(at)asembler Wydaje mi się że to rozwiązanie odpada jeśli mam program, który nie wykonuje się w takim samym czasie w kazdym cyklu. Aczkolwiek będzie to chyba działać bardzo fajnie w przerwaniu wykonywanym np. co 10ms, wystarczy ustawić aby tylko przy niektórych wywołaniach wykonywało pomiar/odczyt i wtedy nie potrzebuję żadnego opóźnienia. A jakie...
Nie znam języków wysokiego poziomu - więc program jest w asemblerze, ale jeszcze raz powtarzam - nie przypisuję go sobie, ja go jedynie dostosowałem do moich potrzeb. Nie jestem programistą ale wydaje mi się że w zastosowaniach gdzie priorytetem jest określony czas obiegu pętli (np w falowniku) asembler się najlepiej sprawdzi, bo mamy kontrolę nad każdym...
Gdzie mogę sprawdzić ile cykli wykonuje się każda instrukcja kodu (w asemblerze) dla STM32F103 ?
Oczywiscie ze mozesz nuzywac nazw rejestru w roznych czesciach programu. A do przechowywania zmiennych zdecydowanie uzywaj RAM-u. Zreszta stos jest czescia RAM-u tyle tylko ze dostep do niego jest przez inne instrukcje i trzeba dbac o kolejnosc. Czytelniej chyba jest gdy napiszesz tak: .equ rTemp1=R16 zmienna1: .BYTE 1 lds rTemp1, zmienna1 ;laduje...
Potrzebuje jakis wydajny uC, zeby szybciej przetwarzal dane, najlepiej zeby w jednym cyklu zrobil jedna instrukje A kody w bascomie nigdy nie były wydajne i nikt nie zrobi w nim wydajnego kodu chyba ze wstawi asembler w co ja sie nie bawie. Siedze w bascomie bo to chyba najprostszy jezyk i szybko sie pisze programy. Potrzebuje innego uC bo nie wystarczy...
W pierwszym przypadku w celu jak największej dokładności czasu opóźnienia jest wyliczana liczba przebiegów wewnętrznej pętli (która wykonuje się w 3 lub 4 cyklach, zależnie od tego, czy licznik może mieć 1 bajt, czy musi mieć 2 bajty) - te obliczenia są wykonywane na liczbach zmiennoprzecinkowych. Co do drugiego kodu, nie jest on funkcjonalnie taki...
Witam! LJMP START ORG 100H START: CLR P1.0 SETB P1.1 LOO: LJMP LOO No fajny program szkoda tylko, że to asembler 51 a attiny26 to avr, to zupelnie inne asemblery. w tiny26 nie ma portu 1 jest portb i porta Dodano po 1 Dodatkowo w avr musisz ustawic dla kazdego portu 2 rejestry ddr i port, a jesli chcesz uzywac jako wejscia to czytasz z rejestru pin...
Dokladnie chodzi o ta szerokosc impulsu w pelnym cyklu, tak jak napisales. To co ci napisalem, na asembler jest b.latwo przerobic: wy equ p1.2 ct equ 10h ;1bajt pwm: mov r2,#16 pwm1: mov a,r2 clr c subb a,ct jnc pwm2 setb wy jc pwm2 clr wy pwm2: djnz r2,pwm1 ajmp pwm Napisalem to z glowy, wiec moga tu byc bledy. Jak widzisz w asm. jest to...
Jak juz pisali koledzy taktowanie procesora nie jest rownowazne z predkoscia jaka dziala rdzen. W rodzinie C51 jedna instrukcja wykonuje sie w 12 cykli zegarowych (standardowo) Sa wersje procesorow C51 co maja to skrocone do 6,4,2 cykli ale nadal taki procesor bedzie wolniejszy od taktowanego tym samym zegarem procesora AVR. 1. Procesory AVR sa SZYBSZE...
Aczkolwiek to co robisz jest bez sensu ale: http://infocenter.arm.com/help/index.jsp... To jest bardzo mylące i taktoliczenie z AVR-ów się nie sprawdzi. Zapomnij o asemblerze.
Przy tak niskiej częstotliwości (sygnałem jest prostokąt o stałym wypełnieniu 50%) to chyba prościej jest rozwiązać sprawę programowo. Zresztą kolega asembler sie nieco pomylił w obliczeniach. Wystarczy zmienić kwarc na 12MHz by obliczenia były całkowitymi liczbami. Obliczenia: 20kHz|12Mhz=600 cykli zegarowych 30kHz|12Mhz=400 cykli zegarowych czyli...
Jeśli mam program w j.ASM ,czy można go przerobić na program w j.C. Proszę o porady jak poprawić ten kod aby miał dokładniejsze duty cycle 50% To co próbujesz zrobić jest nielogiczne, język C i każdy język wyższego poziomu służy temu abyś miał łatwiej jako programista, żebyś mógł napisać prostszy kod i nie musiał wiedzieć jak on to robi niskopozimowo,...
https://obrazki.elektroda.pl/6848039300_... Ogranicznik czasu pracy to dość banalne urządzenie włączane pomiędzy mechanicznym włącznikiem ciśnieniowym a pompą, mające ochronić ją przed przegrzaniem (skutkiem suchobiegu). Zasada działania: 1. Po włączeniu zasilania przekaźnik jest włączony i zaczyna się odliczanie 100 sekund (w normalnej...
hehe doszliśmy razem z kolegą po schemacie blokowym, że program wykonuje się 360 000 x, nie bez przypadku podałem częstotliwość kwarcu. DJNZ w moim uP trwa 2 cykle, czyli ~2,16 us. Dlatego całość ~0,7. Używam tego opóźnienia w zegarze binarnym, przy obsłudze przycisków, sam zegar operuje na T0.
po jakimś czasie nad kodem doczytałem się, że konwencję 'liczby' masz jako znaki, jedno z trudniejszych do obliczeń (a tradycyjnie konwersja jest serią mnożeń rzez 10). Bez wódki tego nie wyobrażę sobie :) jak mawiali starożytni Rosjanie. Gdybym ja robił, wyznaczył bym sobie trzymanie liczby binarnie, w rejestrze, skonwertował do/z (nie ukrywam, mógłbym...
Witam mam podobny problem i nijak nie mogę sobie poradzić LED z WS2812B pierwsza dioda w taśmie się zapala (wszystkie kolory, i PWM jest oki) a następne nie chcą niestety może mi ktoś pomoże :( - dzięki [syntax=basic4gl][/syntax] $regfile = "m328pdef.DAT" $crystal = 16000000 Config Portd.1 = Output Pind.1 = 0 Dim A As Word Dim Green As Byte , Red As...
Reset to wykonanie programu o $0000 ... Niezupełnie, są jeszcze inne skutki np.: During reset, all I/O Registers are set to their initial values, ... The I/O ports of the AVR are immediately reset to their initial state when a reset source goes active. ... After all reset sources have gone inactive, a delay counter is invoked, stretching the internal...
Skorzystanie z rozwinięcia w szereg Taylora jest jednym ze sposobów. Chociaż wydawało mi się, że przybliża się rozwinięciem jakieś bardziej skomplikowane wyrażenia, gdzie stosunek dokładność/czas wykonania będzie korzystny. Assemblera znam z programowania na PC. W AVR używam C, na razie asm nie jest mi potrzebny. Z ciekawości zajrzałem do datasheeta...
Ok ,a czy nie da sie odrazu zapisac sprawdzania przycisku pomijajac zaladowanie stanu portu do akumulatora ?? np : sprawdz: // petla sprawdania przyciskow P0-P7 jnb P2.0,wys0 // jesli P2.0 jest 0 skok do wysw0 jnb P2.1,wys1 jnb P2.2,wys2 . . . itd (...) Można sprawdzać stan linii portu 2 w ten sposób, nie trzeba wykorzystywać akumulatora. mov acc,...
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...
Masz tu prosty przykład w .asm START: MOV P1,#127 ;Podstaw 01111111 do portu p1 #127 Lcall TIME_N100 ;Wywołaj podprogram czas_n1 MOV P1,#191 ;Podstaw 10111111 do portu p1 #197 Lcall TIME_N100 ;Wywołaj podprogram czas_n1 Sjmp START ;Skocz do etykiety ;*************************************** ;podprogram opóznienie czasowe TIME_N100: PUSHACC ;przechowaj...
Ja w którymś momencie fascynacji procesorami (czasy studenckie) zrobiłem system z SRAM programowanym bezpośrednio z komputera (komputer wybierał konfigurację i robił reset '51). Tyle, że to się nadawało tylko do uruchomień. Z resztą ten układ kolegi z SRAM i EPROM w sumie też (chyba, było podtrzymanie zasilania SRAM'u). Niestety (a może "stety") wtedy...
AVR-y były projektowane pod języki wysokiego poziomu właśnie po to, żeby zwykły śmiertelnik nie musiał się męczyć z asemblerem. Że co prosze?????? AVR był projektowany pod języki wysokiego poziomu? To dlaczego ma architekturę RISC (bardzo ograniczona lista rozkazów, dużo równoprawnych rejestrów itp.)? Właśnie dlatego żeby programista miał jak największą...
Czesc Za dwa tygodnie mam egzamin z wykładów i ćwiczeń z asemblera. Ponieważ jest to ważny egzamin bardzo zależy mi na szybkim nauczeniu się programowania w asemblerze dla 8086. Jaką książkę możecie polecić dla początkującego lub kurs ? pozdrawiam markusek(at)interia.pl Tylko proszę nie podawajcie odpowiedzi z cyklu www.google.pl
Weź kalkulator, policz ile cykli maszynowych trwa wykonanie 1 akcji, dodaj prosty licznik w każdej akcji i powtarzaj daną akcję tak długo, aż upłynie 1 sekunda. Szkoda że nie wspomniałeś, że ten program ma "śmigać" na Zestawie dydaktycznym DSM-51 :| Piotrek
Nie 30, tylko 6 plików... No dobra, Ctrl+C, Ctrl+V: ADD A , Rn do akumulatora dodawana jest zawartość rejestru Rn A <− A + Rn gdzie Rn = R0...R7 (jeden z rejestrów roboczych) kod: 0 0 1 0 1 n2 n1 n0, gdzie n2...n0 – wskazują na R0...7 stąd: 28h−2Fh cykle: 1 bajty: 1 przykład: ADD A , R2 – ADD A , adres do akumulatora dodawana...
To nie tak. Jak chcesz używać AVR Studio to musisz używać ich funkcji do zapisu / odczytu EEPROM-u. Funkcje kompilatora są napisane jako inline assembler i zapewniają, że opóźnienie między wystawieniem bitu Write Enable i zapisem (lub odczytem) będzie mniejsze niż 4 cykle. Jeżeli sam robisz taki zapis w C, to kompilator generuje ci więcej kodu i warunek...
Witam Powstawiaj odpowiednie instrukcje tam gdzie napisałem zapal, zgaś itp. Powinien program zadziałać nie daję gwarancji że się nie machnołem. Niemniej idea chyba będzie widoczna i powinieneś w razie czego uruchomić ten program. Pozdrawiam ledequp1.7 buzerequp1.5 licznikequ21h ; licznik przerwań czas_led22h czas_buz23h czy_sequ1 ; czy sekunda org0000h...
Problem został rozwiązany. Kłopot polagał na braku # jak to wskazał kolega JarekC. delay_reg: ;R2*3+4 cykli del: NOP ;1 cykl DJNZ R2,del ;2 cykle RET ;2 cykle inicjalizacja_1wire: CLR EA MOV R2,#255d CLR wire LCALL delay_reg ;769us SETB wire JB wire,$ SETB EA CLR LED LCALL delay_long SETB LED RET wyslij_jeden: MOV R2,#2d CLR wire LCALL...
To jest zwykła matematyka jak potrafisz uprościć wielomian uprościsz zapis w asemblerze tylko co tu upraszczać jak tam są operacje zajmujące pojedyncze cykle zegara ?
Takie opóźnienie na sztywno można zrobić na instrukcjach !nop wpisanych bezpośrednio do programu np. w Bascomie. Jeden nop zajmuje 1 albo 2 cykle procka, to se przelicz przez twój zegar ile to będzie. nop-ów można wsadzić oczywiście kilka pod rząd, jeśli trzeba.
No to trzeba je oprogramować tak, aby nie bruździło... czas obsługi przerwania ok. 1-2 µs (przez wstawkę asemblerową) chyba nie zrobi na transmisji 1Wire większego wrażenia ? Przy 8 MHz mamy do dyspozycji 8 cykli zegarowych w czasie 1 µs, a przy 16MHz - 16 cykli zegarowych. reti zajmuje 4 cykle, cbi / sbi po 2 cykle, ewentualne nop pomiędzy...
Dawno temu programista ,to był człowiek z wiedzą ,który znał asembler i potrafił myśleć binarnie . Ale że człowiek sobie upraszcza to dziś mamy arma w czajniku który przyspiesza mało optymalny bo uniwersalny kod. Rzeczywiście działa szybciej na 100MHz zegarze w stosunku do starej 0C51 która miała cykl rozkazowy 12 taktów zegara czyli przy zawrotnych...
Zajrzyj sobie do util/delay.h, to będziesz widział jak to jest liczone. Pętla wykonuje się w jakiejś z góry znanej ilości cykli (jest napisana w asemblerze), trzeba tylko przeliczyć ile obiegów tej pętli przypada na zadane opóźnienie, do tego trzeba doliczyć overhead , czyli instrukcje związane z inicjalizacją pętli itp. Do dokładnego odmierzania czasu...
Witam! Napisałem następujący program w asemblerze i chciałbym przerobić go w ten sposób aby na naciśnięcie przycisku było np kilka sekund, a po tym czasie program zaczynałby się od nowa. Pojawia się jednak problem, ponieważ w trakcie wykonywania pętli typu wait: ldi r18,255 dec r18 brne wait program nie zareaguje na wciśnięcie przycisku. To wstaw...
Czesc.Spotkalem sie z takim problemem.Programuje w C w WinAVR.Poniewaz aktualnie jestem zmuszony do uzycia wstawki asemblerowej w celu sprytnej modyfikacji stosu i podstawienia tam innego adresu powrotu niz ten ktory jest tam zapisany przegladam sobie kod asemblera aby sprawdzic dokladnie co kiedy sie dzieje oraz dokumentacje do asemblera i...niespodzianka.Konkretnie...
Schemat mam gdzieś nabazgrany na kartce, póki co powinien wystarczyć opis połączeń powyżej. Jeśli chodzi o zapis do pamięci, to chyba jedynie do EEPROM na 1-wire, bo w układzie nie ma już wolnych wyprowadzeń - budowa płytki uniwersalnej jest taka, że port 3.7 jest zwarty do masy, a reszta jest wykorzystana na sterowanie wyświetlaczem, UART i 1-wire....
Tu masz materiały: [url=http://www.elportal.pl/index.php?mo... Co ty chcesz od komparatora?, co to masz 2051?. Przeglądnij materiały pod względem przerwań i dobrania wartości timera dla odpowiednich zwłok czasowych. Dodam że każdy tryb jego pracy by się nadawał, może być z...
Staram się wytłumaczyć istotę rozwiązania a nie szczegóły. Liczy się istota i pomysł. Przynajmniej dla mnie. Ani myślę prowadzić kogokolwiek za rączkę. To tak tytułem nawiązania do pierwszego akapitu mojej poprzedniej odpowiedzi. Jak napisałem na końcu nie jest to system operacyjny z wywłaszczaniem i programem szeregującym zadania. Ma swoje ograniczenia....
Wykonanie i przetestowanie programu typowego pilota (w asemblerze) trwa ok. 1godziny. Zapominasz, że ja też mam "biblioteki". Są to wzorce programów dla większości stosowanych systemów IR - napisane przeze mnie w ciągu lat pracy. I uwierz mi na słowo, ze czym innym jest stworzenie programu dla własnych potrzeb, a czym innym wersji komercyjnej, która...
Panowie, czy któryś z was używał VUSB z pamięcią zewnętrzną RAM ? Ja mam 64k na mojej płytce z atmega128 i niestety gdy dodaje: Trochę późno ale może się komuś jeszcze przyda. Problem leży w tym ze VUSB wykorzystuje podobierane instrukcje do realizacji odpowiednich Timingów, a niektórymi z tych instrukcji są instrukcje Push i Pop. Przy stosie w pamięci...
Jasne. Ale robi to tak (fragment pliku *.lst) : SIGNAL(SIG_INTERRUPT0) {//-AUX_RD : patrz schemat!!! 82:1f 92 pushr1 84:0f 92 pushr0 86:0f b6 inr0, 0x3f; 63 88:0f 92 pushr0 8a:11 24 eorr1, r1 8c:8f 93 pushr24 8e:9f 93 pushr25 outb(ADDirPort,0xff); //brama jako wyjście //---właściwa reakcja na int 90:8f ef ldir24, 0xFF; 255 92:8a bb out0x1a, r24; 26...
Chodzi mi o linijkę zaznaczoną gwiazdkami . Kompilator wyrzuca mi błąd takiej treści error: Undefined symbol: SPL i nie wiem co jest nie tak, w tej linijce .include "2313def.inc" .def acc = r16 ; nadanie rejestrowi r16 nazwy symbolicznej .cseg .org 0x00 ldi acc, 0b11111111 ; załaduj do acc liczbę 255 (0xff) out DDRB, acc ; wpisanie...
Spróbowałem , z 25us zeszło na 15 , to troche lepiej ale faktycznie spróbuje asemblera , lubie jak się wszystko zgadza , a cykle zegara nie lądują gdzieś w ciemnej piwnicy. Rozumiem więc że zanim program obsłuży przerwanie to zużywa około 200 cykli na przechowanie stosu. Powstaje we mnie wariacka myśl żeby port oco2 podać na int (drutem) i dopiero tym...
to jest chyba najprostrzy kod opuzniajacy 40us w asemblerze, zerknij do helpa bascoma i zobacz jakie sa dostepne rozkazy asemblera, trzeba wziasc pod uwage ile cykli maszynowych zabiera kazdy z rozkazow. Teraz jestem w pracy i nie bardzo moge sprawdzic.
Witam Program pisałem dość późno w nocy, ostrzegałem zresztą że może nie być jeszcze dobrze. Wielkie dzięki elektryk , pętla skróciła się o 8 cykli zegarowych i ma teraz 38 cykli i 1895Hz a przy 12 kanałach PWM 50 cykli i 1440Hz. Jak widać w asemblerze można robić cuda :D .
Kolega mkpl chyba się na nas obraził i postanowił się nauczyć z tego co mu podesłaliśmy, albo co gorsza samemu poszukać w sieci. Ja też nie wiem ile cykli zegara .... mimo, że pisałem w asemblerze na '51, ale to było dawno temu. Po prostu nie pamiętam, ale od tego są karty katalogowe, dokumentacje języka itp. itd. oraz Google !
Większośc komputerów liczy na poziomie binarnym a dopiero potem następuje interpretacja .Dzisiejszy stan wiedzy w tym temacie odbiega jednak od naszych przyzwyczajeń więc są i inne rozwiązania. Dodano po 4 Asembler to jest interfejs pomiędzy procesorem a resztą.Procesor ma "zaszyte" pewne stany,które skracają czas wykonywania poleceń.Przykładow bez...
To się nazywa optymalizacja kodu :) dzięki Przetestowałem procedurę w symulatorze i nie działała prawidłowo (ani z mov ani z xch), okazało się, że po ostatnim końcowym przesunięciu przed wyjściem z pętli w akumulatorze umieszczana była niepotrzebnie zawartość rejestru pomocniczego. Po drobnej zmianie działa ok. Dla ciekawych: trwa 55 cykli maszynowych....
Witam, http://obrazki.elektroda.pl/8289051000_1... Pomyślałem, że warto byłoby pokazać dodatkową funkcjonalność wyświetlaczy DWIN ze sterownikiem DGUS a mianowicie OS. Do demonstracji został wybrany wyświetlacz DMT80480T070_18WT. Jest to model panelowy o IP65 matrycy 7", rozdzielczości 800x480 i interfejsie RS232/485 (zamiennie). Określenie...
Procek to AT89C4051, watchdog ADM691AM, zegar PCF 8583P, wyświetlacz 4 cyfry 14 mm sterowany TDA1064, klawiatura 4 przyciski. Udostępnię schemat i płytkę PCB jak tylko skończę. Program napisany w języku Asemblera. W tym programie jest 24 cykle kolektora w azymucie (co 30 minut, przykładowo od godz. 8:00 do 20:00), co daje obrót kolektorów od 0 do 120...
Wiem że pytanie to pojawiało się zapewne już nie raz. Chciałbym się dowiedzieć jak wygląda obsługa przerwania, timera w C. W asemblerze uaktywnialo się przerwanie np. org 000bh sjmp int_timT0 i pod etykietą int_timT0 umieszczaszało się kawalek programu ( co ma robic jak dojdzie do przerwania ). Jak to wygląda w C?. Druga sprawa w asemblerze wiedzialem...
Tak właśnie myślałem że używanie przerwań i poleceń wait nie jest dobrym rozwiązaniem. Dzięki za odpowiedź. To nie ma nic wspólnego. Po to są przerwania żeby w ten sposób z nich korzystać. Natomiast twój problem bierze się z całkowicie czegoś innego. Po prostu tak napisałeś przerwanie i tak często je wykonujesz, że u ciebie w tym konkretnym przypadku...
cykle ładowania cykle prania cykle zapisu
światła jazda dzienny rozmagnesować magnes wymieniać rozrząd vectra
straż graniczna alternatywa autocad
Czy kondensatory kartoflaki mają polaryzację? Honda Civic gaśnie na zimnym silniku - przyczyny i rozwiązania