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.
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...
Skoro ustawiłeś bit CTC1, to sprawdź w dokumentacji, do czego on konkretnie służy.
Brakuje pętli nieskończonej na końcu programu. Wyświetlenie liczby 00-99 nie jest tak proste jak myślisz. Po pierwsze musisz ograniczyć sekundy do 99, po drugie rozbić sekundy na cyfry i po trzecie wyświetlić (co też nie zmieści się w jednej linijce kodu). Aby obsłużyć wyświetlacz musisz się dowiedzieć jak jest dołączony do procesora. Zacznij od prostego...
Zacznij od przerwania timera.
Muszę zrobić teraz taką rzecz, używając timera 1 mam poznać czas od momentu zgaśnięcia diody (tego podczas mrugania) do momentu naciśnięcia przycisku "1" wyłączającego mruganie. Następnie ten czas ma być zapisywany i co taki czas ma mrugać dioda Naprawdę musisz używać do tego celu aż dwa timery?
Faktycznie zamieszczony program w asemblerze ma "walory edukacyjne" - nie ma w nim nawet jednego słowa komentarza! Dosyć istotną wadą tego projektu jest chwilowe załączanie przekaźnika w momencie włączenia zasilania...
Siema. Mam do napisania projekt (dsm) assembler " miernik refleksu , wykorzystać układ wewnętrzny timera ". Jak ktoś wie proszę pisać. Dzięki. Zamykam. - arnoldziq
A jakimi poleceniami sprawdza się stan znacznika timera, bo dopiero zaczynam z assemblerem i jeszcze niewiele wiem
1. assembler 2. timer 0x41 0x56 0x45!!
A można jakoś ustawić ten licznik timera żeby zliczał np do 100?
kolego, powyzsze watki mowia zeby wykorzystac czestotliwice procesora + licznik cykli, wszystko jest w winapi, wiec kontrolowane systemem win a jaki jezyk do tego uzyjesz jest bez znaczenia. jezeli upierasz sie na dos, to wiem ze kiedys mozna bylo wykorzystac timer 8253/8254 piszac procedure w asm, np: procedure Wait; assembler; {----------------------------------...
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...
Tylko assembler. Co akurat ułatwia przerobienie tego na C.
Witam, zmodyfikuj swój program: http://www.elektroda.pl/rtvforum/topic33... W programie obsługi przerwania timera dopisz: Badanie stanu przycisku z uwzględnieniem drgań styków. Obsługę programowego timera liczącego przerwania pomiędzy przyciśnięciami przycisku, w zależności od długości słowa tego timera możesz mierzyć czasy rzędu minut, godzin,...
Assembler tu nic nie pomoże. Standardowy timer jest zbyt wolny. Musisz sam oprogramowac zależności czasowe. Poczytaj coś o funkcjach HPT (coś w rodzaju QueryPerformanceCounter i inne). Dzięki nim można osiągnąć rozdzielczości kilkunastu mikrosekund.
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...
tak, musisz kasować ją ręcznie - tak samo jak VICVectAddress. Inaczej nie da się tego zrobić - jedno przerwanie może zostać wywołane przez wiele źródeł (przepełnienie, porównanie, złapanie nowej wartości, ...), więc nie ma innego uniwersalnego sposoby niż ręczne kasowanie odpowiednich flag Dodam może, że przy debuggowaniu wewnątrz przerwania, czasem...
no coś mi nie idzie. :)) zacząłem troszkę sam. Zainicjowałem ADC, przerwania. Sam program nie stanowi dla mnie większego problemu, bo nie mam problemów z programowaniem . Nie potrafię jednak tego połączyć z LCD. Nie znam tych wszystkich protów i rejestrów odpowiedzialnych za przetworniki, timery itd. C/C++ było fajniejsze :D
Mój poprzedni post został napisany na podstawie doświadczeń z programowania w Assemblerze '51. Niestety nie zapoznałem się jeszcze z językiem innym niż Assembler, tak więc wszelkie uwagi na temat samej składni języka pozostawiam innym. Mogę jedynie zapewnić, że Timery mikrokontrolera liczą w przód i wszelkie liczby wpisane do Timera, są liczbami, od...
<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. :)
; AT89C2051 processor definition file ; =================================== SPDATA081H DPLDATA082H DPHDATA083H PCONDATA087H TCONDATA088H TMODDATA089H TL0DATA08AH TL1DATA08BH TH0DATA08CH TH1DATA08DH P1DATA090H SCONDATA098H SBUFDATA099H IEDATA0A8H P3DATA0B0H IPDATA0B8H PSWDATA0D0H ACCDATA0E0H BDATA0F0H IT0BIT088H IE0BIT089H IT1BIT08AH IE1BIT08BH TR0BIT08CH...
wpisz 0 przed każdą liczbą hex rozpoczynającą się od litery np #0FFH; Pozdrawiam
ten pic jest tak prosty, a wybor kompilatorow tak ograniczony (zerowy?), co wiecej - projekt tak prosty - ze najlepiej napisac te kilka linijek w assemblerze, bo to nic specjalnego. jeden timer i gotowe. 0x41 0x56 0x45!!
'do liczby 1536 trzeba by jeszcze coś dolożyć, na wykonanie instrukcji Zasadniczo nie trzeba nic dokładać, bo wartość timera jest inkrementowana sprzętowo od razu (w kolejnym cyklu maszynowym). Czyli już w trakcie obsługi przerwania. Jeżeli obsługa timera zmieści się w 255 cyklach maszynowych, to zmieniany jest tylko młodszy bajt timera - czyli w procedurze...
Da się to jakoś zrobić ale to będzie musiała być niezła dłubanina w assemblerze. Trzeba wydłużyć długość Timerów do co najmniej 32b (a to tylko programowo się da). Dodano po 1 A mnożnik ma być stały czy ustawiany? Jak ustawiany to w jakim zakresie? I pytanie poza konkursem: do czego to?
Niedawno zbudowałem timerek w którym stan przycisków sprawdzam tak : callsprawdz ;sprawdzaj stan przyciskow -------------- ------------- ------------- sprawdzcallspr_s1 callspr_s2 return ;---------------------- spr_s1btfscPORTB,4 ; wcisniety ? return ; nie btfscPORTB,4 ; puszczony goto$-1 ; nie -------------- ; tak, puszczony ------------- -------------...
Wszystko pięknie, ładnie, ale żaden z programów nie działa... Program excray'a, się kompiluje, ale: nie widzę nigdzie wyjścia OCR1A (PB1), na które jest podawany sygnał wyjściowy PWM'a. Na wyjście to podawany jest stan niski (ustawiony bit COM1A1). Dodam tylko, że chodzi o PWM w trybie Phase Correct. W moim programie wszystko jest ok, poza odczytem...
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...
Czy mógłbyś wytłumaczyć działanie następujących linijek kodu: #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) w "wolnym tłumaczeniu" Linijka jeden: Adres kolejnej obsługi przerwania zapisany będzie we Flashu pod vectorem przerwania od Timera A0. Linijka dwa: Ta funkcja jest obsługą przerwania a więc powinna kończyć się na RETI a nie na...
Jak masz trochę pieniędzy to kup książką Jarosłąwa Dolińskiego "Mikrokontrolery AVR w praktyce". To chyba sztandarowa pozyja dla AVRów, w księgarni www.informatyczna.pl kupisz ją chyba najtaniej - za 46zł + przesyłka. W zamian dostaniesz bardzo przystępnie napisanąksiążkę dla początkujacych, co parawda, ale nie tylko. W książce masz bardzo dobrze opisane...
plik wyglada tak: .INCLUDE "m32def.inc" .CSEG reti jmp Reset reti reti reti reti reti reti reti reti rjmp Timer ... To sie nie dziwię że idzie w maliny :wink: Może tak ?: .CSEG .ORG 0 rjmp Reset reti reti ... Pzdr. Piotrek Sz.
mam tak: .org 0 rjmp reset ;po resecie .org $002 rjmp detekcja0 ;przerwanie od detektora zera .org $012 rjmp timer0;przerwanie od timera .org 40 reset: program i ten kod nie działa a ten działa: .org 0 rjmp reset ;po resecie .org $002 rjmp detekcja0 ;przerwanie od detektora zera .org $030 rjmp timer0;przerwanie od timera .org 40 reset: program...
Sterowanie serwami rozwiązałem (jeśli ktoś ma lepszy pomysł to chętnie wysłucham), problem tkwi w komunikacji z komputerem... Moja propozycja to wykorzystanie timera z przerwaniem. W przerwaniu timera byłyby zmieniane stany wyprowadzeń sterujących serwami. Ponieważ standardowo przerwanie od portu szeregowego ma mniejszy priorytet to nie mogłoby ono...
Co innego typowe zastosowania, np. sterowniki programowalne, a co innego projektowanie urządzeń. Sam lubię i często wykorzystuję graficzne środowiska programistyczne, ale często trzeba sięgać po wstawki w Javie, bo nie ma pudełka, które robiłoby to co potrzebuję. Czasem można to zrobić "dookoła" ale 100x wolniej. Poza tym w mikro-kontrolerach mamy ograniczone...
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...
... Nigdy nie dołączałem modułów w assemblerze do moich projekcików i nie wiem czy dobrze zrobiłem. No niestety , nie popisałeś się :-P Zobacz na adres , do którego jest kopiowany R24 6d2:8b bd out0x2b, r24; 43 r24 został skopiowany do GPIOR2(0x2B) , a nie do PORTD(0x0B) i zonk :| Nie chce mi sie tłumaczyć dlaczego tak się stało , więc dam Ci gotowca...
Witam Ciekawy wątek-) Pozwolę sobie wtrącić kilka uwag. Dla mnie z punktu widzenia UR jak i integratora bo taką pracę wykonuję z Siemensa polecam jedynie S7-200. Problemy z S7-300 pojawiają się w momencie Utrzymania Ruchu - po pierwsze nie wiem czemu ale producenci piszący maszyny w step nigdy albo rzadko dają back-up programu albo go hasłują (tak jakby...
We wcześniejszym wątku - [url=http://www.elektroda.pl/rtvforum/to... Co na początek ? zamieściłem program napisany (wsad do LPCXpresso) w asemblerze na twój układ który korzystał z tego timera i dokładnie był każdy fragment kodu opisany - co robi i jaki ma cel i był opis rejestr po rejestrze - opis tych fragmentów...
Chyba to właśnie co znalazłem w źródłach. Deklaracja funkcji przerwania nie może mieć atrybutu Interrupt("FIQ") skoro mamy już wrapper w assemblerze. Tak jak pisałem, spróbuj z __attrybut__((naked)) albo wcale. Jeśli zadeklarujemy to jako FIQ to kompilator dodaje kod odejmujący 4 od adresu powrotu, co my już robimy we wrapperku.
d3zerter - no tak wspomniałem o tym, ale nie można tak uniwersalnie komuś podpowiadać, że nop trwa ok 1us bez odniesienia do częstotliwości taktowania jak sam teraz widzisz. Poza tym jak sam też widzisz nie jest to kwestia pamiętania jakichs parametrów procka na pamięć tylko obliczenia. A programując szczegolnie w asm trzeba być mocno "za pan brat"...
Co do tego przerwania w assemblerze to masz tylko czesciowo racje. Brakuje jeszcze paru ustawien. :)
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"?
Witam !! Dopiero zaczynam się uczyć assemblera mikrokontrolerów rodziny 51. Chcę aby przysłowiowa diodka mrógała mi co 0,5 sekundy i nie wiem jak spowodować takowe opóźnienie w assemblerze, z tym że nie używając do tego celu timerów. załóżmy że procesor będzie taktowany z częstotliwością 12 MHz. Jak powinien wyglądać podprogram realizujący opóźnienie...
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...
Czas odmierza się oczywiście timerem. Możesz nastawić timer na 18 ms, dobierając odpowiednio do częstotliwości procesora preskaler i wartość rejestru porównania. Możesz też zaprogramować timer na zgłaszania przerwać np. co 1 ms i odliczyć do 18 w procedurze obsługi przerwania, po czym programowo zmienić stan wyjścia. Zacznij od poczytania w dokumentacji...
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ę...
Niestety czasu nadal nie mam zeby odpowiedziec dokladnie (moze jutro się cos znajdzie :) ), Co do 'zasymulowania' to Keil jest bardzo dobry ew. (juz nie pamietam ktory mnie bardziej odpowiadał, bo ostatnio ich nie uzywalem) jest jeszcze Raisonance (http://www.raisonance.com/ ) i oba są dosc fajnymi srodowiskami zarówno do pisania jak i testowania kodu....
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...
$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,...
Zamieszczam wyeksportowany plik z LPCXpresso z programem napisanym w asemblerze. Program ten mruga diodą w równych odstępach czasu które są odmierzane przez 32-bitowy timer. Program ten był testowany na tej płytce http://www.kamami.pl/index.php?ukey=prod... na układzie LPC1343. W pliku jest wszystko co niezbędne - skrypty linkera i...
witam, czy nikt nie znalazl w tej '51 nawet jednego timera ??? reszte zdaje mi sie, ze juz kazdy sobie wymysli...
Robisz mniej więcej coś takiego: mov ACC,#00h Petla: call /Opoznienie/ add ACC,#01h mov P1,ACC ljmp Petla I to tyle. Przy czym w miejscu /Opoznienie/ wstawiasz nazwę funkcji generującej opóźnienie. Można też robić to tak, że timer odmierza dokładnie 1s.
nie, chodzi o rozbiegowke w assemblerze. crt, boot albo startup sie to zwykle zwie. 4\/3!!
Podstawowy kod do generacji krótkich przerw: ;------------------------------------- ; opoznienie 15µs - zegar 4MHz movlw0x04; 1 DEL03 * 3 + 3 = 15us movwfDEL03; 1 WAIT_TFB decfszDEL03,F; 1(2) gotoWAIT_TFB; 2 ;-------------------------------------- Do długich odcinków czasu lepiej użyć timerów, ale w assemblerze to nie jedna czy dwie komendy....
O popatrz moje bajty liczysz bardzo dobrze. Wychodzi Ci 5. I to jest maksymalne zużycie w mojej wersji. A policz Twoje. Ze zmienną x wyjdzie 6. Zarówno moja wersja jak i wersja z x omija niepotrzebny dostęp do volatile. Tylko, że moja pozostaje czytelna, odpowiadająca sposobowi myślenia o problemie, a nie zwalczaniu ograniczeń kompilatora. Jeśli ograniczenia...
(at)sylwek185: zbyt mało informacji w jaki sposób masz podłączony wyświetlacz z mikrokontrolerem, pokaż schemat. Podejrzewam, że trzeba zastosować wyświetlanie multipleksowe, do którego najlepiej wykorzystać timer (licznik) mikrokontrolera... BTW. Do wstawiania kodu programu służy kolorowanie składni !
Do Killera :) Ja chetnie zerknalbym na twoj program w assemblerze do zegarka pod 8051. Mam za zadanie zrealizowac projekt dotyczacy wyswietlacza 7-segmentowego na diodach LED. Sprawa odczytu adresu dla jakiego wyswietlania zostanie odpowiednich cyfr zostala rozwiazana, nie bylo to trudne, jednak problem pojawia sie z Assemblerem, tutaj niestety jakos...
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.
- czy praca równoległych timerów nie będzie jakoś na siebie wpływać (program przerywa pracę na skutek działania timera1 by precyzyjnie wyznaczyć czas, a tu w tym samym momencie dochodzi kolejne przerwanie od innego timera, i co wtedy) Timery działają niezależnie, ponieważ realizowane są sprzętowo. Nie będą na siebie wpływać. Program niestety (w tym...
I jak sobie teraz pomyślę jak to możliwe że zagadnienia w języku obcym (mój ang jest kulawy) są bardziej przyswajalne niż napisane w ojczystym języku ? Nawet assembler taki fajny, prosty i bardziej logiczny się zrobił :) Angielski jest naturalnym językiem w elektronice. Może polscy tłumacze czasami za bardzo się starają:)
Taaaa Dobre ale on chyba sie w tym nie połapie, bo chciał w BASCOM-ie więc nie wiadomo czy zna assemblera. To ja sprubuje to zrobic w BASCOOM-ie.
kurcze, trudne zadanie. Mógłbyś podrzucić cały katalog projektu, tzn. bez rzeczy które chciałbyś zachować tylko dla Siebie. Chodzi mi o tą często zwaną 'rozbiegówkę'( nawiasem... świetna polska nazwa) w assemblerze i o 'startup' w 'C'. sam'a tylko na płaskich przerwaniach znam( bez priorytetów przerwań). Czy procesor wchodzi w to przerwanie? tu inicjalizacja...
U Ciebie nic nie dzieje sie w przerwaniu - gdy tylko do niego dojdzie to program automatycznie z niego wyskakuje przez RETI. W przerwaniu powinienes umiescic zlicznie do 8 a nie gdzies indziej. Gdy zliczysz to wtedy przesuwasz bity na swoim porcie, zerujesz swoj licznik i kreci sie wszystko od nowa. BF na szybko (ni to C, ni to assembler ale idea:)...
Siędzę nad tym raczej nietrudnym programem już trochę...piszę go w C i niezamierzam przechodzić w trkacie na Assembler, zwłaszcza, że znam go za słabo. Macie może jeszcze jakieś pomysły jaki diabeł w nim siedzi? Znalazłem w ksiażce program, w którym zawartość Timera0 jest wyświetlana jako 16 bitów (na 16 diodach) i nie ma w tym żadnej filozofii!! LEDS=~TL0;...
kolego dzięki do assembler mam książkę więc o nim zapomnijmy to ma być prosty kod w BASCOMie może sterowanie L297 będzie latwiej P3.2 INT0 (external interrupt 0) P3.3 INT1 (external interrupt 1) P3.4 T0 (timer 0 external input) P3.5 T1 (timer 1 external input) jak widzisz ma cztery timery tylko co mi daje większa ilość ja potrzebuję zaliczać impulsy...
Powoli myślę nad Atmega64 ponieważ cały czas kręcę się w okolicach 95% pamięci Flash. Czy na pewno nie ma innego sposobu? Sposób jest bardzo prosty ... zmień język na C lub assembler. W drugiej kolejności zastanów się nad zewnętrznym flashem, bo jak sądzę tę pamięć zajmują Ci próbki dźwięków, a nie program. Przerwania zarezerwowane. Timery i ADC także?...
... zrobiłem to celowo by kod był możliwie najkrótszy choć tak naprawdę można byłoby go jeszcze skrócić pisząc w asm bo kompilator dodaje prolog i epilog ISR...robiw Nie trzeba assemblera - wystarczy ISR_NAKED: http://www.nongnu.org/avr-libc/user-manu...
Jak wykryjesz wciśnięcie przycisku to uruchom timer w trybie zliczania taktów zegara. Po wykryciu puszczenia zatrzymaj timer i sprawdź do ilu doliczył na tej podstawie wyliczysz czas. A dalej to już chyba wiadomo. To tak w telegraficznym skrócie.
Absolutnie nie mam pojęcia co chcesz zrobić. Program który wstawiłeś jest kiepski: 1) Nie baw się w takie skomplikowane ładowanie danych ldi r17, 1<<CS02 out TCCR0, r17 in r16, TIMSK //tryb normalny sbr r16, 1<<TOIE0 out TIMSK, r16 //przerwanie od przepełnienia Tylko zrób to na brutala, bo tutaj niczym to nie grozi: ldi r16, (1<<TOIE0)...
Co do łatwości programowania to trochę powątpiewam, Attiny z tej serii to nie Arduino i gotowe biblioteki, podobno ciężko poddają się językowi C i trzeba dobierać się do nich w Assemblerze, ale z pewnością się da :) Piotrze, w języku AVR C spokojnie można zaprogramować każde Attiny, tutaj mamy banalną funkcję, można więc użyć instrukcji odwracania...
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...
Moim zdaniem za użyciem RTOS przemawia po prostu lenistwo, zresztą podobnie jak za 99% praktyk programistycznych. Bardzo merytoryczny argument. W zasadzie większość Twojego postu można niestety streścić tak - "jestem mega mistrzem programowania, każdy kto robi coś inaczej niż ja jest niedouczonym leniem"... Praktycznie nie ma tam żadnego merytorycznego...
Dzieki wielkie, ale kurcze gdzie mam wstawic wszystkie z ustawien i konfiguracji mojego ukladziku? gdzie np wlozyc konfiguracje timera, jak w C wyglada funkcja XRL... Ale dziekuje za czas mi poswiecony!
Dzięki. Właśnie brakowało mi takiej dokumentacji. Może jest gdzieś reference do assemblera dla tego procesora. W Arduino można pisać wprost w C++ a też wstawiać wstawki assemblerowe, przynajmniej dla AVR, ale nie znam mnemoników dla tego procesora. Programowania timerów to nie jest bardzo skomplikowana sprawa i lepiej to zrobić wprost z assemblera,...
Hi Dzieki za komentarze poszedlem w druga strone i teraz instaluje zgodnie z http://vsdev.me/notes/setting_up_arm_gcc... Aha przywrocilem jeszcze z orginalnych przykladow static inline cpu_t get_cpsr(void) { cpu_t val; asm volatile ("mrs %[val], cpsr\n":[val]"=r"(val):); return val; } static inline void set_cpsr(cpu_t val) { asm volatile ("msr...
Uruchomiłem (z diodami :]) ale problem podstawowy to drgania styków po prostu jak wcisne raz np. 5 to mam cały wyświetlacz w piątkach. Czytałem że można zrobić opóźnienie i jeszcze raz sprawdzić. Faktycznie asembler obługuje rozkaz CALL i mogę go używać w RIDE-7 tam zanalazłem że jest MA51 assembler chociaż M to może oznacza że to makroasembler. ale...
Wydaje mi się to wszystko poprawne (Do tego timer zawsze przebija się przez pętle waitForConversion więc coś tam musi liczyć) ale zmieniłem jeszcze referencje na napięcie odniesienia = nap. zasilania ldi R16, (1<<REFS0)|(1<<ADLAR)|(1<... out ADMUX, R16 efekt ten sam ADCH = 0 na do dowolne napięcie 0 - 5v na nogę PC3 ;---------------------------------------...
Tak jak pisałem - Twój startup załatwia manipulacje stosem, więc w takiej sytuacji atrybut dla funkcji jest zbędny, a wręcz błędny. Jeśli masz debugger, to przecież możesz sobie sprawdzić czy w ogóle wchodzi do przerwania oraz czy wchodzi do tego assemblerowego wrappera który jest pod etykietą "VIC". Profilaktycznie włącz sobie też ręcznie przerwania...
W BASCOMIE się nie da ze względu na precyzyjne czasy wyświetlania jednej linii sygnału. Świetnie nadaje się do tego Assembler gdzie kontroluje się każdy takt procesora. I tu bez obrazy widać jak kiepskie masz pojęcie o programowaniu.. Da się to i wieke innych cięższych rzeczy! Generalnie jeżeli realizujesz opóźnienia na timerach to co kogo interesuje...
Tak czy inaczej mało to wygodne. Potrzebuję jeszcze jakiś ładnych przykładów w asm dla PIC18F z przerwaniami, timerami. I jeszcze nie mogę zrozumieć jednej rzeczy co to są te rejestry np LATA,LATB. Co to i po co?
Tak ponad rok temu zacząłem się bawić Nucleo, zasięgając rad u kolegi, który próbował jeszcze wcześniej. Ogólnie na STMy masz kilka możliwości pisania / środowisk. Ja standardowo zacząłem od migania ledem z assemblera, ogarnięcie środowiska do tego było przykre (pracuje na Linuxie) jest i było gcc, ale jakieś pliki trzeba było brać skądś tam itd itp....
Pamiętam, że kiedyś miałem spory problem w Keil'u z zasymulowaniem przerwnia od timera dla AT89C2051. Skończyło się na testach w układzie. Program był pisany w Assemblerze, ale dla symulatora nie powinno mieć to znaczenia. Nie twierdzę jednoznacznie, że symulator posiada błąd (mogło to być jakieś moje niedopatrzenie), ale de facto problem taki u mnie...
Zanotowałem bardzo dziwne dla mnie zachowanie Avr Studio. Otóż mam następujący program: [syntax=asm] .INCLUDE "m8def.inc" .cseg .org 0 rjmp Start .org OVF0addr rjmp ISR_TOV0 Start: ldi r17, high(RAMEND);utworzenie stosu out SPH, r17 ldi r17, low(RAMEND) out SPL, r17 ldi r16,1 ;konfiguracja timera out TCCR0, r16 out TIMSK, r16 ldi r16, 0xf0 ;wpisanie...
A to w takim razie odradzam w ogóle systemy multitaskowe (threadowe) typu windows. Sa zbyt niestabilne (timing) i nie pozwalaja w pelni kontrolowac sprzetu - nalepiej czysty DOS i assembler (bedzie szybciej i latwiej). Pozdrawiam. Zgadzam się z powyższym a do tego dokładam że konstrukcji windy zakłada że zdarzenia pochodzące od timerów kolejnowane...
Zacznijmy od tego, ze za pomoca for w C nie da sie uzyskac dokladnego odliczania czasu! Przeciez w zaleznosci od optymalizacji (-O) i wersji kompilatora roznice beda siegaly tysiecy procent. Raz bedziesz mial 10Hz, a innym razem 0,01 Hz. Jesli chcesz w miare dokladnie odmierzac czas to albo korzystasz z funkcji z delay.h, albo piszesz wstawke w assemblerze...
Pisze w assemblerze, i geneuje to na timerze w trybie CTC i z godnie ze wzorem do rejestru porównawczego wpisałem 5 (f=f_XTAL/(2*Prescaler*(X+1)) gdzie x to właśnie 5, a prescaler to 1)
W tym konkretnym przypadku szybsze wykonywanie się programu nie zależy od użytego narzędzia programowania (assembler lub język C) ale od jakości algorytmu/kodu (czyli umiejętności programisty). Generalnie ten sam algorytm zapisany symbolicznie trzeba by było zapisać w C i zapisać w assemblerze (wykorzystując zmienne rejestrowe, bezpośrednie odwołania...
Opóźnienia najlepiej realizować w postaci wstawek assemblerowych, bo wtedy możesz doliczyć się ile dana pętla pożera cykli. W C tego dokładnie nie zrobisz. Możesz sobie napisać funkcję, która będzie wykonywać pętlę for albo while wykonywała określoną ilość razy, ale jedynie metodą prób i błędów można dojść jakie faktycznie opóźnienie wykonuje. Możesz...
generalnie da się, Wszystkich szczegółów nie pamiętam, bo robiłem to kilka lat temu, a teraz dopiero odświeżam sobie gcc-avr. Moja odpowiedź będzie może trochę bałaganiarska, ale powinna wskazać drogę Azaliż: w skład pakietu avr-gcc wchodzi też assembler, nazywa się on tak: avr-as Łączenie assemblera z c wygląda mniej więcej tak: w makefile wpisuje...
Ja bym się nie pchał w 8051 bo to zacofane układy. Powstał w 1980 roku. To że dużo osób na nim pisze, nie znaczy że jest dobrym wyjściem. Polecam AVRy, i nie tiny, bo on nic nie ma, tylko od razu ATMega8. Pisanie, że assembler jest trudny, świadczy o jego nieznajomości. Jest to język którego rozumie sam układ, więc musi być najprostszy. Składnia prosta,...
Zgadza się, aby policzyć ile czasu zajmie wykonanie kodu potrzeba kodu maszynowego (napisałem to w pierwszym poście). Ja będę pisał w C i tylko zobaczę sobie na listing programu gdzie jest to przetłumaczone na assemblera i wprowadzę odpowiednią poprawkę (zmiana wartości timera) do kodu w c. Chce precyzyjnie odmierzać czas do próbkowania wejścia z modułu...
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...
Niestety assemblera nie trawię ale: w przykładzie powyżej) jest tam wpisane 62500 nigdzie tego nie widzę preskaler ustawiony na 64 a pisałeś w pierwszym poście że 1024 czas zliczania powinien trwać 1s a pisałeś że 16s. Więc może zdecyduj co faktycznie masz i czego oczekujesz.
Ustawienie kierunku wyjścia było tylko przy wyrzucania zbednych linijek usunąłem go ale już dopisałem, moze ktoś sprawdzić czy u niego działa taki prosty kod bo ja już zaczyna podejrzewać procek... . Jeżeli wrzucę LED_TOGGLE; w pętle while to na oscyloskopie widzę przebieg prostokątny więc pozostałe sprawy są OK nie wiem dlaczego nie działa to przewanie...
Witam, pisze program w assemblerze który pozwarciu INT0, będzie wykonywać określoną czynność(łączyć się z innym urządzeniem), Ale narazie utknąłem w martwym punkcie, napisałem program który po zwarciu INT0 wywołuje przerwanie które zapala diodę podpiętą do lini PC0 5 razy i gasi(zapalenie uzyskuje poprzez ustawienie PC0 w stan wysoki). Całość funkcjonuje...
Stary post ale , jest sposob aby przerwania od timera wystepowaly w rownych(co do jednego cylku) z gory okreslonych odstepach. Przy kwarcu 12MHz aby odmierzac rowne czasy np 20ms wystarczy na poczatku przerwania wpiac taka procedurke ktora modyfikuje odpowienido rejestry TL0 i TH0 i uwzglednia opoznienie czasowe. t0VAL equ 20000 ; czas miedzy przerwaniami...
89S8252 to "zwykly" 8051 tyle tylko ze ma 8kB flash'a, programowany przez ISP, i ma 3 timery... Tak, prog napisany na 89c51 bedzie na nim chodzil, spieszy mi sie bo jutro musze zaprezentowac promotorowi dzialanie mojej pracy dyplomowej (programator ISP + stanowisko testowe do nauki programowania mikrokontrolerow serii mcs-51). Wszystko dziala ty lko...
To nie jest element języka C. Język C nie oferuje żadnych funkcji odmierzających czas. Ogólnie sam C się do tego kiepsko nadaje. Trzeba zejść do "sprzętu". Metody są 2. Odliczanie ticków - kiepska metoda, mało dokładna oraz raczej koniecznie trzeba wykorzystać assembler, albo policzyć ile tików trwają operacje które kompilator wypluje (czyli itak assmeblera...
Witam! Zbudowałem prosty układ i chciałbym na nim nauczyć się dobrze obsługiwać i synchronizować przerwania. Jego głównym założeniem będzie liczenie co jedną sekundę do 99 na dwóch wyświetlaczach siedmiosegmentowych(obsługa "multipleksacją") z dodatkowymi opcjami(odebrać coś z komputera itp). Pisałem w C a z assemblerem dopiero zaczynam dlatego proszę...
atmega timer assembler timer counter assembler assembler darmowy assembler
upływność przewód gorący przewód irfz44 zamiennik
opalarka elektryczna tinysa ultra
Schemat zasilacza Hormann ProMatic 4: diagnostyka i naprawa Wymiana tonera zamiennika w Xerox WorkCentre 6605: chip i aktywacja