niestety nie udało mi się rozwiązać tego problemu (czyt. sprawdzania 4 bitowego kodu). nigdzie nie umiałem znaleźć choćby powierzchownego wyjaśnienia działania tablic w asemblerze. (jeśli ktoś wie gdzie znajdę takie info - proszę o PW) zauważyłem że sporo osób czytało mój post, więc samolubnie uznając go za ciekawy, napiszę moje, proste rozwiązanie....
Chociaż świat programowania nieodwołalnie zdominowany jest przez języki wyższego poziomu (takie jak C, C++ czy Java), znajomość asemblera jest nadal wysoko ceniona. Użycie języka maszynowego pozwala na pisanie niezwykle wydajnych programów, odwołujących się bezpośrednio do sprzętu, wykorzystujących w 100% możliwości hardware"u. Książka "Asembler dla...
Witam Mam mały problem. Piszę w asemblerze i chciałbym dowiedzieć się jak operować tablicami. Wiem jak je tworzyć, natomiast w jednym programie muszę mieć dostęp do konkretnego elementu tablicy i chciałbym po prostu zaindeksować sobie tą tablicę rejestrem B (na przykład chcę mieć dostęp do elementu czwartego tablicy to do rejestru B wpisuję 4). Moje...
WItam. Mam pytanie, czy tablice w asemblerze na AVR (chodzi konkretnie o procesor ATmega8) tworzy się i obsługuje identycznie jak w wypadku 8051 ? Mógłbym ewentualnie prosić o przykładzik w formie kawałka kodu ? Pozdrawiam i z góry dziękuję.
Witam, Mam pytanie jak w asemblerze avr zadeklarowac w segmencie danych tablice slow, o wielkosci np. 5. Potem w programie chce ja wypelniac danymi, chcialbym wiedziec jak ja zadeklarowac bez inicjalizacji i czy inicjalizacja jest mozliwa?
Witam. Chciałbym prosić o spojrzenie na temat, odczytuję dane z tablicy umieszczonej w pamięci programu i nie działa to poprawnie. Procek AVR, ATtiny, piszę w ASM w AVR Studio. Zadeklarowałem tablicę: .CSEG Moja_tabliczka: .db tutaj mam ok. 20 wartości (war1, war2,...,0) Deklaruję według dokumentacji do AVR, czyli: ldi ZH,high(tablica) ldi ZL,low(tablica)...
Witaj, może inta jest wskaźnikiem na początek tablicy? Pozdrawiam!
Witam. Zacznę może od moich plików. Oprócz nich w skład projektu wchodzi także plik tablice.h, ale myślę, że można go sobie podarować tutaj. Co chciałem uzyskać? Chciałem napisać treść funkcji fMnozenie w asemblerze, umieszczonej w osobnym pliku (to że ona wygląda jak wygląda to na razie nie ma znaczenia - zajmę się tym poźniej). Wiem, że można to zrobić...
Witam wszystkich. Mam problem i to poważny. Potrzebuję kogoś, kto zna się na pisaniu programów w asemblerze. Niżej podaję treści takiego zadania: 1. Napisz program, który oczyszcza ekran, umieszcza wskaźnik w wybranym miejscu, prosi użytkownika o podanie dwóch wartości, dodaje je i wyświetla sumę. Użyj procedur Clrscr,Gotoxy,Writestring,Readint i Writeint...
Nie mogę oczywiście napisać za Kolegę ale może coś podpowiem. Klawisz "enter" jest zdefiniowany w tablicy KEY_COD: w ostatniej pozycji "DB 0AEH ;Enter". Najprostszą metodą będzie utworzenie drugiej tablicy TEXT z odwrotnym zapisem i przesłanie jej do LCD. Na razie program działa w pętli i cały czas wysyła dane do LCD (o ile się nie mylę), co wcale nie...
Na poczatku kazdego programu umieszcza sie tzw Tablice wektorow przerwan. Procesor ma zaszyte na stale pod jaki adres ma skoczyc gdy otrzyma przerwanie. Gdy otrzyma takowe skacze w odpowiednie miejsce tablicy. Po drodze na stosie zachowuje aktualny adres licznika programu zeby wiedzial w ktore miejsce ma wrocic po wykonaniu instrukcji reti informujacej...
Wyglada na to ze nie da sie tego w VB zrobic inline jak np w C ale tu jest link do obejscia tego problemu. ogolnie polega to na skompilowaniu procedury w ASM, wladowaniu kodu binarnego do tablicy w VB i podaniu adresu tej tablicy jako parametru procedury API CallWindowProc (czy jakosc tak)
witam. otoz mam taki problem. zmagam sie z takim programem: mnozenie 2 liczb binarnych 16-bitowych (bez uzycia MUL i IMUL).po wykonaniu program ma wypisac na ekranie wynik w postaci dziesietnej. musze wykorzystac rejestry 32 bitowe i tablice. oto kod ktory juz mam ale stanalem w martwym punkcie: dane SEGMENT napis db 'Prosze podac liczbe 1 i nacisnac...
Tablica owszem, tylko dlaczego zaraz 160 elementów :?: Proponuję 16 elementów i kod w "międzynarodowym" języku, bo PIC-usiowego asemblera nie znam :| unsigned char tablica[]={0xff,0,1,0xff,2,... //... keycode=( ((tablica[wynik>>4]... | tablica[wynik&0x0f]...
Cześć. Mam program i nie mogę zrozumieć dlaczego skacze mi do: 291: return pgm_read_byte(&(local_lcdspec (at)00000165: lcd_PrepareSpec 309: memset(lcd_spec, 0xff, sizeof(lcd_spec)); +00000165: ED81 LDI R24,0xD1 Load immediate +00000166: E091 LDI R25,0x01 Load immediate +00000167: EF6F SER R22 Set Register +00000168:...
Jest pamięć RAM podłączona do 8051, program jest wykonywany w tej właśnie pamięci. Istotne jest określenie miejsca umieszczenia tablicy z wartościami, ale mam jeden problem. Położenie jest o tyle ważne, że korzysta z niego wstawka asemblerowska. unsigned char xdata T[3] _at_ 0x7000; Określa, że tablica T ma zajmować bajty poczynając od 0x7000....
Witam, Mam taki problem, mam za zadanie stworzyc stoper w asemblerze, na mikrokontrolerze opartym o 51-ke. Moj głowny problem to stworzenie miedzyczasu w tym programie, niestety nie jestem zbyt biegly w tym jezyku więc prosilbym o pomoc. Dodam jeszcze że stoper ma byc wyswietlany na wyświetlaczu 7 segmentowym, wbudowanym w zestaw na jakim pracujemy....
Może skorzystaj z rozwinięcia logarytmu w szereg potęgowy? Np. jeśli 0<x<=2 to ln x = suma(od 0 do niesk) z (-1)^(n+1) ((x-1)^n)/n Oczywiście nie liczysz do nieskończoności tylko np. 5 pierwszych składników sumy... wtedy przy sprytnym podejściu będzie działać dość szybko, wystarczy mnożenie i dodawanie ;-) Dla wszystkich x>0 trochę gorzej......
... ; tu kod zatrzymujący licznik mov DPTR,#TABLICA ; iicjujemy wskażnik do tablicy mov A,#0 ;A ma teraz wartosc zero movc A,(at)A+DPTR ; pobieramy starszy bajt, teraz jest w A mov B,A ; zachowujemy go, np. w rejestrze B inc DPTR ; przesuwamy wskażnik do tablicy na nastepny bajt mov A,#0 ; tu trzeba wyzerować A movc A,(at)A+DPTR ; pobieramy nastepny...
Nie wiem jak to wykorzystać na PB4-6 otrzymuje PWM o f ok. 300kHz przy czym nie jest to na prawidłowy przebieg. Przykład ze strony, do której łącze podałem, dotyczy generowania analogowego przebiegu sinusoidalnego za pomocą drabinki R-2R. Ty generujesz przebieg za pomocą PWM, więc musisz odpowiednio kod zmodyfikować, czyli nie wyprowadzać próbek na...
Witam Mój problem polega na tym ,że muszę połączyć dwa programy w języku ASEMBLER. Niestety z programowania jestem słaby, a z języka niskiego poziomu to już w ogóle jest masakra. Ogólnie mam za zadanie zrobić mały projekt, który polega na tym ,że trzeba zaprogramować układ ADuC842 tak ,aby wyświetlił on na wyświetlaczu wpisany tekst z klawiatury (podłączonej...
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...
Mam pytanko czy da sie zapisać tablice znaków w pamięci EEPROM (pisząc w C - AVR Studio 4.12) podobnie jak to sie robi w asemblerze poprzez umieszczenie jej w odpowiednim miejscu programu. Czy pisząc w C musze wykorzystywać funkcje z biblioteki <eeprom.h> i zapisywać tą pamięc znak po znaku. Czy da się zrobić takie małe obejście (będzie to działac?)...
Chciałem to zrobić, aby lepiej rozumieć asemblera. A jak się ma asembler do bramek i tablic Karnaugha? Czy chcesz zbudować własny procesor, czy zrozumieć asembler istniejącego procesora. Same operacje w asemblerze nie wymagają znajomości rozbudowanych układów logicznych na poziomie bramek. Wystarczą operacje logiczne i arytmetyczne na liczbach zapisanych...
Zapomniałem dodać, że piszę w asemblerze.
JA cały czas pozostaję w kontekście przeprowadzenia realnych testów wydajnościowych, jeśli na tym bardzo autorowi zależy i zwracam uwagę, że może to być kompletnie nieopłacalne. Nie stwierdziłem, że alokacja pamięci w ten czy inny sposób jest szybsza lub mniej, natomiast generalnie często (acz nie zawsze) im wyższy stopień abstrakcji tym wolniej. Niemniej...
Witam Serdecznie. Podczas moich walk z prockami napotkałem taki problem.Przetwornik ADC który mierzy napięcie "oddaje" wynik pomiaru w postaci 8 bitów.Wynik ten umieszczony w Akumulatorze jest adresem dla danej (umieszczonej w tablicy znaków)która ma zostać wyświetlona na LCD.Wszystko działa pięknie ale dla wartości z przedziału 0-255, a ja potrzebuję...
Witam. To zależy , czy chcesz podłączyć wyświetlacz bezpośrednio do uC, czy przez dekoder BCD na kod 7 segmentowy. Prostsze wydaje się to drugie rozwiązanie. Odpada ci wtedy tworzenie tablicy konwersji i oszczędność w pinach portu. To tyle teoria. W praktyce podłaczasz wejścia układu 7447 do portu np P1 uC jeden układ do pinów 0-3 drugi do 4-7 portu...
Mam jeszcze jedno pytanie, potrzebuje wstawic tablice w asm TAB: DW10000 DW1000 DW100 DW10 DW1 I dostaje tylko " Error 106 : Unknown assembler command [DW 10000] Jesli jest to tablica DB to Ok, a DW nie :? ehh....
W programie głównym jest zapisywana wartość do DPTR określająca adres początku tablicy np: movc DPTR,#text1. Nastepnie program skacze do procedury odczytu tej tablicy i wszystko jest w porządku tzn. odczytuje kolejne znaki (do zwiększania adresu służy właśnie R1 'mov A,R1' i potem movc A,(at)A+DPTR). Procedura odczytuje znaki i zapisuje je kolejno w...
Witam. Napisałem sortowanie bąbelkowe pod Asemblera, lecz coś w ogóle nie sortuje mógłby ktoś z Was spojrzeć na Niego. Oto jego kod. Tablica - to moja tablica elementów do sortowania n - ilość elementów asm { //------------ edi=i, esi=j // i=0; mov edi, 0h pierwsza: //j=i; mov esi, edi; druga: //if(tablica A to jego wygląd w C++ (przerobiony aby było...
Piszę algorytm szybkiego sortowania w asemblerze a dokładniej jest to dll w asmie w projekcie z pisanym w c++ i mam pewnien problem - algortym źle sortuje dane. Oto mój algorytm w asmie: QuickSort PROC tablica:dword, ilosc:sdword start: push EAX push EBX push ECX push EDX push ESI push EDI push EBP push ESP mov EAX, 0 push EAX; lewy na stos...
Nie mysl Chcesz zarżnąć biednego AVRka :) Nie myślę już na poziomie AVRów ;) W ARMie to jest jedna instrukcja asemblerowa
Witam. Już pisałem na tym forum w tej sprawie i program z Waszą pomocą udało się zrobić teraz rozumiem jak on działa ale mam inny problem. W programie deklaruje poza asemblerem 4 zmienne które potem używam, lecz ich nie powinno być... Jak można je zmienić. Zmienne: i, j, x, v Zmieniam je następująco (przypisująch ich do rejestrów których w programie...
Eh. To smutne. Myślałem, że w C da się wszystko :). Moim zadaniem jest napisać program do transpozycji macierzy z wstawką asemblerowską. Chciałem zrobić dynamicznie stworzoną tablice (malloc) po podaniu wymiarów macierzy. Następnie napisać funkcję drukującą macierz (działającą na trzech argumentach - wskaźnik do tablicy, x i y). Teraz widzę jednak,...
Mam delikatny problem z tym programikiem. Służy on do sterowania silnikiem krokowym. W zależności od wartości R4 resetowany jest odpowiedni pin procka. Jeśli ten program użyje razem z obsługą UARTa (przerwania) to mi wszystko skacze w maliny. Wiem że program jest zły, ale nie wiem gdzie. Jako tako steruje silnikiem, ale też zgłasza „lewe”...
możesz skopiować używając w pętli wskaźników: unsigned char tab_mala[100]; unsigned char tab_duza[700]; unsigned char *tab_duzap; unsigned char *tab_malap; unsigned int i; BajtStartowy=0; tab_malap = tab_mala; tab_duzap = &tab_duza[BajtStartowy]; for (i=0;i<100;i++) { *tab_malap++ = *tab_duzap++; } Ale...
no to tak, w bascomie jedno polecenie I2csend trwa 3139 cykli ! ;O. czyli widze, ze uklad sterownika bedzie trzeba budowac jeszcze raz ;/. Dr.Vee jak mozesz to przybliz mi temat zwiazany z tymi rejestrami szeregowymi jak wyglądałoby wtedy zapalanie na nich kolumn. Istnieje jeszcze mozliwosc wstawiania kodu ASEMBLERA do programu BASCOMA, moze wtedy by...
Może zróbmy coś takiego. Poniżej zamieszczam program, który w nieskończonej pętli wysyła znaki na terminal. To jest narazie wszystko co udało mi się napisać z pomocą książek. Na samej górze tego programu zadeklarowałem tablicę, w której będę chciał przechować te 6 trzycyfrowych liczb. Czy pomółbyś mi rozbudować ten program w oparciu o Twój pomysł? $NOBUILTIN...
Mam do napisania program w asemblerze mikrokontrolera 8051 na średnią arytmetyczna. Asemblera nie znam dobrze i tak po omacku posługuję się nim. Dlatego mam pytanie co w tym programie jest źle. PROG SEGMENTCODE CONST SEGMENTCODE CSEG AT 0 JMPstart RSEG PROG start: MOV R1,4 ;ilosc elementow w tablicy MOV R2,0 ;obecna wartosc sumy MOV B,R1 MOV A,R1...
Mam do zrobienia program, który będzie zliczać czas trwania programu. Zmienna sekund ma być prezentowana w postaci binarnej za pomocą diod świecących podłączonych do portu P2. Mam użyć systemu przerwań i odpowiedni licznik-timer w wybranym trybie wiedząc, że mikrokontroler jest taktowany zegarem 11.0592MHz, a zatem jeden cykl maszynowy trwa około 1,08507...
Przykład jak to sobie w prosty sposób sprawdzić korzystając z pliku *.lss mamy taki kod z funkcją inline: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> inline void fun(uint8_t a) { PORTA = a++; PORTB = a; } int main(void) { uint8_t z = 8; sei(); fun(z); cli(); while(1); }[/syntax] optymalizacja - pierwszy poziom -O1 i w takiej...
Witam! Od kilku dni uczę się asemblera. Chciałem napisać bibliotekę DLL w asemblerze, która zamienia małe literki na duże, w podanym w argumencie łańcuchu(w ramach nauki). Funkcja biblioteczna otrzymuje w argumencie wskaźnik na łańcuch(char *). Odczyt poszczególnych znaków działa, problem występuje natomiast w momencie gdy chcę coś zapisać pod adresem...
Jak kiedyś zlitowałem się nad SAB600 i postanowiłem go zastąpić czymś bardziej orginalnym to powstał taki twór. Twór o tyle ciekawy, że w asemblerze ale pod Bascomowym interfejsem. Program oprócz generowania dźwięków robi jeszcze parę innych rzeczy, ale chyba tyle to już się można zorientować w kodzie. [syntax=basic4gl] '***********************Tiny13_Gong1...
Pewnie. A później amatorzy programowania dzięki takiemu podejściu zapisują proste zmienne jako float albo nie wiedzą jaka jest różnica dla działania programu pomiędzy dzieleniem przez 8 a dzieleniem przez 9. Wiedza o asemblerze jeszcze nikomu nie zaszkodziła czego nie można powiedzieć o niewiedzy. Odpowiedziałbym jednak cytatem, że "premature optimization...
Witam, posiadam kod który po wgraniu do 8051 wyświetla na wyświetlaczu 7 segmentowym czas. Czas zaczyna zliczać od 00:00 ale min i sekundy. Jest możliwość by wyświetlał godz i min? Dopiero zaczynam z assemblerem i mam mały problem zrozumieć kod który znalazłem w sieci. Mógłby ktoś opisać co oznaczają: SWAP ANL [syntax=x86asm] $INCLUDE (REG52.INC) ORG...
Witam. Mam problem z ładowaniem danych z pamięci programu w AT90S2313. Procedurka wygląda następująco: ldi r30,0........................ładuj zero do ZL ldi r31,0........................ładuj zero do ZH ldi r30,(tablica*2)..........łaładuj do ZL adres tablicy ...................................z równoczesną rotacją bitów w lewo ...................................(wyma...
Witam, Nie bardzo wiem, czego tu można nie rozumieć - masz po 8 bitów na kolumnę = 1 bajt. Z całego napisu do wyświetlania generujesz N bajtów (w najprostszym przypadku 1 znak = 5 bajtów, bo znak = 5x8 bitów) i zapisujesz do tablicy. W trybie statycznym po prostu wyświetlasz pierwsze 50 bajtów z tablicy multipleksując kolumny. W trybie dynamicznym (scrolling)...
Do moderatora: Link do dodawania obrazkow nie dziala. Gdyby hotlink nie dzialal: [url=]Link Mam 3 labela w sumie: numer, tresc, punktacja. Problem jest taki, ze w "tresci programu" napisy na guzikach sa zdefiniowane jako czarne a wyswietlaja sie jako zolte, czy mozna cos z tym zrobic? Update: [code] Public Class Form1 'Deklaracje Dim nr_pytania As Integer...
Szkoda że bycie programistą sprowadza się do znajomości strzępków wiedzy z określonej puli zagadnień. Ciekawe czy to również odnosi się do ludzi religijnie programujących tylko w jednym języku? wiki to nie Koran drogi kolego fundamentalisto. W chrześcjaństwie tak nazywano scholastyków - nie uznających niczego poza tym co powiedziane i napisane i tylko...
po pierwsze są 2 atmelowskie assemblery, na '51 i AVR. Chciałem się dowiedzieć w jaki sposób piszecie programy w asemblerze udostępnionym przez firmę atmel. Jak go uruchomić, jak zapisać program i inne rzeczy. ja pisze w Avr Studio 4. w jaki sposób?w kolejności w kodzie: skoki do przerwań, procedury obsługi przerwań, właściwy kod, dodatkowe procedury(w...
ad.1 dyrektywa dla kompilatora avr-as-gcc, że następne linie dotyczą pamięci programu. ad.2 Cyfry po komentarzach to jest ilość cykli procesora, przypadających na wykonanie danego rozkazu. lpm - load program memory - za pomocą rejestru Z (ZL-r30:ZH-r31), służącego do adresowania, pobierana jest wartość z pamięci programu do rejestru r0 , w tym przypadku...
To się chyba nazywa rozwinięcie Newtona, czy też rozwinięcie w wielomian Newtona - nie pamiętam dokładnie, poszukaj w tablicach matematycznych, czy też na goglach. W każdym razie zapewnia to obliczenie pierwiastka przy pomocy mnożenia i sumowania, a to w asemblerze zrobisz bez problemu. Przydatne linki:
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...
kod: $MOD51 ;istotne dla kompilatora asm51 (at)(at)(at)(at)(at) ; jesli p3.4 w stanie L to wejscie -- Dodano po 7 Witam !!! Układ ma mierzyć czas wysterowania tranzystora t1= P3.4 wynik pomiaru do komórki sek , zamiana bin na dec każda cyfra do swojej komórki i na 4543 i na wyświelacz stan niski na porcie p1.0;p1.1;p1.2 jest stanem atywnym dla poszczególnych...
Witam, chcę za pomocą at90s2313 w celach edukacyjnych zaprojektować prosty liczniki. To znaczy klikam jeden przycisk to na wyświetlaczu 7-segmentowym wyświetla się cyfra o 1 większa od poprzedniej. Wczoraj trochę próbowałem zrobić taki licznik, ale jest pewien problem. Chodzi o to, że jak wciśnie się przycisk i go się trzyma to pętla dodaj cały czas...
Na pewno na pierwszym miejscu jest zestaw instrukcji. Na przykład możliwość łatwego adresowania tablic obiektów o rozmiarze większym niż 1 bajt powiedzmy w ARM, czy w MC68020 i wyższych, lub na przykład wykonywanie operacji na 16 i więcej bitach za pomocą instrukcji operujących na danych ośmiobitowych (dodawanie, odejmowanie, porównanie itd. z propagacją...
Pamięć jest zorganizowana w komórki 16-bitowe, objawia się to np tym że wskaźnik programu wskazuje na słowo (2 bajty) a nie na bajt. Wszystkie instrukcje muszą być więc wyrównane do granicy dwóch bajtów. Jakkolwiek z poziomu samego programu pamięć flash jest zorganizowana bajtami, więc spokojnie można w niej umieszczać tablice bajtów bez utraty pamięci....
W sumie to biblioteki można dołączyć na końcu lub umieścić za tablicą "przerwań": CSEG ;segment kodu ORG0 JMPINIT $INCLUDE(procedura.ASM) INIT: ;tu jest główna pętla programu SJMP $ $INCLUDE(procedura2.ASM) Używam prostego, "jednoprzebiegowego" asemblera z funkcją optymalizacji kodu i zawsze to działa. A i zawsze umieszczam wszystkie...
Próbuję przepisać program który kiedyś napisałem w asemblerze na C. Program to prosty woltomierz - pomiar przez przetwornik a/c, następnie porównanie zmierzonego napięcia z pierwszą tablicą 16 bitową w której są umieszczone przedziały napięć a następnie odczytanie z drugiej liczby kroków odpowiadającej pomiarowi, która ma być wysłana do funkcji sterującej...
Czy moglby ktos zweryfikowac poprawnosc ponizszego kodu/poprawic go lub nakierowac mnie na rozwiazanie? Poniższy kod przedstawia probe zaimplementowania algorytmu sortowania przez WYBIERANIE. Niby znajduje najmniejsza wartosc w tablicy, zamienia w wpisuje na poczatek ale problem pojawia sie przy zapisywaniu na kolejnych indeksach tablicy po wybraniu...
Witam wszystkich potrzebuje pomocy mam do napisania program który liczy iloczyn liczb BCD. Napisałem program w którym mnożna jest obojętnej długości natomiast mnożnik na razie jest z jednej liczby niestety ten program mi nie chce poprawnie działać.Bardzo prosił bym o pomoc poniżej wklejam mój kod. #include<iostream> using namespace std; void iloczyn(char...
Kilka błędów: - nie możesz zakładać, że zmienne znajdują się pod stałymi adresami w pamięci, to się będzie zmieniać pomiędzy kompilacjami, w związku z tym istnieje konieczność użycia symboli - register to tylko sugestia dla kompilatora i tych rejestrów wcale nie musi rezerwować. Ale jest też poważniejszy błąd - rejestry te są wykorzystywane przez AVR-libc...
Witam, mam pytanko. Napisałem program który po wciśnięciu przycisku wyświetla na wyświetlaczu liczby kolejno od 0 do F. Jest to wywoływane przyciskiem na porcie p1.5 teraz druga sprawa. Chciałbym by przyciskiem p1.4 móc obniżać wartość liczby, przypuśćmy gdy będzie 7, a wcisne p1.4 pojawi mi się 6. Jakim sposobem to zrobić? Oto program: [syntax=asm];...
Tak. Na początek wyrzucić RET po RJMP Piksel_rowna_sie_jeden. A następnie, analizując ten zestaw instrukcji napisać równoważny kod: [syntax=armasm]Piksel_rowna_sie_zero: RET [/syntax] Skoro kasujesz R16 instrukcją CLR R16, to po co ładujesz tam literał przez LDI R16,0? Bez sensu. Skoro w R16 jest zero, które wymusiłeś, to po co sprawdzać warunek czy...
program ten służy do sterowania sterownikiem matrycy diod LED. matryca jest 16 diodowa. wyjścia ze sterowników sterowane są PWMem a ich wartość ustalana jest przez wartość która wprowadzę w 192 bitowym rejestrze czyli za jedno wyjście odpowiada 12 bitowe słowo. W tej chwili mam stworzoną tablicę z 24-oma 8 bitowymi słowami. Żeby ustawić wartość PWM...
tablica danych w ROM ma sens wtedy gdy mozna pobierać z niej dane jakoś ją indeksując. Aby cokolwiek pobrac z ROM trzeba go jakoś zaadresować. We wszystkich PIC-ach adresować ROM można przez ProgramCounter, oraz w części PIC-ów istnieją dedykowane rejestry pozwalające zaadresować ROM i odczytac zawartość tak zadresowanej komórki. W tym dugim przypadku...
a może jeszcze inaczej a. plik asemblera budujący tablice wektorów przerwań b. kompilacja z opcją -nostartfiles lub tez zmiana skryptu linkera ??? Rozwiązanie o tyle nieelastyczne, że trzeba będzie ręcznie edytować każdy element tablicy wektorów podczas gdy potrzebuję zmodyfikować jedynie wektor INT0, a w stosunku do pozostałych wektorów chciałbym aby...
Można dynamicznie alokować bez biblioteki. Pisząc o dynamicznym alokowaniu chodziło, bardziej o takie rozwiązanie. W asemblerze łatwo to zrealizować , wystarczy pamiętać o obszarze na tablicę, i pilnować żeby nić nie nadpisać. Stosować zmienne 'koniec tablicy' itp.
Witam. Chciałbym się zapytać, czy utrata obu tablica FAT całkowicie uniemożliwia odzyskanie danych? Z własnej głupoty utraciłem dane z dysku D: (który znajdował się na partycji rozszerzonej). Pisząc program w asemblerze (który miał operować na dyskietce), niechcący przez nieuwagę nadpisałem obie tablice FAT na dysku twardym (zamiast dyskietki). Następnie...
Witam, zrobiłem program, który otwiera monochromatyczną mapę bitową, i zbiera o niej informacje, a następnie zapisuje to wszystko do pliku, razem z tablica wartości 8bitowych, które reprezentują rysunek. program sam otwiera okno painta, aa następnie każe nam narysować w nim coś, i zapisać w tym samym miejscu co program. Ogólnie program powstał do mojego...
oczywiście że by się dało ;-) Nieco inaczej rozwiązać sprawę przesuwania bitowego i wywalić te ify zastępując prostym andowaniem lub nawet nie. Zresztąto zależy na co w tej chwili kompilator to przetłumaczył do asemblera. A jeżeli dobrze zrozumiałem jak to wygląda to jest to spowodowane tym, że zanim włączysz kolejny wiersz wsuwasz już jego dane a wciąż...
Witam! Jak w AVR-GCC zapisać tablice z danymi pod konkretnym adresem w pamięci flash procesora? Będę wymieniał te tablice za pomocą bootloadera w zależności od wersji urządzenia dlatego muszę mieć je zapisane pod odpowiednim adresem. Jest coś takiego jak dyrektywa "ORG" w asemblerze? Pozdrawiam
Nie zrozumiałeś mnie i szkoda że tak radykalnie pochodzisz. Nie chcę przekazywać wskaźników. Nie chcę się nigdzie w programie odwoływać przez wskaźnik. Przyjmijmy, że to w tym wykonaniu niemożliwe i nie wracajmy więcej do tematu, za dużo przeróbek. Jeśli nie wskaźnikami, to jak inaczej zminić adres struktury/tablicy w pamięci? PS: czy przyszedł czas...
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...
Projekt mam napisany w języku "C". W asemblerze mam kilka funkcji, które nie są mojego autorstwa. Funkcje asemblerowe mam zapisane w pliku z rozszerzeniem .s,który jest dołączony do projektu. Tablice w asemblerze STable i SiTable mógłbym skopiować do dowolnego pliku z rozszerzeniem .c i użyć dyrektywy __attribute__((space(prog), address(0x200))) lecz...
Witam. Chcialem zrobic urzadzenie podobne do inteligentnego domu czy alarmu. Wiele wejsc i wyjsc (np. 256). Wszystko pisze w ASM dla PIC16 lub PIC18. Pomijajac kwestie skomplikowania i ogarniecia wzrokiem (czytelnosc) wszystkiego dla asemblera zastanawiam sie jak to robia znawcy ;) Czuje podskornie, ze musi byc jakas wielka tablica, ktora ma zdefiniowane...
Kolego... Jesteś jedwabisty:) piwko dla Ciebie:) Wielkie dzięki i pozdrawiam:) Dodano po 1 Sory kolego ze zawracam...:) ale czy dał byś rade jeszcze mi wytłumaczyć obliczanie crc16 ???:) np: wielomian: 10001000000100001 ($11021) dana $00=crc$0000 dana $01=crc$1021 dana $02=crc$2042 dana $03=crc$3063 i załóżmy że chcę ciąg danych $0103=crc$0352 jak to...
Najwyraźniej skopiowałeś funkcję bez zrozumienia. Twoje "Oblicz_długosc" funkcjonalnie odpowiada strlen() z języka C, czyli liczy długość łańcucha znaków aż do wystąpienia znaku o kodzie równym 0, którym w języku C (i nie tylko) oznacza się koniec łańcucha. W pierwszej tablicy masz napis i asembler sam dodaje znacznik końca o kodzie 0 - dla kompatybilności...
Ja również bardzo dziękuję, szczególnie h-doc. Kompilator to Borland C++ 4.52 (stary jak świat). Program pisany jest pod Win16, nie sprawdzałem go pod Win32, bo są wstawki asemblerowe i kompilator nie chce ich przełożyć na ten system. Cóż, bywa. Nie mam wpływu na tryb pracy procesora, albo prędzej nie wiem, jak to zrobić. Może ktoś mi podpowie? Jeśli...
Masz zadeklarowaną tablice(pole 16-bajtowe) TABLICA EQU 50 ;od adresu w RAM-e = 50 I teraz nie piszesz gdzie sumujesz te osiem srodkowych wartosci ale zakładam że np do akumulatora, więc najprościej jest tak: CLR A ;zeruję bo tam będę sumował ADD A,TABLICA+4 ADD A,TABLICA+5 ADD A,TABLICA+6 ADD A,TABLICA+7 ADD A,TABLICA+8 ADD A,TABLICA+9 ADD A,TABLICA+10...
Polecam stosowaną zazwyczaj przeze mnie metodę tablicową. Tak się składa zazwyczaj, że spośród dwóch zasobów mikrokontrolera - pamięci i czasu, to pamięci masz więcej do dyspozycji. Także proponuję wyznaczyć sobie odpowiedni krok i utworzyć tablicę pierwiastków. Drugą sprawą jest podglądnięcie wyniku pracy kompilatora C. Spróbuj napisać program w C...
Osobiście mogę tylko potwierdzić, że kończąc projekt, najszybciej można się nauczyć nawet asemblera... ;) To co kolega shg napisał nie ma nic współnego ani z asemblerem, ani z C, najwięcej ma cech bascoma, nie rozumiem, dlaczego kolega KJ nie rozumie, tym bardziej, że pełno tu komentarzy mocno objaśniających, wystarczy zamienić " ; " na " ' "... ;)...
Czesc. Mam problem z odwolywaniem sie posrednio do pamieci w uK AVR. Potrzebuje wyslac na LCD ciag znakow. W tym celu chcialem zapisac w pamieci dane, a nastepnie inkrementowac adres i po kolei dane wyciagac i wysylac na LCD. Powiedzmy ze mam taki program: NAPIS: .DB "HELLO" ; zapisanie danych w pamieci LDI XL,NAPIS ; ustawienie wskaznika do pamieci...
Dzięki za pomoc :). Rzeczywiście, po dłuższym przeglądaniu pliku pgmspace.h, kiedy już wiadomo czego szukać, mozna wywnioskować, że tak naprawdę trzeba podać adres obiektu (funkcja przepisuje go później do wskaźnika Z i wykonuje unstrukcję LPM).... ufff, horror :). Przesiadam się z asemblera i pewnie jeszcze nieraz będę miał podobne pytania.
Witam mam taki problem , chce odczytać 100 elementów z tablicy której adres efektywny został zdeklarowany symbolicznie jako TABLICA ( chodzi o asemblera 8086), niestety nie wiem jak sie do tego zabrać, może ktoś mi pomóc? pozdrawiam i dzięki za pomoc
Ale o co konkretnie Ci chodzi ?? Wogole nie wiesz co robia instrukcje czy jak ? Co do programu to jest malo przejrzyscie napisany. Jesli to jest kurs dla poczatkujacych to proponuje poszukac innego. Sam patrzac na to cos z poczatku zglupialem i musialem sie wgapic zeby zrozumiec o co chodzi. Do meritum: Na poczatku sa sa dwie dyrektywy org ktore mowia...
Caladan! Przepraszam, że to tak długo trwało, ale kłopoty z Netem :cry: Procesor na którym mamy to zrobić to 80537. Udało mi sie dostać program który zamienia liczby z kodu Graya na Jonsona (czyli dokładnie odwrotny niż mój) oto on: $MOD51 START: MOV R0,#50H ; adres pierwszej komoki kodu jonsona MOV R1,#1011B ; zamieniana liczba w kodzie greya MOV R2,#0...
Zobacz tablicę prawdy dla układu UCY 7447. To jest właśnie to czego szukasz. Sam program będzie też prosty. Na jej podstawie możesz napisać program.
Jak wyślesz wartość al jako znak też dasz rade odczytać mając tablice kodów ascii, ale najprościej stworzyć napis 'xx',13,10,$ i pod dwa pierwsze znaki wstawić przekodowaną wartość al na liczbe szesnastkową w kodzie ascii.
Wszystkie problemy znikly gdy przesiadlem sie na Raisonance. Keil demo fajnie dziala na asemblera ale hex ktorego generuje nie chce za bardzo wspolpracowac z moim programatorem Progat.
SMD raczej konieczne, są co prawda PICe w dipie ze sprzętowym USB, ale podejrzewam że tylko AVRy interesują. Możesz przyjrzeć się adaptacji softwareowej USB na Atmega8 w wykonaniu Igora Cesko, ale musiałbyś znać przynajmniej asemblera żeby dopisać reszte programu i uważać żeby go nie rozerwać przerwaniami. Teraz nie stosuje się FT232BM, tylko FT232R...
mirekk36 : może sprawdź najpierw co oznacza << w asemblerze. To nie jest żadne przesunięcie o 2 bajty. <<1 oznacza przesunięcie w lewo o jeden bit czyli pomnożenie przez 2. Powinno być <<1.
Regulamin pkt.15 W momencie wystąpienia przerwania AVR skacze do pierwszych komórek pamięci programu, zgodnie z tablicą przerwań, czyli w momencie kiedy wystąpi przerwanie od timera0 skacze do pamięci pod adres 0x0009 i wykonuje znajdujący się tam kod, czyli skok do podprogramu obsługi przerwania "timer0".
Witajcie :) Czy dobrze napisałem program przesuwający bity na porcie P1 co ok 1s ? Taktowanie 6MHz. ; poczatek programu ORG 0000h MOV ACC, #00000001b LJMP START ;tablica wektorow ORG 000Bh ; tu skacze w razie przerwania T0 RETI ;petl glowna START: SETB ET0 ;zalaczenie przerwanie z T0 SETB EA ;zalaczenie przerwan MOV TMOD, #0001b ;T0 jako 16bitowy...
ORG 0000h LJMP START ;tablica wektorow ********* ORG 0003h LJMP przerwanie ;*************************** ORG 0100h ;dorzuć to START: MOV R5, #0 SETB EX0 ;wl. przerwania z wej SETB EA;ogolne wl przerwań SETB IT0 ;opadajace zbocze program1: NOP MOV P2, #00001111b JMP program1 ;************;podprogram przerwania przerwanie: MOV P2, #01010101b...
masz tak: ldi r17, high(51) ldi r16, low (51) out ubrrh, r17 out ubrrl, r16 a dokumentacja mówi tak: • Bit 7 – URSEL: Register Select This bit selects between accessing the UCSRC or the UBRRH Register. It is read as one when reading UCSRC. The URSEL must be one when writing the UCSRC. Więc to twoje zapisywanie do ubrrh...
Po pierwsze jaki kwarc niech bedzie np.12 MHz wtedy masz 1cykl=12 taktow czyli wszytko w ukladzie lazi jakbys wsadzil kwarc 1MHz. Bierzesz licznik np. T0 moze on zliczyc od 0 do 0FFFFH w ktoryms trybie (czyli licznik 16-bitowy). Jak doliczy do 0FFFFH to przy przekreceniu do 0 wygeneruje przerwanie jak je ustawisz i tak se generujesz zadany przebieg....
Hej !! Ja mam podobny problem :/ Robiliśmy na lekcji kilka prostych programów na DSM-51 ale teraz na zaliczenie potrzebował bym coś wiekszego np. kasa fiskalna do autobusu, tablica swietlna obslugujaca mecz koszykówki, jakis stoper.. Dzięki. .
mov dptr,#keyarr do rejestru DPTR (dwa bajty) ładowany jest adres pierwszego bajtu tablicy o nazwie Keyarr movc a,(at)a+dptr do akumulatora ładowana jest wartość spod adresu jaki jest w DPTR+wartość w akumulatorze. Jeśli przed wykonaniem tej instrukcji w akumulatorze bedzie wartośc 4 to po wykonaniu operacji w akumulatorze znajdzie się wartośc 17 (piąty...