A włączyłeś w Keilu wektory przerwań? "Cofigure Flash Tool" zakładka "C51". Zaznacz "Interrupt vectors at adres".
Kilka pytań i spraw, ktore być mogą okazać się pomocne: Z wartości przeładowania T0 (D8EF) i faktu że przerwanie chodzi 100 razy/sek domyślam sie ze używasz kwarcu 12MHz . Jednak jesli ma to byc równo 100Hz to zauważ że podana u ciebie wartosć początkowa jest za mała o 1, bo powinno byc: T0pocz = FFFFh - (Fxtal / 12 / Fto) + 1 = D8F0h (a nie D8EFh)...
To nad czym się zastanawiacie intvect jest przecież wyjaśnione (internal vectors = wektory skoków wewnętrzne) czyli tablica przerwań procesora. Np.: .ext0 DC.W it_ret oznacza że jeżeli wystąpi przerwanie wewnętrznego modułu przerwania zewnetrznego EXT0 (.ext0) to procesor wykona skok do etykiety w programie it_ret lub zapewne jest to zakodowana nazwa...
Przerwanie oparlem o wywolania DOS-owe XOR_BX,BX -> zerowanie BX XOR_CL,CL -> zerowanie CL POCZATEK: MOV_AH,08H -> ustawia ze odczyt klawiatury INT_21H -> wywolanie przerwania odczyty klawiatury MOV_CH,AL -> do CH znak ASCII klawisza nacisnietego CMP_AL,13 ->sprawdzenie czy ENTER JNE_DALEJ ->jak nie ENTER to skacz dalej CMP_CL,1...
2 zmiennych dokładnie w tym samym czasie ( A nie prościej wyłaczyć przerwania na te 4 takty zegara. Zamiast systicka zastosuj inny timer np 32 bitowy. Wtedy przepełnienie będzie następować przy 72MHz co ok 60 sekund. Powinno wystarczyć. Masz tez specjalny rejestr co liczy cykle zegara przy wykonaniu programu (proponuję zapoznać się z DWT). Dlatego...
Witam Powstawiaj odpowiednie instrukcje tam gdzie napisałem zapal, zgaś itp. Powinien program zadziałać nie daję gwarancji że się nie machnołem. Niemniej idea chyba będzie widoczna i powinieneś w razie czego uruchomić ten program. Pozdrawiam ledequp1.7 buzerequp1.5 licznikequ21h ; licznik przerwań czas_led22h czas_buz23h czy_sequ1 ; czy sekunda org0000h...
A pomysł o skompilowaniu kodu z C++ i wyswietlenie w Asm - większej bzdury nie słyszałem zdajesz sobie sprawę ile kompilator dorzuci kodu !!! Nie czytasz uważnie. Nikt nie mówił o jakimś wyświetlaniu. Jeśli jesteś taki obeznany (a twierdzisz, że jesteś) to znasz także proces disasemblacji, który niejako rozbiera programy pisane pod jezykiem wysokiego...
Załóżmy, że to też błąd przy wklejaniu kodu (inaczej asembler zgłosiłby błąd). Powinno być R21 , a nie R121 . Być może to też błąd przy wklejaniu. Bity WGM12 , CS12 oraz CS10 nie znajdują się w rejestrze TCCR1A tylko w TCCR1B . Istotne jest jednak to, że ustawiając tylko bit WGM12 ustawiasz TIMER1 w tryb 4, czyli tryb CTC, w którym timer liczy od 0...
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...
Witam. Siedzę już od jakiegoś czasu nad termostatem do podgrzewacza CWU. Wydawało mi się, ze to takie proste. Poustawiałem czasy dla opóźnień w/g pdf'a, a wyświetlacz wciąż pokazuje 55. Postanowiłem napisać wszystko od nowa i w dalszym ciągu mam "55". Naraz przyszło mi do głowy, że 55 to 0x37, a binarnie 00110111. Wciąż nie mogę znaleźć tego błędu w...
Jako przykład podam program dla 8051 napisany przeze mnie w asemblerze realizujący funkcje zegara: - obsługa 4 wyświetlaczy 7seg poprzez rejestry szeregowe 74595 - obsługa 5 przycisków przez rejestry 74165 - obsługa przerwania do generowania dźwięku "piknięcia" przy naciskaniu przycisków, czasu lampki i synchronizacji DCF, wszystko na jednym liczniku...
Chcę kożystać z przerwania INT0, a w nim o jeden powiększać zmienną zapisywaną w rejestrze np.: r20. Niestety po powrocie z przerwania zerowany jest stan rejestrów, awięc zmienna znika. Komend Push i Pop nie ma w ATtiny12. Jak operować na zmiennych? Jak odkładać je na stos?
Jak Waszym zdaniem powinno się robić? Kod danej funkcji w przerwaniu, czy w przerwaniu tylko ustawianie flagi uruchamiającej tą część kodu. Dziękuję za dotychczasowe cenne wskazówki!! To drugie, zasadą jest aby przerwania były szybkie, wtedy sobie najmniej przeszkadzają, oczywiście są wyjątki jak np falownik gdzie w przerwaniu PWM musisz obliczyć nową...
Witam. Napisałem następujące podprogramy: .EQU POCZATEK_PROGRAMU_H = 0x00 .EQU POCZATEK_PROGRAMU_L = 0x90 .EQUPROGRAM_WSK_H= $60 .EQUPROGRAM_WSK_L= $61 PROGRAMOWANIE_: CLI;blokada przerwania LDI R20, KOM_BRAK_ROZKAZU // kasowanie rozkazu LDS XH, PROGRAM_WSK_H ;pobranie aktualnego adresu wskaznika programu LDS XL, PROGRAM_WSK_L KOM_PROG_: WDR;zerowanie...
Może pokaż na początek jak jest zrobione zasilane awaryjne. Aby korzystać z przetrwania musisz: - odblokować przerwanie INT0 w rejestrze GIMSK (ustawienie bitu INT0 w stan 0) - skonfigurować kiedy ma być zgłaszane INT0 , bity konfiguracyjne ISC00,ISC01 w rejestrze MCUCR - zainicjować vektor przerwania od INT0 (jeżeli nie robi tego kompilator) - odblokować...
To co napisał shg- trzeba uważać. Jeżeli pierwsze przerwanie odłoży na stos to co trzeba i drugie przerwanie wewnątrz pierwszego też odłoży na stos to co trzeba i z tego przerwania zostanie wywołane jeszcze raz pierwsze albo drugie- bo znów zostało wywołane- i znowu odłozy na stos to co trzeba- to stos może się przepełnić. To znaczy wejść w obszar pamięci...
Proponuję zapoznać się z popularnymi przerwaniami oraz ich funkcjami. Szczególnie interesujace będą przerwania 13h i 21h
założeniami (0x0099), lecz RET powoduje skok do 0x0106. Skąd mamy wiedzieć, który punkt programu przynależy do tych adresów? Poza tym gdzie znajduje się label _setup? I jeszcze jedno Komenda RETI automatycznie zezwala interrupt. Returns from the interrupt. The return address is loaded from the STACK, and the Global Interrupt Enable bit is set.
Nie :) TYlko to umożliwia działanie 2 programów "jednocześnie" (przynajmniej w dosie). Ty spokojnie pracujesz sobie w dosie a program siedzi w pamięci i obsługuje dane z rsa ale jeśli nie chcesz to mozesz napisać program nie rezydentny i tylko on będzie działa w danym czasie i nic wiecej
No tak sie przymierzam żeby odstapic od bibliotek, narazie chce poznac procka i jego mozliwosci przez przyklady ktore mam. Mysle ze na poczatek to jest dobre potem nastepny poziom tajemnej wiedzy - max to chyba asembler gdzie umiem tylko dodawac :)
Witam. Timer mikrokontrolera '51 taktowanego zegarem 11.059200 MHz zliczy w ciągu jednej sekundy 921600 impulsów. Ze względu na wielkość timera (2 bajty) może Kolega zliczać setne części sekundy - ustawić przerwanie co 9216 impulsów. Każde wywołanie przerwania zwiększy zmienną o 1, czyli mamy w niej wynik pomiaru z rozdzielczością 0,01 s. Rozwiązanie...
Witam! Na wstępie chciałem zaznaczyć, że od niedawna dopiero poznaję procesory z serii ARM. Bardzo dawno temu miałem styczność z 51- jedynką i keilem. Moje doświadczenie w programowaniu C też nie jest oszałamiające, natomiast asembler na ARM jak na razie jest przeze mnie mało zrozumiany. Proszę o wyrozumiałość przy pisaniu ewentualnych odpowiedzi, za...
(at)Badman: jak wygenerować kod asemblera i z jakich źródeł uczyłeś się asemblera ? Tak ja pokazał michalko12. Ogólnie kod asemblera generuje się poleceniem objdump, a w tym przypadku arm-none-eabi-objdump, program znajduje się w katalogu sciezka_do_lpcxpresso/lpcxpresso/tools/b... dokumentacja tego programu i innych znajduje się w katalogu sciezka_do_lpcxpresso/lpcxpresso/tools/s...
jest to deklaracja zmiennej "bufor", która jest tablicą bajtów ("db"), która zawiera kolejno: - bajt o wartości 2 - bajt o wartości 0 - 2 bajty o wartości niesprecyzowanej ( 2 times dup licate value " ? ") Jest to typowa deklaracja buforu służącego np. do odczytu tekstu z klawiatury za pomocą przerwania, w takim przypadku: - przed wywołaniem przerwania...
No właśnie każe promotor, każe... :( Ostatnie pytanie: Czy zamiast reti, które powraca z przerwania ustawiając I, mogę napisać skok do samego przerwania, a na końcu jego obsługi wykonać powrót ze wskaźnikiem I? Widywałem też takie rozwiązania (poradniki w internecie) ale nie bardzo temu ufam. Doczytałem w książce: "W każdym elemencie tabeli wektorów...
Wszystko juz chodzi. Przyczyną problemów były błędy jakie zawiera sam BASCOM, które zgłoszę do autora........Temat do zamkniecia No zaraz padnę na zawał. Najpierw, że kod super tajny, korporacyjny och i ach , że przerwania w AVRach mieszają na portach. A przecież przerwania to nie "wytwór" Bascoma Wlasnie o to chodzi że ma coś wspolnego z przerwaniem....
zerknij na ten projekt http://www.mcselec.com/index.php?option=... cała idea pomiaru jest zawarta w procedurze obsługi przerwania Interrupt Service Routine , jest to w Bascomie ale myślę że bez problemu przeniesiesz to na asembler
Coś te flagi przecież ustawiło... Najpierw włączasz obsługę tych przerwań, potem włączasz podciąganie pinu to flaga już ustawiona...a kasowana jest przez AVR sprzętowo kiedy obsługiwane jest przerwanie. Bascom nie musi obsługiwać żadnego kasowania flagi przerwania bo robi to sam procesor tyle, że w przerwaniu (jednym w wyjątków potwierdzających regułę...
;sampel dla 10 s mov eax,10 call Delay_seconds extrn Seconds_today:proc Delay_seconds proc pusha mov ecx,eax call Seconds_today mov ebx,eax DLY1: call Seconds_today sub eax,ebx cmp eax,ecx jb DLY1 popa ret Delay_seconds endp uffff :idea: sampel z ksiazki Asembler dla procesorow intel
W procedurze obsługi przerwania musisi zachowywać stan rejestru stanu procesora - standardowo push/pop. Bez tego w programie będą się działy takie cuda, że nie ma senstu tego analizować.
Bo już głupieję- dość szybko. No nie dziwię się, ja też bym zgłupiał ;) poważnie.... Tak sobie poczytałem cały ten wątek i aż mi ciarki po plecach przeszły od tej niby-wojny ;) tymczasem wyszedł z tego bełkot dla kogoś kto zaczyna naukę C. (tzn proszę mnie źle nie zrozumieć, nie chcę nikomu dogadywać) Pytanie wpierwszym poście było proste aczkolwiek...
Zaraz, zaraz, mówimy o pinie procesora, czy pinie w gnieździe Arduino ? Są to różne "numerologie" i podejrzewam, że te włoskie pomysły używają swojej ;) Tak w ogóle to wytłumaczenie nurtującego Ciebie zjawiska na pewno jest w pliku asembler list, do jakiego w końcu kompilator sprowadza Twój kod. Wystarczy, że oba przerwania mają wspólny adres wykonania.
Ok, rozumiem żemov ax,(at)code zwraca do ax segment w którym przechowuje swoje dane .code ? [syntax=asm] .model small .stack 100h .data bufor db 8 dup(6h) .code mov ax,(at)code mov ds,ax mov dx, offset bufor mov ah, 0ah int 21h mov ax,(at)code mov ds,ax mov dx, offset bufor movah, 09h int21h mov ah,4ch int 21h end[/syntax] Zmieniłem, wydaje się teraz...
Jakos sobie radze, a teraz mam pytanie, czy mozna uszkodzic odba liczniki t0 i t1, po wlaczeniu zasilania z bateri od telefonu? mam stabilizator na 5v, i po zaladowaniu softa dzialalo, a jak podlaczylem baterie zamiast zasilacza regulowanego, baterie od telefonu (polaryzacja w 100% dobra, podlaczylem przed stabilizatorem) przestaly dzialac liczniki...
Jest to procesorek CISC, co upraszcza programowanie w asemblerze. No, niektóre z elementów asemblera AVR przydałaby się w zasobach 8051. Na przykład jasne i czytelne skoki: BRGE, BREQ, BRLT. W 8051 trzeba pamiętać, że odpowiednia kombinacja flag Z i CY to większe, mniejsze, równe. 8051 ma też nieco niezbyt zgrabnie zrobione porównania, a jedynym przedstawicielem...
ldi R16, TIMSK ; wlaczenie przerwania dla wyrowania ocr1a i licznika Wg mnie powinno byc: in R16,TIMSK Nie wiem czy to pomoze, narazie innego bledu nie widze. Pozdrawiam, Michal
asembler - to jest C, w dodatku C na AVR, więc zamiast gdybać należy spojrzeć do dokumentacji. W przypadku wywołania przerwania dla którego nie ma procedury obsługi następuje skok pod wektor __bad_interrupt, pod którym to znajduje się instrukcja jmp 0, czyli programowy reset. Także efekt nie będzie do końca taki jak po resecie, bo nie zostaną zainicjalizowane...
Domyślam się, że wyświetlasz tekst funkcją przerwania 21h, która służy do wyświetlania ciągów tekstowych. Jeśli wczytać się w opis tej funkcji, to znajdziesz, że wyświetla ona tekst od wskazanego w rejestrze DX adresu aż do najbliższego wystąpienia znaku '$'. Jeśli robisz mov tab , to wpisałeś wartość 1 a nie znak '1', więc wątpię, abyś tak robił ;)
Ale mimo wszystko zastanawia mnie czego unikać aby przysłowiowo nie "zamulić" programu. Moze są ogólne rady. Zakładając, że nie korzystamy z wait czy waitms w pętli głównej to widać, że już jakieś doświadczenie masz w programowaniu, i powoli jak mówią koledzy wyżej dochodzisz - jak każdy zresztą- niestety do kresu możliwości Bascoma. Tzn można z niego...
Toć to jak zawsze;) W DS'icie na pewno napisali:) Anyway jak już uruchomisz timer, to on Sobie liczy i liczy... Załóżmy, że to timer1. Sam z Siebie zliczy 65536 taktów zanim się przewróci;) Zakładam, że masz 1MHz taktowanie procka -> 1us trwa takt Uruchomiony timer z dzielnikiem 1(no prescale). Musisz zliczyć 15 razy i masz około 1 sekundy :) teraz...
http://obrazki.elektroda.net/90_12302453... Kontynuacja zeszłorocznego projektu Co Nowego: Nowy sterownik oparty jest o procesory atmega16 włożone może trochę na wyrost ale okazały się najtańszymi oferującymi dostateczną ilość wyprowadzeń. Każdy obsługuje 16 kanałów i posiada własny unikalny adres ustawiany dipswithem. Sterownik ma na chwile...
AVR studio (asembler) to nie Bascom... tu nie ma czegoś takiego jak komendy do obsługi sprzętowych liczników, musisz używać rozkazów uP i konfigurować odpowiednie rejestry i przede wszystkim odpowiednio używać przerwań, bo one są chyba najważniejszym elementem, którego używa się przy pracy z licznikami. Musisz wziąć notkę katalogową tego atmelka i przejrzeć,...
Wygląda to tak jakby procek z niewiadomych mi przyczyn nie generował przerwania, albo nie ustawiał w przerwaniu odpowiednio stanu pinu wyjściowego. Jak można w ogóle takie wnioski wyciągać a tym bardziej na podstawie tak lakonicznych informacji? Żaden procek nie gubi przerwań, to niestety autor kodu gubi się podczas pisania programu - i gdybyś tego...
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...
Chodziło mnie oto, by po doliczeniu 1s i porownaniu z rejestrem OCR0A wygenerował przerwanie. Do reejstru trzeba wpisać odpowiednia wartośc. Wyliczyłeś, że jest to 146. Mniemma, że musze wpisać tam fizycznie to w Hexie, czyli 0x92, tak? Fizycznie to jest binarnie,a czy wpiszesz dziesietnie, szesnastkowo czy binarnie to nie ma znaczenia, asembler wszystko...
Muszę zwrócić honor w takim razie, to moje ewidentne przeoczenie, oczywiste, że ilość push i pop musi się zgadzać. To przydałoby się przynajmniej koledze asembler kliknąć klawisz pomógł Zastanawia mnie w takim razie jak to możliwe, że przy takiej implementacji wszystko dzieje się prawidłowo? No jeśli ty nadal utrzymujesz że wszystko dzieje się prawidłowo...
...Załamała mnie Twoja wypowiedź kolego korrus666... Widać programowanie w językach wysokiego poziomu strasznie Cię okaleczyło. Napisz trochę programów w asemblerze, a wyjdzie Ci to na dobre. Zrozumiesz działanie procesora (choć Atmega to już mikrokontroler) i będziesz pisał lepsze programy w swoim C, Javie, lub co gorsza Bascomie. OOO Matko! A mnie...
Wkońcu to jest Bascom. w bascomie na pożądku dziennym jest mówienie "moduł działa poprawnie gdy inny moduł jest niezaładowany, ponieważ również używa timera i moduły zaczynają interferować niemożna używać ich razem" (zakładając że moduł jest niejawnie dołączany do projektu w bascomie, gdy tylko w kodzie występuje wywołanie funkcji modułu) jeśli program...
Nie nie. Zobaczyłem tutaj: http://obrazki.elektroda.net/71_12652375... Zobaczyłem że odpowiedziałeś. Ale treści odpowiedzi jeszcze nie widziałem a już wiedziałem jaka będzie. Bo niby jaka inna mogła by być? ;) Jak by to dotyczyło komunikacji radiowej a odpowiedział by Balu to też bym z góry znał odpowiedz ;) No to gratulacje. Asembler wcale...
Przypominam, iż nie jest tutaj wymagana jakaś większa precyzja - to ma sterować tylko diodą RGB (oświetlenie dekoracyjne). A jest sens się szczypać? Jeśli to coś steruje tylko diodą i nie ma nic więcej do roboty, to takie uproszczone podejście powinno wystarczyć. To ma sterować tylko diodą RGB w sensie docelowym, ale przecież pisałem w 1 poście, iż...
asembler przycisk przerwania diody asembler dodawanie asembler
tecumseh ustawienie zaworów mikrofala grzać panasonic dodatkowa rozdzieliła
Audi A1 – odpowietrzanie hamulców krok po kroku, kolejność, rozpórka pedału, gdzie kupić How to Enable Energy Measurement: Hardware, ICs, Firmware, Calibration, and Logging