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...
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...
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...
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,...
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...
Niby dlaczego za małe(krótkie) Procedury delay liczą 256*256 cykli co daje trochę ponad 65ms dla zegara 1 MHz. Procedury, które podałem łatwo dostosować do dowolnego zegara. Wystarczy pozmieniać wartości ładowane do odpowiednich rejestrow. W komentarzach podane są cykle zegarowe zajmowane przez określoną instrukcję. Dla 1MHz cykl wykonuje się w czasie...
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...
Witam, kiedyś bawiłem się mikrokontrolerkami AVR w Bascomie - ciekawa sprawa, ale po jakimś czasie zaczął mi się nudzić :). Postanowiłem więc spróbować sił w Asemblerze. Korzystam z kursu na stronie mikrokontrolery.net - ciekawy, ale trochę za mało jest wyjaśnień, dlatego bardzo proszę o pomoc :) Mam problem z układem czasowym, tzn. działa mi, ale ja...
Perler: w twoim kodzie jest dużo niedociągnięć.. funkcje Delay powinieneś wywołać przez 'rcall', tu zaś przychodzi brak stosu i brak 'ret' na końcu. w samym Delay widze odkładanie 4 rejestrów (gdzie?) ale niewidze ich zdejmowania ani pętli do opóźnienia.. po wystawieniu wartości 0x00 na porta odrazu dokonujesz skoku do początku pętli i odrazu zmieniasz...
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ść....
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...
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"...
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...
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?
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...
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...
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ć.
Wpisanie stałej zajmuje 1 cykl, a djnz 2 cykle czyli 1 + (1+2)*100=301us
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...
Najlepiej zdekompilować i policzyć instrukcje asemblera
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?
warunkiem i pętlą
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,...
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".
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]...
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.
Witam. Mam np. polecenie w asemblerze: ADD AL, (00FFH). Jak określić, ile wykona się cykli rozkazowych a ile maszynowych?
Gdzie mogę sprawdzić ile cykli wykonuje się każda instrukcja kodu (w asemblerze) dla STM32F103 ?
No nie, poczekaj. Wstawka ta ustawia bit Enabled, odczekuje cykl i czyści bit.
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 ;)
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...
... 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ę...
Jedyne, co ja mogę poradzić - to odesłać na stronę "Elektroniki dla Wszystkich": [url=http://elportal.pl/index.php?module... - znajduje się tam cykl programowania '51. Co prawda opisywany jest zestaw startowy, ale i bez niego można ten kurs wykorzystać - opisy instrukcji asemblera są...
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.
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.
Pytania pomocnicze: - w jakim cyklu będziesz to wysyłał (w kółko, co określony odstęp czasu, czy po naciśnięciu dodatkowego guzika) - z jaką maksymalną prędkością będziesz transmitował strumień bitów - moduł światłowodu zakładam że przyjmuje poziomy TTL Na razie widzę że dowolny procesor z 21 nóżkami I/O da radę np. '51 (AT89S51) lub AVR(ATmega8/16)....
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
nie da sie w C prosto uzyskac dostepu do rejestrow. pozatym zmiana PC niekoniecznie odpowiada czasowi wykonania instrukcji, chyba ze twoj kompilator jest bardzo glupi, albo twoj kod bardzo kiepski. mozesz uzyc czegos takiego: #define __tic() T0PR=0; T0CTCR=TxCTCR_MODE_TIMER; T0MCR=0; T0TCR=TxTCR_CounterReset; T0TCR=TxTCR_CounterEnable #define...
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 ?
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:...
Rozumiem, że przez "obliczyć %" masz na myśli policzenie 100 * x/15360. Żeby było prościej liczysz x/153 - błąd nieduży - przy niskich wartościach niweluje potrzebę korekty zaokrąglania, przy bliskich 100% błąd jest największy i dochodzi do 0.5%. Możesz sobie ręcznie zoptymalizować procedurę dzielenia dla znanego dzielnika - 153 to 0x99 binarnie, a...
Witam, tak jak powiedział powyżej kolega gwolf - użyj expanderów I2C a zamiast 8bitowego możesz użyć 16bitowych. Pod drugiej stronie tych expanderów możesz urządzić sobie już wszystko wg woli. A co do AVR-ków jak niektórzy mówią - wyrobią się nawet z większą ilością multipleksowanych wyświetlaczy. Pomimo to, że na maxa mogą pracować z trochę mniejszą...
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...
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...
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...
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 policz cykle - ile trwa odczyt z ADC, przemnożenie i przesłanie tego do rejestru - ja widzę że do paru kHz (8..10) AVR się wyrobi a zawsze można go trochę podgonić Ale to już w asemblerze, nie w środowisku Arduino.
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 .
Coś mi w tym teście nie pasuje. Kilka układów z tym samym rdzeniem, a takie rozbieżności? O ile czasy żonglowania pinem można jakoś łatwo wytłumaczyć to czasy obliczania filtru już są dziwne. Nie wnikałem dlaczego, ale z chęcią dowiem się w czym problem. ATMEL SAM D103 cykle27 cykli FREESCALE KE043 cykle28 cykli FREESCALE KL034 cykle29 cykli NXP LPC8114...
cykle ładowania cykle prania cykle zapisu
renault schemat radio czasowy astabilny regulator chińczyk
bateria parkside styki bateria macallister
Kodowanie wyświetlacza nawigacji w samochodzie: czy jest konieczne? Kodowanie wyświetlacza nawigacji w Citroën C4 Picasso Diagboxem