W poprzedniej wypowiedzi dokonałem poprawek w przykładowym kodzie. Tak, to już jest kiedy Elektrodę traktuje się jako przerywnik przy pracy. Kwestią otwartą jest nadal testowanie wybranego bitu, lub bitów. 1. Jak to wykonywać poprawnie testowanie jednego bitu ? Zależy to od danej sytuacji. W trakcie testowania pojedynczego bitu w PINx z pominięciem...
push/pop stosuje się, żeby zachować wartość początkową rejestrów, jeśli w innym miejscu programu są wykorzystywane. ldz - nie ma takiego menmonika w asemblerze AVR. Zapewne to jakieś makro. brcc - wykonuje skok jeśli wskaźnik carry (przeniesienia) jest wyzerowany, co ten wskaźnik oznacza to sobie doszukasz. lpm r16, z - ładuje do rejestru r16 wartość...
16-bitowy assembler jest bardzo ograniczony, nie każdy rejestr może być wskaźnikiem danych. Zmień dx na di/si/bp/sp, albo [syntax=asm]mov di,dx mov bx, [di][/syntax]
a) OK -> SFR dokładniej pod adresem E0H (ACC dla 8051) b) NIE -> stała liczba dziesiętna 121 pod adres 00h (czyli do rejestru R0) c) rozumiem, że są tu dwie instrukcje? Pierwsza ładuje liczbę do rejestru a druga zapisuje pod adres wskazywany przez R0 stałą 121. Czyli 121 zapisane pod adresem RAM 0AH (czyli 10 w systemie dziesiętnym) d) to samo co w...
1. Jak działają rozkazy to chyba rozumiesz, dobrze zmniejszasz literę przez dodanie 32. 2. Zamiast "li $s6, 91" użyłbym "li $t5, 91", albo jakiś inny wolny rejestr $t. 3. Nie wiem czy w ten sposób w jaki próbujesz zrobić zmniejszanie liter będzie działało, ja to zrobiłem inaczej (w "funkcji" porównującej, czyli naszym "searchstr"). Jednak problem na...
Mozesz zuzyc jeden rejestr na przechowywanie 5 zmiennych bitowych. np r25. .DEF rBity=r25 .EQU bBit0=0 .EQU bBit1=1 itd. az do 7 No i teraz robisz sobie tak: sbr rBity,(1<<bBit0) ; ustawia bit 0 cbr rBity,(1<<bBit0) ;zeruje bit 0 sbr rBity,(1<<bBit0)|(1<... ; ustawianie wielu bitow na raz.....
W temacie układu AY3-8912 chciałem jeszcze napisać, że testowałem dwa rozwiązania sterowania rejestrami tego układu. Na pierwszy ogień poszło rozwiązanie opisane w Radioelektroniku nr 9/85. http://obrazki.elektroda.pl/4904875500_1... Ponieważ Cobra1 z poziomu Basic sterowanie portami wejścia wyjścia ma poprzez 1 bajt, opis sterowania...
http://obrazki.elektroda.pl/4029783300_1... Układu SID (6581 stary i 8580 nowy), będącym muzyczną orkiestrą komputera Commodore 64 nie trzeba nikomu przedstawiać – między innymi dzięki jego brzmieniu owa maszyna osiągnęła tak dużą popularność. Warto tylko przypomnieć, że SID ma jedynie trzy kanały, ale umiejętności programistów...
Za pomocą jakich instrukcji w assemblerze mogę zapisywać coś do rejestrów R0-R15 ? Masz na myśli zastąpienie załadowania bezpośrednich wartości np. ldi / cbr / sbr r0, 0xD5 (nie istnieją !) ? Jest tego trochę ;) (na przykładzie r0 , r16 i wartości 0xD5 ): ldi r16, 0xD5 mov r0, r16 ldi r16, 0xD5 push r16 pop r0 Można także zatrudnić w/g własnej pomysłowości...
https://obrazki.elektroda.pl/3029878300_... Witajcie moi drodzy Oto trzecia część mojego praktycznego tutoriala dla ośmiobitowego mikrokontrolera PIC18F2550 od Microchipa i programatora SDCC . W tym temacie najpierw krótko omówię różne konfiguracje oscylatora PIC18F2550 - oscylator wewnętrzny (internal oscillator), zewnętrzny (zegarowy...
Poniżej zamieszczam kod. W tym przypadku przypisałem dla rejestru R0 wartość 5, która wypełnia rejestr po naciśnięciu przycisku C i wartość 10, która zostaje przypisana rejestrowi R1 po naciśnięciu przycisku D. Chciałbym, aby tylko powiedzmy kod CDDC mógł przejść, a po 3 błędnych próbach wywalało, iż kod jest niepoprany lub poprawny. Z góry dziękuję...
witam mam następujący problem umieszczam w programie liczby: MOV43H,#55H MOV44H,4H MOV45H,45H MOV46H,78H MOV47H,11H MOV48H,#201 MOV49H,#148 MOV4AH,#219 MOV4BH,78H MOV4CH,20H MOV4DH,99H MOV4EH,#120 wyswietlam zawartosc komorki 43h: MOVA,43H LCALLWRITE_HEX ustawiam sobie rejestr R4 jako taki wskaźnik i wpisuje do niego wartość 43H; MOVR4,#43H ;R4 będzie...
Między innymi tak
No tak, ale chyba ten timer0 tego trybu nie posiada... Do czego służy rejestr TCNT0??
to czym się różnią eax od ebx??? Kolejnością wykonania z tago co mi wytłumaczyli więc wnioskuje że są dalsze litery alfabetu między e i x ale chyba jestem w błędzie No i są, ale rejestrów jest tylko 4 ;) Do tego EAX od EBX różnią się optymalnością rozkazów, niektóre rozkazy specjalnie traktują niektóre rejestry.
Wszystko pięknie, ładnie, ale żaden z programów nie działa... Program [b]excray[\b]'a, się kompiluje, ale: nie widzę nigdzie wyjścia OCR1A (PB1), na które jest podawany sygnał wyjściowy PWM'a. Na wyjście to podawany jest stan niski (ustawiony bit COM1A1). Dodam tylko, że chodzi o PWM w trybie Phase Correct. W moim programie wszystko jest ok, poza odczytem...
...umie ktos to zrobic ? bede wdzieczny za pomoc ... Ta może bez zbędnych ceregieli "podam na tacy" gotowca , a Ty spróbuj zrozumieć jak toto działa :D .include "8515def.inc" .def zero = r0 .def bcd = r16 .org 0x0000 rjmp start .org INT_VECTORS_SIZE start: ldi bcd,low(RAMEND) ldi r17,high(RAMEND) out SPL,bcd out SPH,r17...
http://rejestr.republika.pl/dokumenty/51... Przeczytaj SEGMENT, BSEG i BIT
Nie wydaje mi się. Wprawdzie minęło ze 30 lat od kiedy ostatnio coś programowałem na 6502, ale o ile skleroza mnie jeszcze nie dopadła :wink: to składnia "<label" oznacza wartość bezpośrednią młodszych bitów wartości etykiety i dodatkowe używanie znaku "#" nie jest potrzebne. Natomiast nie spotkałem się nigdy ze składnią "lsr (at)". Co to za dialekt/system?...
Chodzi o to ze po przyjeciu przerwania nie kasuje automatycznie flagi D wiec zaleca sie w procedurze przerwania ja skasowac Dotyczy to wszystkich flag (poza I). Są takie jakie były w chwili przyjęcia przerwania. I jest kasowane. Warto zaznaczyć, ze w 6502 wejście w przerwanie odkłada na stosom, poza adresem powrotu, także rejestr statusu. Rejestr ten...
Zadeklarowałem trzeci segment : segment data3 use16 z db 'kota' data3_size=$-z kiedy zmienię część kodu mov cx, data2_size mov ax, data2 mov ds, ax mov si, w na mov cx, data2_size mov ax, data2 mov ds, ax mov si, w mov cx, data2_size mov ax, data2 mov ds, ax mov si, w mov cx, data3_size mov ax, data3 mov ds, ax mov si, z To po prostu zamiast "Ala ma"...
Ś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: :) Witam no muszę powiedzieć że troche kolegę poniosło bo niestety intrukcja PUSH i POP pozwala zapisywać do całego obszaru adresowanego w 51 bezpośrednio - czyli 128 bajtów pamięci...
Radykalne czy nie, to fakt. Zestaw instrukcji ARM został stworzony w taki a nie inny sposób po to, aby jak najlepiej były go w stanie wykorzystać kompilatory C. Bardzo duża ortogonalność (porównaj z czymkolwiek innym) pod względem rejestrów (np AVR w którym niektóre instrukcje mogą korzystać tylko z konkretnych rejestrów), adresowania, dodatkowych...
To jest właśnie przesłanie nie bezpośrednio pod adres, tylko pod adres wskazywany przez rejestr (indeksowy SI). Zasadniczo DS jest podstawą, więc nie ma potrzeby podawania go przy adresacji. I nawet nie wiem, czy we wszystkich trybach pracy i na wszystkich procesorach można... A czemu w zadaniu jest napisane o założeniu DS to też nie wiem...
dobra... przyznam sie szczerze :sm7: ... nigdy mnie assembler i dokladne dzialanie procesorow nie bawily... ale z tego co kumam i wyczytalem, to becdzie cos takiego... opcja z walka z lpc2148, ktory posiadam... zapisuje rejestr portu do ktoregos rejestru ogolnego przeznaczenia - to mi zajmuje: 4 takty... nastepnie z tego rejestru zapisuje do pamieci...
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...
Nie moge użyć instrukcji in w przypadku rejestru TWCR , ponieważ on znajduje się w obszarze rejestrow rozszerzonych i tam nie działają instrukcje in , out . The I/O memory space contains 64 addresses which can be accessed directly, or as the Data Space locations following those of the Register file, $20 - $5F. In addition, the ATmega128 has Extended...
Mam do wykonania projekt napisać program który liczy od 0 do 9999 narazie wykonałem liczenie od 0-9 na jednym wyświetlaczu i dalej nie mam pojęcia co zrobić. Ten program nie liczy tylko pokazuje kolejne wartości na wyświetlaczu. Gdyby liczył, to jakiś rejestr czy komórka pamięci zwiększałaby swoją wartość i znalazł by się rozkaz ADD a nie kolejne mov...
---- Building project: zadanie_25.ncp ---- Building file... : C:\Documents and Settings\Piter\Pulpit\u_kontrolery\u_kon... C51ASM: advanced C51 macro assembler Version 1.0 (01 Sept. 2009) Copyright (C) 2009 Atmel Corp. Pass 1 completed with no warnings and no errors Pass 2 completed with no warnings and 2 errors Segment...
W Technicznej faktycznie nie ma ale w http://www.wysylkowo.pl/ to jednak coś znajdziesz. Najlepiej wpisz w google frazę "Arkadiusz Krysiak" i przeleć się po wszystkich znalezionych księgarniach wysyłkowych. Możesz też od zaraz rozpocząć naukę assemblera czytając kurs na stronie http://mikrokontrolery.of.pl/. Są bardzo proste przykłady z komentarzem...
Wydaje mi się, że to jest tak: Poprawcie mnie jeżeli się mylę ale w powyższy sposób można chyba odwołać się do adresu max FFFFh (64kb) , jak zatem czytać tablicę np od 82kb ? Innymi słowy czy można stworzyć wskaźnik składający się z trzech rejestrów ? ? Mikrokontrolery o pamięci powyżej 64kB mają dodatkowy rejestr RAMPZ do wyboru stron pamięci. Instrukcja...
;* ;***************************************... ;*PROCEDURA WYLICZANIA SUMY KONTROLNEJ Z NUMERU SERYJNEGO UKŁADU 1-Wire ;***************************************... ;* ;* ;*******************************OPIS****... ;*Kolejne bajty numeru seryjnego...
Absolutnie nie mam pojęcia co chcesz zrobić. Program który wstawiłeś jest kiepski: 1) Nie baw się w takie skomplikowane ładowanie danych ldi r17, 1<<CS02 out TCCR0, r17 in r16, TIMSK //tryb normalny sbr r16, 1<<TOIE0 out TIMSK, r16 //przerwanie od przepełnienia Tylko zrób to na brutala, bo tutaj niczym to nie grozi: ldi r16, (1<<TOIE0)...
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...
Nie wiem jak działa to w Bascomie. Tak działają rejestry w assemblerze. Staram się nie mieszać, ale wydaje mi się że jak zrozumiesz dokładnie do czego jest który rejestr to łatwiej Ci będzie to rozgryźć. Lepiej wiedzieć co do czego i po co.
A mógłbyś zamieścić, przykładowy kod, bo jestem nowy w assemblerze i za bardzo tego nie czaje. Gotowy kod? Za wiele wymagasz. Jak chcesz pisać w asemblerze, skoro go nie znasz? W sieci jest masa tutoriali i przykładów, które nalezy przerabiać i uczyć się na nich. Poza tym jeśli coś nie chce się zasemblować (nie kompilować, ten termin dotyczy HL) powinieneś...
LJMP START START mov R3, #8 mov R4, #2 mov R5, #4; dotąd jest dobrze mov A, R3 ;add R3 -źle, dodawanie wymaga dwóch operandów add A, R4 ;add R4- jak wyżej add A, R5 ;add R5- jak wyżej mov R7,A ;mov A, R3-nie wiem co miałeś na myśli pisząc ten kawałek kodu(5 lini) ;mov A, R4 ;mov A, R5 ;mov A, R7 ;mov A, P1 mov B,#5 mul A, B mov B,#2 div A,...
Bo, moim zdaniem, powinieneś adresować bufor pośrednio. Np. tworzysz sobie bufor od danego adresu. Adres zapisujesz do R0 i potem adresujesz np. mov A,SBUF mov (at)R0,A inc R0 Wówczas R0 jest Twoim wskaźnikiem do danej komórki bufora. Można zdefiniować jeszcze stałe np. BUFFER_START i BUFFER_END, które będą adresami początkowym i końcowym bufora, co...
zle rozumiesz, bo nie wiedziec czemu czyszcisz PORTB zamiast go ustawic. pomijajac juz fakt, ze nie ma rejestru, ktory zwalby sie PORTB1. 4\/3!!
Tamte akurat miały architekturę von Neumann-a, więc wszystkie adresy były jednego rodzaju. Składnia DANE<<1 (albo chyba DANE*2 też mogło by być) wynika z (nieco) idiotycznej konwencji, że dla przestrzeni kodu asembler numeruje (adresuje) słowa (pamięć FLASH jest 16-bitowa), natomiast przy dostępie przez LPM trzeba zaadresować pojedynczy bajt.
np. 1.) Chce ustawić 5 bit rejestru 0x06000004 na 1 to ten poniższy kod jak przekształcić na assemblera? 0x06000004.4=1; 2.) A jak ustawić np. bity od 2 do 6 na wartość np. 11010? 0x06000004.1-5=11010; bo wiem, że cały rejestr na jakąś wartość to mozna tak ustawić: MOV 0x06000004, #jakas_wartosc 3.) I jeszcze jedno pytanie jak mamy np. wartość rejestru:...
Po ustawieniu portu w rejestrze PORTx musisz odczekać przynajmniej jeden takt zegara przed sprawdzaniem rejestru PINx. Możesz dodać intrukcję assemblera NOP.
PTR to nie jest rzutowanie, jakie występuje w językach wysokiego poziomu, tylko traktowanie. Po prostu jest spod adresu wskazanego zmienną pobierane WORD danych. Jako, że sama zmienna jest tylko typu bajt, to w rzeczywistości zostaną pobrane wartości ze zmiennej Byte1 i Byte2 w kolejności.
W dokumentacji jest lista rozkazów i rejestrów z której można korzystać. Ten dokument raczej cały czas ci będzie potrzebny.
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.
sbi _SFR_IO_ADDR(TIFR), OCF1A Instrukcji sbi nie można używać w odniesieniu do rejestrów o adresie większym niż 32, zamiast tego należałoby w tym przypadku użyć: push r18 ; opcjonalnie ldi r18, (1<<OCF1A) sts _SFR_MEM_ADDR(TIFR), r18 pop r18 ; opcjonalnie Odkładanie na stos nie powinno być konieczne, gdyż rejestr r18 zgodnie...
...Mam pytanie jak przeniesc komende lookup (z bascoma) na assembler? To zależy z ilu elementów maksymalnie może składać się tablica i jaki jest rozmiar jednego elementu. Np. dla tablicy o wielkości max 256 elementów umieszczonej w pamięci programu i rozmiar elementu to 1 bajt: mov a,numer_elementu mov dptr,adres_pierwszego_elementu ; (początek...
Kodu brak i może jakiś konkretny przykład byś podał? Czyli ciąg i wartości rejestrów.
At90S2313 to procesor 8-bitowy wiec wszystkie rejestry (oprócz licznika rozkazów i jeszcze jakiegos ktorego niepamietam) są 8 bitowe, równiez organizacja pamieci danych jest 8-bitowa więc jesli chcesz posługiwac się słowem 16-bitowym to musisz go sobie podzielić na dwie częsci i przechowywać w oddzielnych rejestrach ( lub komorkach pamięci Sram) .
Błąd powstaje gdy iloraz przekroczy dopuszczalną ilość bitów. W dzieleniu N-bitowym, iloraz musi się zmieścić w N-bitach (pamiętając, że dzielimy liczbę 2N-bitową przez N-bitową). Przykładowo dzielenie 16-bitowe (dx:ax) [syntax=asm]mov dx,0xFFFF ; dzielimy 0xFFFFFFFF mov ax,dx mov cx,1 ; przez 1 div cx;First chance exception: Address 0x0040190C Integer...
assembler darmowy assembler assembler przerwa assembler opóźnienie
skrzynka pionu spawarki minimag philips odkurzacz naprawa silnik
bateria macallister wyjscia alarmowe dahua
OpenBK vs Tasmota: Graphical Timer Interface Comparison Roomba nie ładuje się po przerwie w zasilaniu - co robić?