Bo jak ma działać? Widać kolega nie do końca rozumie mechanizm przerwań, skoro czeka na przerwanie INT0, a włącza przerwanie przepełnienia Timera0. Adresem przerwania przepełnienia Timera0 jest OVF0addr, a nie INT0addr. Przerwanie od INT0 wyzwalane jest ZEWNĘTRZNIE zboczem lub stanem na fizycznym wejściu INT0 mikrokontrolera, a nie Timerem. Skąd ten...
cjne A,02h,etykieta - co znaczy porównaj i skocz gdy nie są równe. W tym przypadku 02h to R2 w banku 0. Zakładam że wartość z klawiatury jest w A oraz, że jest to wartość 0-9. Jeśli kod klawisza jest inny należy do programu dorzucić tablicę z kodami klawiszy.
Działa ;-) Ustaw Breakpoint na linijce (prawy myszy Toggle Breakpoint) [syntax=avrasm]com LED[/syntax] naciśnij F5 (Run) jak zatrzyma się na Breakpoint wykonaj kod przerwania krokowo F11 naciśnij F5 (Run) jak zatrzyma się na Breakpoint wykonaj kod przerwania krokowo F11 itd. Zamiast 15625 ładuj do OCR1A 15624. Wieczorem wrzucę inny sposób migania tym...
coś w ten deseń? na razie chodzi mi o to że: Licznik działa zgodnie z zegarem. Po przepełnieniu występuje przerwanie, a jego obsługa skacze do timera i uruchamia go na nowo. cały czas nasłuchuje usart i gdy nadejdzie przerwanie, to obsługa wrzuca z tcnt(czyli wartość licznika) do tablicy coś z tego ma sens? .include "m32def.inc" .cseg .org 0 jmp restart;...
Zacznij od przerwania timera.
Jesli rozumiem chodzi o przerwanie INT aktywowane oadajacym zboczem a nie poziomem. W INT0 ustawiasz bit IT0 w rejestrze TCON na 1 jesli ma byc od zbocza a 0 jesli od niskiego poziomu. w INT1 bit IT1
Po długich bojach udało się znaleźć winą były jakieś śmieci w rejestrze UCSR1A które sprawiły że jednocześnie oprócz int0 pd2 pracowała jako xck1 co chyba uniemożliwiało wywoływanie przerwania int0. Pisze bo może się komuś to przyda. Warto też zwrócić uwagę na fusebit M161C przy takich problemach
Witam. Rozwiazanie jest i nazywa sie Assembler.
Witam, mam problem z ustawieniem przerwania od timera0 na atmega8, jestem początkujący jeśli chodzi o assembler... Problem leży w tym że, uP jest taktowany z wewnętrznego zegara 1MHz, i jeśli mam ustawiony prescaler na 8 czyli rejestr TCCR0 na 2 to powinienem otrzymać obsługę przerwania co 8us a na oscyloskopie otrzymałem igiełkę co 2ms;/ nie wiem co...
Nie mam żadnego pomysłu na to aby zmusić kompilator AVR GCC(+AVRstudio) aby procedurę obsługi przerwania całkowicie zrealizować jako procedurę napisaną w assemblerze reszta jest w C... Utwórz sobie plik z rozszerzeniem "S", umieść w nim np. coś takiego i dołącz go do projektu :) #include <avr/io.h> #ifdef __SFR_OFFSET #undef __SFR_OFFSET #endif...
Pytanie moze nie do konca dotyczy tego forum ale wiekszosc programujacych uP w assemblerze ma podstawy assemblera z komputerow PC... mam nadzieje ze zagladaja tu jacys specjalisci z tej dziedziny. Do rzeczy! Pisze TSRa czyli program rezydentny i mam problem z obsloga przerwania int 21h. Chodzi o to, ze moj TSR musi utworzyc plik i zapisywac do niego...
A jakis przerwania powodują?
Chyba nie, taka "uroda" 8255. Można by było wystawiać dane i ręcznie generować sygnał strobe, ale wtedy komunikacja nie działała by już w przerwaniach.
Ja proponuję po prostu pobierać czas bezposrednio z przerwania 21h. Albo użyć timera ;) (LUBIMY '51:D ) Nie pamietam akurat numeru funkcji, ale chwilka kopania w dokumentacji i sie znajdzie. A tak ostatecznie, to mozna uzyc instrukcji pobierania cykli zegara od startu kompa. Trzeba tylko pobrac "próbkę" i później tym mierzyć czas.
<ciach> V-USB wymaga aby przerwania były blokowane nie dłużej niż ~25 cykli. Czyli w tym przypadku występuje problem ze zbyt długim przerwaniem timera w bibliotece "IR". Najprościej byłoby odblokować przerwania w ten sposób: Zbędne wyciąłem, bo logicznie kłóci się z kolegi postem. :)
1. Ogólnie liczysz dobrze, ale procesor nie wyrobi się w 160-ciu cyklach (a dokłądniej mówiąc to liczysz trochę źle bo własnie nie uwzględniasz czasu potrzebnego na obsługę przerwania). Nie uzyskasz czasu 10us, nawet dla kwarca 16MHz. Musiał byś to napisać w assemblerze i użyć dyrektywy Nosave. 2. Nie. Jeżeli coś zadeklarujesz w programie to ta rzecz...
gdyby to było takie proste to nie pisałbym o tym na forum, ja potrzebuję czytać pozycje przy pełnej prędkości i to bezbłędnie bez żadnych przekłamań... Maksymalnie schrzaniłeś hardware, teraz to już Cię nic nie uratuje. Do zliczania trzeba było wykorzystać ten większy Timer, a do wykrywania zmiany kierunku przerwanie. Pięknie by to chodziło a procek...
Kiedy zdarza się przerwanie, bit I w SREG zostaje wyczyszczony, podczas powrotu z przerwania RETI ustawia bit I z powrotem na 1. Zapobiega to kolejnemu wywołaniu tego samego przerwania dopóki jego obsługa nie zostanie zakończona, jak i zagnieżdżonym przerwaniom.
Czy wiesz co to znaczy ORG 2000h ?? Poczytaj w literaturze , a na przyszłość całkowicie pomijaj tą dyrektywę, chyba że będziesz używał przerwań.
A jaki kod błędu zwraca po wykonaniu funkcji 1 przerwania 14h?
mozna po prostu wylaczyc na ta chwile przerwania... 0x41 0x56 0x45!!
Problem jest prozaiczny. Przycisk obsługujesz czy on tego chce czy nie. Polecam rozwiązać obsługę przycisku w przerwaniu wtedy będzie działało.
Po pierwsze jakie czasy chcesz obliczać i jakie przerwania po co ??? To jest bascom nie assembler, deklarujesz na wstępie programu prędkość kwarcu a kompilator troszczy się o resztę tj. dajesz deklarację $regfile = "m8def.dat" $crystal = 12000000 Po drugie, procedura obsługi wyświetlaczy LCD (mowa tu o alfanumerycznych HD44780) jest w BASCOM zaimplementowana...
A powiesz mi coś o przerwaniach? Np czy mogę użyć przerwanie aby zwiększyć rejestr o 1? Jak to zrobić
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 :| Więc jak zrobić aby ten program był w 2 przerwaniach i żeby działał?
To tego są przerwania. Generalnie ja nie lubię odbierania w pollingu.
witam! jak nadpisać konkretny plik np wartościami 0x01?są w assemblerze przerwania (int 13h) które powodują zapis/odczyt z konkretnego sektora pod konkretną głowicą itd (w AL,AH podaje się odpowiednie dane jak np numer sektora itp..),ale jak np. sprawdzić w którym miejscu dysku znajduje się plik np. plikt.txt?w jaki sposób sprawdzić jego długość,zeby...
Z tymi sterownikami nie maiłem do czynienia ale początek opisu wskazuje, że służą do obsługi code page - czyli zestawu znaków (np polskie litery) Co do programowania kontrolera przerwań to znalazłem taki papier: http://sirius.cs.put.poznan.pl/~inf94333... Trzeba pamiętać, że dostęp do rejestrów HW jest przez rozkazy assemblera in/out i nie jest...
Dla przebiegu o okresie 30 ms i współczynniku wypełnienia 20% w trybie przerwania [syntax=assembler] ORG 0 ; wektor zerowania JMP main ; bezwarunkowo skocz poza obszar wektorów przerwań ORG 000BH ; wektor przerwania po przepełnieniu timer0 CALL podpr RETI ; powrót z przerwania ORG 0030H ; początek programu głównego main: CLR P0.7 ; wlaczenie oscyloskopu...
Definiujesz sobie w timerze licznik czasu zwiększany po każdym przerwaniu jeżeli jest ustawiony znacznik MIERZ. Czynności w programie: 1. Zgaś lampkę 2. MIERZ=0 3. CZAS=0 4. Czy start ? 5. Jeżeli nie to idź do punktu 4 6. Odmierz przypadkowy czas od 2 do 6 sekund 7. Zapal lampkę 8. MIERZ=1 9. Czy wciśnięto STOP ? 10. Jeżeli nie to idź do pkt 9 11. MIERZ=0...
Paweł Es. pisze w języku assembler. Jak mogę obsłurzyc przerwanie aby nie dopuścic do migotania wyświetlacza<??>
Zawsze mozna cos takiego napisac, ot, chocby w assemblerze (na przerwaniach)...
Dołączając moduł #include<avr/interrupt.h> możesz stosować deklarację SIGNAL i INTERRUPT. SIGNAL blokuje pozostałe przerwania na czas jego obsługi, a INTERRUPT nie. Osobiście nie stosowałem INTERRUPT, ale sam zastanawiałem się niedawno w jaki sposób będzie interpretowana komenda RETI(assembler) podczas jej wywołania z przerwania uruchomionego...
Dziękuję bardzo :D a czy jest jakiś sposób żeby wymusić dany fragment kodu w danym miejscu pamięci flash?? Pod "czystym" assemblerem wystarczyło ".org" a czy w takim miksie asm+C jest na to jakiś przepis ??
Nie chce cię martwić, ale w bascomie to specjalnie kodu nie zoptymalizujesz. Jeżeli działa to dobrze, a nawet jeżeli byś przyspieszył procek o te pare ns to cie za bardzo nie urządza. W tym przypadku nie problemem nie jest czas wykonywania kodu i nawet po przepisaniu go na assembler czas ten niewiele się zmieni. Chyba że problemem jest to że kod nie...
Czy pod adresem 0x012 ($012) masz wpisany rozkaz skoku do procedury przerwania (np.: jmp TC0OVF)?
Może odpal jakiś Timer żeby generował przerwanie bardzo często. Powiedzmy co 10us. I w przerwaniu sprawdzaj czy pin ma stan 0 czy 1. Jak 1 to inkrementujesz jakaś zmienną. Jak zmieni się na 0 to zwracasz wynik i zerujesz tą zmienną. Oczywiście w tym samym przerwaniu sprawdzaj tak samo drugi pin. Niestety wymaga to kodu obsługi przerwania w assemblerze...
Witam, mam chyba proste pytanko .. jak zrobić coś takiego: Mem Zamykam. - arnoldziq
Jakie Bez tego mechanizmu ciężko ogarnąć takie tematy jak zagnieżdżanie przerwań czy zmiana kontekstu po przerwaniu. Idea jest taka, że w twoim przypadku SysTick musi mieć wysoki priorytet (najwyższy w "systemie", w znaczeniu w RTOSie), tak aby tick był regularny i się nie gubił. Przełączanie kontekstu na najwyższym priorytecie zaś jest średnio zabawne,...
Nie wiem jak to działa gdy kasujesz TI w przerwaniu. To już poziom assemblera czy wcześniej sprawdzasz warunek pętli while(TI==0) {}; czy też w obsłudze przerwania jest kasowana flaga TI. Włącz debugger w keilu ustaw breakpoint w przerwaniu i zobacz jak program działa. Sądze że skasowanie linii "if (TI) { TI=0; }" rozwiąże problem :) Korzystanie z funkcji...
W PONOŻSZYM PROGRAMIE JEST JAKIŚ BŁĄD, JEST PROSTY PROGRAMIK GENERUJĄCY PRZERWANIE OD T0 I ZMIENIAJĄCY CO 0.5s STAN P1.7 CHOĆ PROSTY TO JEDNAK NIE DZIAŁA. KOMPILOWANY JEST POD KOMPILATOREM FORTECH ASSEMBLER RODZINY PROCESORÓW 8051 NA 2051. NA PORT TEN WŁĄCZYŁEM DIODĘ JEDNAK NIC, TO SAMO ZADANIE POD BASSCOM NIE PISANE W ASSEMBLERZE DZIAŁA WIĘC UKŁAD...
U mnie działa bez problemu. Niepotrzebne są 2 linie w obsłudze przerwania: [syntax=asm]CLR P3.0 CLR P3.1 [/syntax] Bo to jest robione zaraz po wejściu do procedury obsługi przerwania.
A może jednak spróbuj assemblera - przerwania są bardzo łatwe w używaniu. A co do sterowania diodami to : Napisz sobie dwie (lub więcej jak potrzebujesz) pętli w których masz zapisane sekwencje sterowania diodą i użyj przerwania timera do sprawdzania stanu na wejściach(przyciskach)- w zależności od tego który przycisk jest wciśnięty skacz do wybranej...
Witam Otóż mam mały problem. Pisze sobie szybkie przerwanie dla timera na Atmega644, to co mi kompilator z C przetłumaczył na assembler wrzuciłem do wstawki assemblerowej a przerwanie zadeklarowałem z argumentem ISR_NAKED, rejestry używane w przerwaniu zarezerwowałem przez: register uint16_t licznik asm("r30"); register uint16_t temp...
Witam siedzę od jakiegoś czasu i nie mogę za chiny uruchomić przerwań. Program piszę w assemblerze. chcę uruchomić przerwanie INT0 i INT1 na porcie E Oczywiście odpowiednie bity kierunkowe tego portu są ustawione na IN (czyli wyzerowane) Chcę wywołać przerwanie INT0 gdy na bicie1 portu E pojawi się zbocze opadające. Podobnie z drugim przerwaniem: Chcę...
To w jaki sposób się "operuje" na przerwaniach, wynika z budowy procesora i do tego są odpowiednie "schematy" graficzne w specyfikacji. Z takiego schematu widać która flaga czym steruje i które flagi jak używać. Do tego producent oferuje do tych modeli "midrange mcu reference guide" gdzie są opisane w bardziej rozległy sposób elementy procesora. Tam...
Witam, Ja mam podobny problem - dwa timery i INT. Chciałbym, żeby przerwanie od jednego timera nie było przerywane aż do momentu jego ukoczenia. Wykombinowałem, żeby podczas wykonywania tego przerwania zablokować pozostałe, a potem odblokować. Nie wiem niestety jak jest tłumaczone "enable interrupts" na assembler - jeżeli to kilka instrukcji, to mogę...
tyle ze uzycie tej flagi (czy jakiegokolwiek innego sposobu) to nie kwestia jezyka C, tylko kazdego jaki istnieje, z assemblerem wlacznie. inna sprawa jest to, ze koniecznosc rownoczesnego wspoldzielenia zmiennych przez przerwanie i funkcje zachodzi raczej nieczesto, a jak juz zajdzie, to i tak mozna jej czesto uniknac na conajmniej kilka sposobow....
Dawid nie wydaje mi się, napisałem kiedyś właśnie prosty zegar gdzie w funkcji przerwania od wewnętrznego licznika wykonuje się minimum 100 cykli + opóźnienie 150ms i nic się złego nie dzieje. Fakt że miejsce w pamięci na wektor przerwania jest niewielkie, ale C to nie assembler i kompilator jakoś to sobie ułoży.
Wystarczy naciskać F8 idąc po swoim kodzie w głównym oknie i patrzeć na wartości rejestrów procesora po prawej. Pokaż co masz bezpośrednio po funkcji 7 przerwania 21h bo to coś dziwnego aż, że wszystkie rejestry są ciągle zerowe.
google "bascom wstawki assembler" np. http://www.elektroda.pl/rtvforum/topic10...
Port szeregowy działa na całkiem innej zasadzie. Podaje się mu liczbe iluś-bitową (to można skonfigurować) a on przekształci ją w ciąg binarny rozpoczynający się bitem startu a zakończony bitem stopu. Układ sterownika zbudowany jest z rejestru przesuwnego do którego wpisuje się wartość do wysłania a w czasie wysyłania kolejne bity są przesuwane tak...
Zawsze mozna uzyc przerwania 16h: xor ax,ax int 16h i wynik masz w al=kod znaku, ah=kod klawisza...
Ponieważ w całym poście jedyną wartą uwagi informacją jest to: nie chce przyjmować klas to obstawiam że używasz C++. W takim razie gotów jestem się założyć, że nie masz nigdzie przy przerwaniach: extern "C" void nazwa_IRQHandler() {...} Bez owego >extern "C"< przerwania definiowane w plikach C++ nie zadziałają (jeśli...
W BASCOMie nie da rady - przynajmniej czystym. Musi być co najmniej mały fragment w assemblerze, żeby zlikwidować jitter przerwania AVR. Reszta też by się przydała w assemblerze, bo liczba taktów na linię jaka jest do dyspozycji nie jest imponująca. A co do łączenia - masz H i V-Sync, które są liniami cyfrowymi i po prostu je łączysz z MCU - mały rezystor...
Programowe generowanie sygnału video w jakimkolwiek standardzie jest zadaniem krytycznym czasowo, dlatego bez asemblera niewiele zwojujesz. Nawet w asemblerze trudno uzyskać więcej niż 100 punktów w linii. Zresztą zerknij na: Rejestrator przebiegów cyfrowych - przystawka do TV z EP Rejestrator przebiegów analogowych - przystawka do TV z EP Nie jest...
ok, scon.0 i scon.1 to znam z assemblera, czyli w przerwaniu musiałbym wpisać if scon.0=1 then cos_tam else cos_innego clear scon.7 clear scon.6 mnie zastanawia natomiast jak to zrobić inaczej, z wykorzystaniem przerwania, ale bez assemblera ;D a chętnie bym podglądnął jak to robią inni.... ;-) pozdrawiam JAreCK
Prosze zauwazyc ze wszystko dzialalo poprawnie wyswietlanie bylo bez bledów, dopóki nie wprowadziłem obslugi przerwań. Napewno błąd leży gdzies w wywolaniu adresu talblicy cyfr.
Witam! Przygode z assemblerem radze zacząć od porządnego zrozumienia jak działa wasz sprzęt, jak jest zorganizowana pamięć, co to są rejestry, przerwania itp. Tutaj macie dwa kursy z ktorych sam korzystalem: http://skowi_magik.republika.pl/ http://rudy.mif.pg.gda.pl/~bogdro/dos/in... Pozdrawiam!
A ustawienie stosu to gdzie ? Kodu w obrazkach się nie wstawia, tylko w tagach code] ] Kod w ogóle to masakra, użyj preprocesora... Co to za "delaje" w przerwaniu ? Obsługa przycisków przez przerwanie to mi bascomem zalatuje...
Co do tego przerwania w assemblerze to masz tylko czesciowo racje. Brakuje jeszcze paru ustawien. :)
Witam Mam do napisania program do licznika T1 ze zliczaniem impulsów zewnętrznych z obsługą przerwań. Bez NPM tylko jako przerwanie. Proszę o pomoc.
ISR_NAKED i assemblerem https://gcc.gnu.org/wiki/avr-gcc#Registe... jest tam właśnie napisane że te co zauważyłeś muszą być zachowywane. ps. to przerwanie jest aż tak często, że jest o co walczyć?
Testy można przeprowadzić w niektórych symulatorach np. [url=http://www.edsim51.com/]edsim51. Przykładowy kod poniżej. [syntax=asm] sekundy EQU 07Eh ;zmienna sekund jedna_dwudziestaEQU 07Fh ;licznik jednej dwudziestej sekundy resetowanie EQU 19456 ;ustawienie zliczania co 0,05sek setkiEQU 07Bh dziesiatkiEQU 07Ch jednostkiEQU 07Dh flagiEQU 020h org 0000h...
Prędkość obsługi przerwań determinuje wyłącznie tempo ich obsługi. Aby AVR wykrył przerwanie potrzebne są o ile dobrze pamiętam 2 takty zegara, co niewiele zmienia, bo z taką prędkością i tak przerwań nie obsłużysz, bo samo wejście do nich trwa ponad 4 takty, a wyjście dodatkowo 2. I to w przypadku pustego przerwania. Lepiej opisz co to za proste analizy...
Czy mógłby mi ktoś przesłać jakiś PROSTY program (w assemblerze) z wykorzystaniem przerwania na AT 90s2313 (np.migają diody i po naciśnięciu klawisza przestają).Jak ustawić przerwanie?-co przesłać do rejestru... Moze zna ktos jakieś odnośniki do stron z przykładowymi programami? Za pomoc z góry dziękuję.
Witaj, Za co jest odpowiedzialny Timer0? Za określenie częstotliwości granicznej? Czy masz wolny Timer 1? Jeżeli tak, to moim zdaniem strasznie sobie to komplikujesz. W końcu Twoim zadaniem jest zmierzenie okresu przebiegu o częstotliwości, którą podajesz z generatora, a od tego jest tryb Capture, czyli pomiar długości impulsu. strona 83: Input Capture...
Udalo mi sie w ten sposob (skacze do miejsce po zakonczeniu przerwania): przerwanie: . . . POP ACC POP ACC MOV A,#MIEJSCE PUSH ACC MOV A,#00H PUSH ACC RETI
Zapoznaj się z przerwaniami tego uC z datasheetów: http://www.keil.com/dd/docs/datashts/sil... http://www.keil.com/dd/docs/datashts/sil...
Witam, wlacze od jakiejs chwili z assemblerem dla 51, stanalem na odczytaniu stanu licznika T1, sytuacja jest taka ze T1 pracuje w trybie counter liczac impulsy z zewnatrz w tym czasie T0 pracuje w trybie timer, w momencie gdy T0 wygeneruje 15 przerwan przy kwarcu 12Mhz tyle mniej wiecej przypada na sekunde ma nastapic odczyt licznika T1. O tyle co...
To nie ma nic w wspólnego z BASCOMem, C, czy Assemblerem. Masz błąd w rozumowaniu. Używasz LCD w programie głównym i przerwaniu. Obsługa LCD nie jest ReEntrant (tylko nie szukaj definicji słowa "ReEntrant" na Polskiej Wikipedii bo na Polskiej Wikipedi ta definicja jest błędna ;) (albo przynajmniej niekompletna)). Umieść wyświetlanie w programie głównym....
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...
A niby dlaczego miałby nie funkcjonować? Gdyby zawartość SRAM była tracona to program musiałby się wykonywać od początku, co efektywnie byłoby równoznaczne z resetem procesora. Oczywiście w każdym trybie oszczędzania energii zawartość SRAM jest zachowana, co czyni twoje rozważania nieco pozbawionymi sensu. Jeśli chcesz wydłużyć czas to do wybudzania...
Witam, proszę o pomoc w trzech zagadnieniach assemblera. 1. Jak przy pomocy MMX/SSE sumować 2 wektory o rozmiarze 3? 2. Jak w assemblerze wyświetlić informacje o DOS-ie? 3. Jak zrobić wypisywanie tekstu bez użycia przerwania DOS-owego? Podobno można wykorzystać przerwanie karty graficznej 10h Korzystam z NASM i jak dobrze pamiętam to z architektury...
Balu -> no tak zgodnie z tym co podpowiedział dalej BoskiDialer to miałeś rację, próbuję odczytać z flasha - ten nieszczęsny LPM (eeeh no chwila nieuwagi) BoskiDialer -> WIELKIE DZIĘKI !!!! - kurczę w tym drugim poście nie dostrzegłem niestety tych twoich poprawek w kodzie i to był mój największy błąd. Czyli dokładnie tak jak sugerowałeś w pierwszym...
Wstawki asemblerowe w AVRGCC można umieszczać w programie po instrukcji "asm volatile", zresztą najlepiej przeczytaj sobie "GCC-AVR Inline Assembler Cookbook" - znajdziesz go pod tym adresem: http://www.stanford.edu/class/ee281/proj... Pozdrawiam.
po prostu pod adresem pamieci w ktorym jest wektor przerwania(sprawdzisz w dokumentacji, pewnie jest to 0002 lub 0003h) zrob call do obslugii przerwania, wykonaj co masz wykonac i wroc komenda reti . Sprawdz czy nie musisz odblokowac flagi przerwan(Interrupt Enable) bo inaczej nic nie zadziala. Powodzenia
$katalog_WinAVR$/doc/avr-libc/avr-libc-u... Tworzysz osobny plik w asemblerze (.S, nie .s) zawierający procedurę obsługi przerwania, kompilujesz do pliku .o i linkujesz z pozostałymi plikami. W dołączanym wo WinAVR szablonie Makefile jest przewidziane miejsce na wypisanie źródeł w asemblerze (ASRC = $tu wpisz nazwy plików$). Przykład,...
Wszyscy mają rację ;-) Ale żeby dobrze poznać mikrosterownik trzeba poznać jego assembler. Ja też czasami kożystam z BASCOMA (avr i 8051), ale i tak większość kodu jest w tedy w assemblerze, pomijając to, że kodu wynikowego wychodzi mniej, to łatwiej min się "myśli" w assemblerze. A ile razy trzeba się zastanawiać "co ten bascom wyprawia z tymi timerami/rejestrami/przerwaniami/itd"?
No są dwa zwykłe przerwania INTx. A przy odrobinie szczęścia można jeszcze wykorzystać przerwanie od komparatora, przerwanie ICP i przerwania do Timerów. Ale od razu mówię że najlepiej by było to napisać w assemblerze (samą obsługę przerwań). Nawet jeżeli wykorzystasz tylko przerwania INTx. Na szczęście będzie to proste.
Witam, Przyczyną twoich problemów jest to iż błędnie zakładasz działanie instrukcji BREQ (skok jeżeli równe) a ty traktujesz ją jako CALL z warunkiem EQ (wywołaj jeżeli równe) a tak nie jest. Instrukcja BREQ location "skacze" do miejsca w skazywanego przez location nie odkładając adresu powrotu na stos. Aby wywołać podprogram musisz użyć instruckcji...
Jeśli chcesz bez zatrzymywania to o ile pamiętam (dawno nie bawiłem się asmem pod DOS'a) to istniała usługa nr 6 przerwania 21h. mov ah, 06h int 21h W zależności od stanu rejestrów (zobacz jakich) pobierała znak z bufora i umieszczała w dl, bez "zatrzymki". Pozdrawiam.
Jeżeli masz czasochłonne przerwania mogą one znacznie zakłócić transmisje nawet przy 300baud. Jeżeli możesz na ten czas wyłączyć przerwania, zrób to - możesz wtedy próbować podnieść prędkość transmisji nawet do 115kbaud. Taki zabieg bez użycia assemblera może się nie udać.
Gdzieś wyczytałem, nie wiem gdzie, że w Cortex'ach funkcje obsługi przerwań mogą być użyte jako zwykłe funkcje. Odwrotnie - funkcje przerwań mogą być zwykłymi funkcjami, bez żadnych dziwactw, bez atrybutów, bez assemblera. Ale jak jest przerwanie to skąd procesor "wie" że wychodząc z przerwania ma nie odtwarzać LR bezpośrednio tylko to ma inicjować...
(at)velsper Najsmieszniejsze jest to ze jeden z Gumisiow obecnie robi w TPSA (Orange) ;) i chroni ta siec przed wrednymi hackerami ;) Co do assemblera nie bylo zle, akurat w latach 90 moj nauczyciel od informatyki (w szkole sredniej) wydal kasiazke "Jak Pisac Wirusy", fakt ze spora czesc to bylo tlumaczenie ksiazki z pakietu Borland Turbo Assembler,...
Podział na kolejne kostki jest równie banalny jak łączenie. Przypuszczam, że program do programatora może mieć opcję wybrou układu który ma zaprogramoiwać - podaje się kompletny plik i poleca nagrać kość H albo L. 68340 to CPU32. Procki m68k mają na początku przestrzeni adresowej tabelę wektorów przerwań - 256 pozycji czyli 1kB.
Dobry wieczór, Gra działa, ale wyświetla tylko cyfry parzyste z wyjątkiem pierwszej. Generator liczb pseudolosowych polega na wycięciu młodszej cyfry setnych sekundy zegara systemowego... Kiedyś działało, a na CA80 kuleje... Zakładam, że problem wynika z różnicy w implementacji obsługi klawiatury starego (SA) i nowego (CA) systemu oraz wykorzystania...
Przerwania, w odróżnieniu od starych ARMów są w całości zarządzane przez ARM'a czyli CortexMx. W dokumentacji ARM znajdziesz opisy rejestrów i jako to działa. Każdy producent, taki jak ST zmienia znaczenie linii przerwań, definiując je po swojemu za wyjątkiem kilku pierwszych zarezerwowanych przez ARM. Ponadto, Cortex'y mają możliwość nadania przerwaniom...
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...
:oops: przyznaje sie bez bicia - pic'ow nie programowalem 6502, 68k, x86, '51, od biedy z80 i avr no i pierwsza prawda programisty niskiego poziomu - assembler przenoszalny nie jest :) ale.. to tylko pomysl ze starych dobrych czasow
A w assemblerze można przestawić wektory przerwań?
Za bardzo nie mogę zrozumieć dlaczego po stronie odbiornika wszystkie dane mają postać zanegowaną w stosunku do nadajnika. Nie musi tak być - po prostu większość (wszystkie?) dostępne demodulatory podczerwieni w przypadku braku sygnału mają na wyjściu stan wysoki. Pojawienie się paczki impulsów generuje stan niski na wyjściu takiego odbiornika. Tu...
unisiemens zgra wszystko jak sa 2 flersze to 2, jak 1 duzy to cała jego zawartosc. W eepromie (emulowanym ) jest sp-lock area, Mapa IMEI, ustawienia usera (ostatnie połaczenia pierdoły...) Deassemblera poszukaj na stronie producenta, moze bedzie. Najważniejsza jest jednak dokumentacja od tego procka. Dam ci plik deassemblowany np od atmela 90s8515 i...
Wychowałem się na assemblerze Potem AVR i nadal assembler Szacunek! a więcej trzeba ufać narzędziom zewnętrznym Nie można całkowicie. W przypadku generowania kodu startowego przez Cube miałem kiedyś zagadkę. Nie pamiętam dokładnie ale chyba chodziło o ADC i DMA. Cube generował inicjalizację w odwrotnej kolejności i to po prostu nie działało. HAL jest...
kurczę trochę nie łapię... to w niektórych rozkazach (w tekscie programu w C) stosuje się adres w pamięci ram, a w niektórych (w kodzie assemblera) adres w przestrzeni IO? nie przeczytałem jeszcze pdfa do AVR więc może czegoś nie wiem... mam jeszcze jedno pytanie (mam tą książkę, ale uważam, że jest marna) chcę napisać program w C który będzie miał...
Co do odmierzania czasu to możesz to zrobić na wiele sposobów. W normalnych pętlach albo klawiaturę obsługiwać w przerwaniu, wtedy opóźnienie definiuje to przerwanie i nie angażuje zbytnio procesora. A z drugiej strony to poszukaj na forum, sam tu umieszczałem program obsługi klawiatury matrycowej.
[syntax=assembler] ORG 0 ; wektor zerowania JMP MAIN ; bezwarunkowo skocz poza obszar wektorów przerwań ORG 000BH ; wektor przerwania po przepełnieniu timer0 JMP PODPR_L MAIN: MOV TMOD, #01H ; ustaw dla timer0 tryb 1 MOV TL0, #01110000b ; 65536-10640=54896 MOV TH0, #11010110b ; SETB EA ; globalnie zezwól na przerwania SETB ET0 ; zezwól na przerwanie...
Co do środowiska programistycznego to do atmeli jest AVR Studio, darmowe i bardzo dobre i ma dużo większe możliwości niż zachwalany MPLAB chociażby samą emulację procesora. wspaniale. MPLAB ma emulacje KAZDEGO procesora microchipa (PIC32, dsPIC rowniez) wlacznie z przerwaniami i niektorymi peryferiami (m.in. UART i cos tam jeszcze, mozna tez chyba...
Jak już zostało wspomniane, brak instrukcji atomowo ustawiającej lub kasującej bity w pamięci. W związku z tym może warto napisać dodatkowy moduł (kilka linijek na krzyż w assemblerze), który blokował by przerwania na dosłownie cztery cykle, pomiędzy którymi następował by odczyt, modyfikacja i zapis. Oczywiście kod nie będzie tak optymalny jak być powinien...
Teoretycznie jest możliwe na etapie kompilacji stwierdzenie które przerwania będą odblokowane, ale tylko teoretycznie, kompilator musiał by przeprowadzić symulację działania programu, można by w zasadzie zrezygnować z wstawiania takiego „bezpiecznika” (instrukcji RETI) dla każdego możliwego poza jawnie wskazanymi, idę o zakład że w wielu...
przerwania assembler assembler przerwania zegarowe assembler darmowy assembler
lanca dysza siemens gigaset zasilacz płyta indukcja electrolux
pilot uniwersalny silvercrest odpowietrzanie klimatyzacji
TV SHARP - brak przycisku Input na pilocie Aquos Uchwyt tarcz tnących Schneider/Berlinett CM5100