Spójrz na swój kod rozbity na poszczególne kroki. Jeśli w programie występują powtarzające się fragmenty - należy użyć pętli. Na początek zrób rysowanie pojedynczej linii w pętli, np: 1. Załaduj do rejestru bajt jako wzorzec 1 linii figury z wyrównaniem do lewej, np 00110000B 2. Pętla 6 kroków - przesuń rejestr z bajtem wzorca o 1 bit w lewo z przeniesieniem...
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...
To jest prosta pętla wykonuje się tyle razy jaki długi jest rejestr żeby ją przedłużyć można zrobić na dwa sposoby dobudować jeszcze jedną pętlę ,która wykona obecną n razy lub rozszerzyć rejestr do długości 3 bajtów wykonując to samo odejmowanie przeniesienia na tym najwyższym i będzie to samo . Dla bezpieczeństwa między sbi portx i cbi portx warto...
Tak jestem poczatkujacym programista i prosil bym o podpowiedz badz przyklad w jaki sposb mam to zaprogramowac
Dopisanie pętli nadrzędnej musi poskutkować. Oczywiście jej licznik musi być niezależny od liczników pętli zagnieżdżonych. Jest kilka możliwych rozwiązań, a najprostszym chyba będzie użycie stosu, czyli: .startup mov cx, 10 petla_glowna: push cx ... pop cx loop petla_glowna .exit
Pętla w BASIC'u przepisywała dane z linii DATA a potem następował skok do początku programu napisanego w asemblerze. BASIC na początek jest dobry tylko ale tylko asembler pozwala wydobyć całą moc z Commodore :)
Sprawdź jeszcze sprzęt (najlepiej przy pomocy lupy). Na tym forum było wiele tego typu dyskusji w związku z dziwnym zachowaniem się uC, a później okazywało się, że nóżka podwinęła się pod uC zamiast wejść w podstawkę. Na to żaden asembler nie pomoże. Piszę w Bascomie dużo większe programy i działają bez problemów.
(at)JarekC To niekoniecznie musi być problemem, bo: - w większości AVR stos ustawiany jest podczas resetu na koniec SRAM, więc nie trzeba go inicjalizować (ale warto sprawdzić, czy w użytym w symulatorze modelu tak jest), - funkcja się wywoła, bo asembler umieści ją począwszy od adresu 0, czyli wektora resetu, - skoro to symulacja i na końcu jest breakpoint...
W wywołaniach masz odwołania do main3 i main4 których nie ma w kodzie. Nie ma gdyż one są prawie identyczne jak te wyżej. Różnica polega na innych zawartościach rejestrów DDRD i PORTD. Napisałem o tym w pierwszym poście: Zamieszczam fragment programu: W całości program składa się z 4 pętli (zamieściłem tylko dwie, żeby zobrazować jak to ma działać)....
kamyczek , Masz rację. Jest to część podprogramu do dekompresji czcionki zakodowanej wcześniej RLE. Po trzecie Twój program działa źle, bo w przypadku zmiennej o wartości 0b10000000 wykona tylko jedną pętlę i wszystkie warunki Flaga_z_0 dla pozostałych bitów zostaną pominięte. Nie prawda , w tym przypadku wykona się zawsze 8 razy dla LSR : LSL również...
Aby wykonywać zagnieżdżone pętle musisz skorzystać ze stosu, czyli z funkcji pop i push , bo pętla korzysta z cx więc każda zmiana tego rejestru wewnątrz pętli może popsuć pętlę. Rozwiązaniem jest wrzucenie cx na stos i użycie jej w drugiej pętli a później odczytanie cx. Przykład taki "mniej więcej", bo już dawno nie pisałem w asemblerze (może nie działać...
Prosty przykład - kompilowana pętla odliczana zmienną integer to na klasycznym procesorze co najmniej kilkanaście rozkazów kodu wewnętrznego, natomiast ta sama pętla na specjalizowanym interpreterze sprzętowym może się zamknąć w 2-3 rozkazach interpretowanych z tą samą prędkością. Prosta pętla iteracyjna na procesorze klasy x86 ma postać rozkazów:...
Witam, mam mały problem z następującym programem. Muszę wyszukać maksymalną wartość w tablicy. Program działa w DOSBox'ie, ale muszę robić coś źle bo nic nie wyświetla (jest jakiś krzak). Jestem totalnym początkującym jeżeli chodzi o asemblera :(. Poniżej zamieszczam napisany kod przeze mnie: dane SEGMENT ;segment danych tekst_1 db ": To jest...
Już rozumiem pomysł skynet_2-a. Przy okazji zwracam honor. Chodzi o to że w pętli byś tylko "odtwarzał" zawartość bufora. Bez żadnego porównywania. A sam bufor aktualizował byś tylko przy okazji konieczności zmiany wypełnienia na którymś kanale PWM. Czyli pętla główna to tylko takie coś: PWM_Loop: LDS XL, {Tab_index_LSB} LDS XH, {Tab_index_MSB}...
Siema Nie będę się rozpisywał jak ostatnio ;p Muszę zrobić swojego CrackMe001 w konsoli za pomocą DevC++. Również gdy wprowadzę "a" alfabet to pętla krzyczy co chwile tym samym tekstem w kółko: "Podaj haslo ktore odblokuje program = " Jednak gdy wprowadzę prawidłowe hasło to nadał pyta się o to / krzyczy up ;p Oto kod: [syntax=cpp]#include <cstdlib>...
Potrezbuje napisać program w asemblerze zapisujacy liczbe trzycyfrowa Mam zapisać liczbe 172 R0 - od 0 do 256 R1 - jednosci 2 R2 - dziesiatki 7 R3 - setki 1 Na tak sformułowane zadanie może być tylko taka odpowiedź :D (przemyśl jeszcze treść tego zadania) START: MOV SP,#6F ; Ustawienie wskaźnika stosu MOV R0,#172 ; załadowanie do R0 liczby do rozpisania...
Procesor będzie się resetował jeśli ustawisz błędną nazwę dla obsługi przerwania lub o niej zapomnisz. Małe wyjaśnienie tylko dodam - to nie będzie reset równy pinowi RESET, czy włączeniu zasilania, watchdog, itp., a jedynie skok do początku programu. Dlatego rejestry zostaną tak ustawione jak były. Warto to prześledzić na prostym programie: [syntax=c]#include...
Nie, ja piszę w asemblerze. Ale kod mogę pokazać, nie ma problemu. Zawsze warto się nauczyć nieco więcej. Asembler bywa przydatny, nawet jak się pisze w innym języku. Wstawiłem komentarze, będzie łatwiej zrozumieć. .INCLUDE "m8def.inc" ;plik nagłówkowy stosowanego procesora .DSEG .ORG 0x0060 ;ustalenie licznika adresu na początku pamięci SRAM...
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...
Witam. Mam mały problem z ustaleniem prędkości przezkakiwania czy też zliczalnia. A mianowicie mam 2 wyświetlacze 7 seg ( w zasadzie to 8 ale ja kropki nie wykorzystuję) no i programik jest strasznie prosty. Dopiero wchodzę w programowanie. Program jest oparty na książce p. P.Borkowskiego który raczej na tym forum też jest ;] [syntax=asm];;; l8 ;;;...
(at) JacekCz Jak tak się mądrzysz i peszysz to wstaw lepszą wersję CPP i Assembler ;] Ja się nie peszę (bo tak słowa użyłeś). Kryształowa kula i Pierwotny Pytający milczy, jaki assembler jest oczekiwany w szkole Pytającego. Cros kompilacja z C/CPP -> ASM jest totalnie bez sensu ze wszystkich względów (dydaktycznych, technicznych itd). Ostatni prawdziwy...
Witam . Na początek usprawiedliwie się tym że jest to mój pierwszy mikrokontroler . Problem dotyczy mikrokontrolera AT90S1200-12PI. W sieci znalazłem przykładowy programik dla BASCOMA AVR, był to program który umożliwiał załączanie i wyłączanie diody LED dwoma mikrostyczkami. Zasada działania tego programu była opisana na podstawie ukladu at90s2313...
Nie jestem pewien, ale przy -5V nie zobaczysz chyba tego co trzeba (może się mylę). O ile dobrze pamiętam, to ja wykorzystałem ujemne napięcie -12V z zasilacza ATX. Regulację napięcia zrobiłem poprzez dzielnik napięcia wykonany z potencjometra. Programujesz w języku Bascom. Tak naprawdę nie wiem na jakie instrukcje maszynowe są tłumaczone instrukcje...
Panowie mam pytanie co robię nie tak że mi nie obsługuje klawiszy. przyciski mam dołaczone do PA0...PA4. Do PA5 i PA6 mam dołączone przekaźniki (wyraźnie słychać czy się przełaczają), zamiast sterowania przekaźnikiem dawałem komendę zerowania LCD i nic. Tak jakby się gdzieś zawiesił albo coś. Wiem że całe życie się człowiek uczy i pewnie jest tu jakiś...
Witam. Potrzebuję program napisany w asemblerze na dsm51. Program ma działać w ten sposób, że dioda ma mrugnąć 3 razy następnie, na wyświetlaczu LCD przez 3 sekundy ma być napis STRAŻ i po tym wszystkim buzer ma 3 razy zapiszczeć w odstępach sekundowych. Na końcu trzeba to zapętlić, żeby działało w nieskończoność. Z góry dziękuje za każdą odpowiedź.
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,...
Nie zawsze ilość przekłada się na jakość. A może chodziło o to: IF(SDA==0); vs IF(!SDA); generują inny kod mimo iż działanie jest to samo. Zresztą nie ma chyba co się oszukiwać, nawet proste konstrukcje z pętlami będą na PICu inaczej wyglądać niż na AVR czy 51, jeszcze inaczej na ARMie czy motoroli. To co w jednym mikrokontrolerze jest 1 instrukcją...
Pętla nieskończona w asemblerze SJMP $ Pętla nieskończona w C while(1); A w ogóle to może weź ten procesor na jakiś Rollercoster i zrób razem z nim pętle :-)
W asemblerze używanie etykiet jest nieuniknione, jak sobie wyobrażasz np. pętle albo skoki warunkowe (odpowiednik if w C)
Kto ci powiedzial ze w asemblerze opoznienia są w pętlach? U mnie akurat wszsytko jest zrobione na bazie przerwan tak zeby program głowny nie odczuwal zadnycg opoznienień. Na oscyloskopie? tez mazna ale lepiej to pomierzyc programowo.
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...
Tylko, że porównywanie w procesorach się wykonuje przez odejmowanie (patrz dokładny opis tej instrukcji), a to w przypadku porównywania z zerem jak napisałem nic nie zmieni. Pożyczka, czyli ustawienie przeniesienia C=1 występuje gdy wartość odejmowana będzie większa niż zawartość rejestru. Takie podstawy to kolega powinien znać. A BRLO właśnie sprawdza...
instrukcje petli dla 8086 to np. loop albo dajesz do CX wartosc ile razy chcesz pwotorzyc petle, potem w petli dekrementujesz cx i dajesz skok na poczatek petli, jak CX sie wyzeruje to program idzie dalej btw google nie gryza
Witam! Mniej więcej tak: ORG 0BH LJMP PRZERWANIE_OD_T0 ORG 100H WARUNKI_POCZATKOWE: MOV IE,#82H MOV TCON,#10H MOV TMOD,#01H MOV TH0,#03CH MOV TL0,#0B0H MOV R2,#2 PETLA_GLOWNA: NOP SJMP PETLA_GLOWNA PRZERWANIE_OD_T0: DJNZ R2,EXIT ;----------------------- TU PISZESZ CO MA SIE WYKONYWAC PO 100ms MOV R2,#2 EXIT: MOV TH0,#03CH MOV TL0,#0B0H RETI END Program...
(at)Xamrex - kompilator przetłumaczy ljmp start jako skok pod adres etykiety start (którego jeszcze nie zna). W kolejnej linii ustawi odpowiednio pamięć, następnie od tego miejsca przypisze etykiecie start adres... jak przeleci cały program pierwszy raz to w drugim przejściu uzupełni adresy. Nie ma to związku z aktualnym WYKONYWANIEM kodu na mikrokontrolerze...
Witam Mam napisać w Aseblerze pętle opóźniającą (400us) dla 8051. f(xtal)=12MHz Tt=1us Napisałem coś takiego: ------------------------ START: MOV R0,#100 2takty DEL: NOP 1takt DJNZ R0,DEL 3takty ------------------------ N=2+(1+3)*100=402 Ta pętla opóźnia 400us ??? Jeśli nie to jak to trzeba liczyć?
Tak jak radził asembler - zrób w pętli głównej procedurę przemiatania tak, aby każdy z segmentów przełączał się co sekundę. Wtedy "na oko" stwierdzisz co jest nie tak.
Jak jest dużo flash-a, to można jeszcze przejsć przez tablicę. Jak się ją wyrówna do granicy 256 bajtów, to chyba będzie ciut szybciej, niż ta rozwinięta pętla.
Z opisu funkcji wynika, że pętla używa 8-bitowego licznika. Gdzie w tej funkcji jest odniesienie do licznika.? W tej linii: dec %0 Po prostu jeden z rejestrów jest używany do odliczania opóźnienia i dlatego został "przezwany" licznikiem. Nie ma to nic wspólnego z fizycznymi licznikami/timerami. O wstawkach assemblerowych możesz przeczytać w manualu...
tj pętla w asemblerze nie oddaje znaku.
Generalnie port jest zatrzaskiem więc nie ma sensu się martwić czy dana informacja się zmieni czy nie do czasu kolejnego zapisu do portu :) To daje ci sytuację taką korzystną sytuację że nie musisz się martwić o to co rozbi procek w tym czasie. Pytanie jak bardzo zależy ci na dokładności odmierzenia czasu w przypadku zapalania diody na około 1s lub...
Gdyby się nie dało zrobić takiej pętli w asemblerze, to nie dałoby się jej zrobić w żadnym innym języku. Więc odpowiedź brzmi - tak, da się. Jak? Dodaj kolejne dwa rejestry, czyli ADIW R24,R16 następnie ADC R26,R18, ADC R27, R19, przy czym R16-R19 zawierają 32-bitowy krok. Stosownie należy też zmienić operację porównania. Poza tym użycie BRNE nie jest...
Na stos są odkładane dane tylko podczas wywoływania funkcji lub przy przerwaniach - wiadomo, adres powrotu, odkładanie rejestrów roboczych etc.. w takiej pętli nie ma operacji na stosie (nie powinno być). Jakkolwiek "goto na_zewnatrz" robi z kodu troche spaghetti - skoki goto są bardzo nie czytelne... tutaj lepiej użyć "break;" który kończy wykonywanie...
rejestr indeksowy zwiększasz o 2 w pętli. Do tablicy odwołujesz się poprzez ten rejestr indeksowy. Przenosisz znak do właściwego rejestru i wyświetlasz. Licznik pętli najlepiej ustawić na liczbę wprowadzonych znaków div 2 lub licznik również zwiększać o dodatkowy 1 przy każdym przebiegu pętli.
Ogółem wygląda na to że metoda którą przedstawiłem w pierwszym poście jest najprostsza w zaimplementowaniu gdyż wymaga jednego pinu na jeden sensor (i bez ADC). Obydwie metody które są w linku nie wymagają użycia ADC. Poza tym są proste. Poza tym metoda QTOCH wymaga n+1 portów na n czujników. Na ten przykład implementaja metody QTOUCH w asm z inicjacją...
Procedura obsługi przerwania musi zapamiętać wszystkie rejestry, których używa, a następnie odtworzyć je przed powrotem - to zasada podstawowa. Jeśli całość kodu piszesz w asemblerze, to możesz zostawić parę rejestrów tylko do użytku przerwań, i wtedy nie ma obowiązku ich zapamiętywania w przerwaniach, bo nikt inny ich nie używa. Jeśli "pętla główna"...
Wskaźnik masz na dword, więc zmienna jest 32 bitowa i shr operuje tylko w obrębie tej zmiennej... masz operację przesunięcia z przeniesieniem (nie pamiętam rozkazu), przesuwaj po jednym bicie w pętli i przepisuj przeniesienie.
Dokładnie, program ustawia port B na wyjście i ustawia logiczną jedynkę na wyprowadzeniach 1, 3 i 6. Na zajęciach nigdy nie pisaliśmy żadnej pętli w asemblerze, jedynie pisząc w C potrzebna była pętla. Poza tym można każdy inny program wgrać i to samo się dzieje. Dodam, że program megaload przy próbie zamknięcia zawiesza się i wyskakuje okienko "Wystąpił...
Błądzisz. 0. Dlaczego wybrałeś muzealny mikrokontroler, dla którego informacji trzeba szukać w skanowanych artykułach z gazet wydawanych w latach 80-tych i 90-tych zeszłego wieku? 1. Dlaczego nie chcesz korzystać z timera? To jest najlepszy i najpewniejszy sposób odmierzania czasu. 2. Czy program w którym potrzebujesz opóźnienie 5ms nie robi nic innego...
Zdecydowanie prościej będzie sprawdzać po jednej cyfrze. Najpierw zbierasz wszystkie cyfry z terminala do pamięci. Potem dla każdej cyfry sprawdzasz, czy pętla się skończyła, jeśli tak, skaczesz do "sukces", jeśli nie, bierzesz cyfrę z pamięci, porównujesz z cyfrą z kodu, skaczesz do "nierawidłowy" jeśli różne, kontynuujesz jeśli równe. To w przybliżeniu,...
asembler pętla zamknięta pętla otwarta pętla
rozpuści grzałkę sprzedam technics uszkodzony hotpoint ariston pralko
bateria hilti piekarnik zelmer
Awaria pojazdu w Opel Insignia - co oznacza? De’Longhi Magnifica S – zablokowany pojemnik na wodę, problem z wyjęciem zbiornika