Witajcie moi drodzy W tym temacie poznamy podstawy przerwań i timerów w PIC18F2550 . Na początek będzie krótki wstęp teoretyczny, a potem wszystko przerobimy dokładnie na praktycznych przykładach. Do lektury tematu przyda się ogólna wiedza na temat przerwań i programowania w C, choćby taka z Arduino. Temat oczywiście nie zastąpi w pełni czytania noty...
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...
Zbadałem systematycznie swój problem i okazało się, że przyczyną było włączenie przerwań ("sei"). Jeśli przerwań nie ma, to wszystko działa jak powinno, natomiast po ich włączeniu obserwuję kilkunastokrotne spowolnienie procesora. To jest prawdziwe spowolnienie, a nie tylko timera - pętla assemblerowa o znanej długości wykonuje się o wiele za wolno....
Chciałbym na timerze0 zrealizować ciągły odczyt czterech niezależnych liczników w trybie obsługi przerwań za pomoca kanałow porównująch, MR0, MR1, MR2, MR3. Timer1 jest zajęty. Czasy to 100 msec, 60 sekund , 100 sekund oraz dowolny inny. tick dla timera0 wybrałem na 1 msec. Licznik działa poprawnie bez włączenia przerwań od timera0, liczy te 1000 Hz....
Ja osobiście jak narazie pisze w Bascomie. W Bascomie wygląda to tak: Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1 ' Konfiguracja Timera1 dla Pwm1a i Pwm1b Config Timer2 = Pwm , Async = Off , Pwm = On , Compare Pwm = Clear Down , Prescale = 1 ' Konfiguracja Timera2 dla Ocr2 Config Pinb.3 = Output...
Witam Nie mogę wrzucić szkicu z biblioteką TimerOne. Arduino Nano Arduino Uno Oba klony Inne szkice wgrywają się. Działają Tu wywal mi takie błędy Arduino:1.8.7 (Windows 7), Płytka:"Arduino/Genuino Uno" C:\Program Files\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files\Arduino\hardware -tools C:\Program Files\Arduino\tools-builder...
Ostatecznie zrób wstawkę w ASM. Wklej tutaj swój kod z przerwania, może da się go przyśpieszyć. Wiem że procek za czym skoczy do podprogramu przerwania robi jeszcze dużo rzeczy poza moimi plecami, ale w moim przypadku jest to pożądane - mój zegar przecież śpieszy . Tak więc robienie wstawek asembler-owych i próbowanie na siłę zbliżyć się do teoretycznej...
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...
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...
Wybaczcie moje marudzenie ale takie makro wymaga co najmniej dodatkowych dwóch "difajnów". Proponowane "ułatwienie" spowodowało że musimy zamiast 11 znaków wklikać 50 i na dodatek w czasie analizowania skakać po dokumencie aby zobaczyć co oznacza makro a później co oznaczają poszczególne definicje z makra. Wszystko zalezy, z jakiego edytora korzystasz,...
Obsługa przerwania zajmuje z 70 cykli (odłożenie rejestrów na stos i zdjęcie ich ze stosu). Do tego z 10 cykli na wpisanie wartości do Timera i z 10 na ztogglowanie pinu. Razem 80 cykli. 8000000Hz / 80 = 100kHz. Jako że dajesz Toggle to będziesz miał dwukrotnie mniejszą częstotliwość. Czyli max uzyskasz 50kHz. Skoro masz 32kHz to pewnie przez to że...
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...
Mam małą prośbę do Was :) Może ktoś wytłumaczyć co gdzie i dlaczego się odwołuje ? Chodzi o to by wytłumaczyć mi jak te programy działają bym mógł je sobie edytować.... ZEGAREK LJMP START1 ORG 0BH LJMP PRZERWANIE ORG 1BH LJMP PRZERWANIE_2 ORG 100H START1: MOV TMOD,#17 MOV TH0,#76 MOV TL0,#0 MOV TH1,#76 MOV TL1,#0 MOV IP,#2 MOV R5,#20 MOV R4,#20 MOV...
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...
Odniosę się tylko do nadajnika, bo mam wrażenie, że autor wątku w tej chwili właśnie nadajnik próbuje wykonać. Nadajnik możesz to zrobić w oparciu o timer, na którym ustawisz sobie określony zegar - np. te porządane 250 kHz. Być może musisz ustawić 500kHz - aby wyłapywać nie tylko czas cyklu, ale i jego zbocze narastające i opadające. Potem budujesz...
Myslalem ze jak konwertuje sie asemblera na C to nie trzeba znac tresci ale juz mowie:) Jest to generator sygnalu prostokatnego zrobiony na procesorze C8051F020 Silicon Laboratories. Przebieg jest "uwidoczniony" poprzez migajaca diode (czestotliwosc jej migania jest ustawiana poprzez bajty TL2 i TH2 timera2 przez wpisanie do niech odpowiednich wartosci)....
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.
'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...
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...
Polecam książeczkę Pana Jacka Bogusz jest kapitalna programowanie mikrokontrolerów 8051 w języku C, natomiast jeśli byś chciał w Bascomie to nieocenioną pomoca jest pozycja Marcina Wiązania, natomiast w asemblerze Paweł Gałka. Życzę miłej lektury. Najłatwiej nauczyć się według mnie Bascoma poźniej assemblera i chyba najtrudniej jest pisać w C. Dla mnie...
; 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...
Tylko assembler. Co akurat ułatwia przerobienie tego na C.
A możesz z tego zrobić assembler? Tam będzie jasno widać co się dzieje.
- 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...
Przepraszam, że tak późno ale wcześniej nie miałem możliwości tego wstawić. Logi z kompilacji po "clean" 21:09:55 **** Rebuild of configuration Debug for project test_timera_v5 **** Info: Internal Builder is used for build arm-atollic-eabi-gcc -c ..\src\system_stm32f0xx.c -mthumb -mcpu=cortex-m0 -std=gnu11 -DSTM32F030xC -DHSI48_VALUE=((uint32_t)48000000)...
pisze program w assemblerze i nie moge skonfigurawac timera0 do pracy w trybie CTC robie tak: -mam w wektorze przerwan instrukcje skoku do procedury -mam dzialajaca procedure -ustawiam stos -ustawiam wartosc TCNT0 -ustawiam wartosc OCR0 -wpisuje do TCCR0 wartosc 0x0D ( ctc + prescaler 1024) -ustawiam TIMSK na 0x02 -odblokowuje przerwania poleceniem...
chodzi o makefile? Dodano po 2 # # # ########################################... # # On command line: # # make all = Create project # # make clean = Clean project files. # # To rebuild project do "make clean" and "make all". # ########################################...
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...
Doprawdy? A wyswietlanie multipleksowe chcesz zrealizowac jako wywolanie funkcji w main? Co do sei to na pewno nie trwa 2000us, sei i cli to pojedyncze instrukcje assemblera, ktore zajmuja 1 takt procesora, czyli w twoim przypadku 250ns. Mozesz zdefiniowac ISR jako nieblokujace (zobacz w helpie jakie ma opcje) i po klopocie. No i koniecznie zmien timer...
Racja. Już dawno nie pisałem w assemblerze. Zastosowałem etykiety do skoków, a później wywołałem funkcje i działa (funkcja zabawa diodami). Przy obsłudze przerwania będę odkładał rejestr SREG na stos. Poniżej poprawiony listing programu. .include "m8def.inc" ;wektory przerwan .org $000 rjmp reset ;***************************************...
Przykład w Assemblerze MASM32, ale to WinAPI, więc powinieneś dać radę bez problemu przetłumaczyć na jaki chcesz język. Procedura licznika: TimerProc proc hWnd : DWORD, uMsg : DWORD, idEvent : DWORD, dwTime: DWORD ;kod który ma być wykonywany ret TimerProc EndP Start licznika: invoke SetTimer,hWin,1,10,TimerProc Stop licznika: invoke...
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...
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 na układzie LPC1343. W pliku jest wszystko co niezbędne - skrypty linkera i startup (zapomniałem o hex-ie). Wrzuciłbym wcześniej ten plik...
Zacznij od przerwania timera.
Prosiłbym o pomoc w rozumieniu tego programu ponieważ chce wiedzieć jak to działa i również chodzi o sprawdzenie tego programu bo w jednym programie do symulacj pokazuje brak instrukcji a w drugim błąd w linii Tim0. Z góry dzięki [syntax=asm]T0_G EQU 0 T0_C EQU 0 T0_M EQU 1 TIM0 EQU T0_M+T0_C*4+T0_G*8 T1_G EQU 0 T1_C EQU 0 T1_M EQU 1 TIM1 EQU T1_M+T1_C*4+T1_G*8...
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ć.
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?
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....
temat rozwiązałemprzy pomocy kolegi Dr_DEAD ,zastosowałem Timer1 do zliczania impulsów i wszystko chodzi jak nalezy, sprawdzałem do 1000obr, więc dzięki wszystkim za pomoc B.
Another solution is to still implement the ISR in C language but take over the compiler's job of generating the prologue and epilogue. This can be done using the ISR_NAKED attribute to the ISR() macro. Note that the compiler does not generate anything as prologue or epilogue, so the final reti() must be provided by the actual implementation. SREG must...
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. Nie widzisz bo jest napisane 3036, później wpisałem 62500. Preskaler w przykładzie...
Napisałem program umożliwiający odbieranie (aż do znaku stopu 0Dh) a następnie wysyłanie wszystkiego co odebrałem za pomocą portu szeregowego. Chciałbym jednak aby ktoś rzucił na to okiem i powiedział czy można coś dopracować albo czy nie ma jakichś drastycznych błędów. Zaznaczam, że symulacja programu dała satysfakcjonujące wyniki. Oto kod programu:...
Cześć, chciałbym spytać się o zadanie na 8051 przy wykorzystaniu symulatora EdSim. Polecenie to generacja przebiegu PWM o okresie 14 ms i współczynniku wypełnienia 24% w trybie przerwania. Program jaki skleciłem prezentuje się następująco przy ustawieniu 60Mhz. Nie umiem niczego lepszego znaleźć a zdaje sobie sprawę że poniższy program, pomimo że generuje...
Przykładowy pełny program poniżej. Kompiluj najlepiej w CodeVisionAVR, nie będzie niespodzianek. Program można znaleźć pod adresem zawartym w ramce (wersja free). Dołączam też pliki .C .cof .hex .map i dla dociekliwych .asm i .lst Pozdr tOMmy /***************************************... This program was produced by the CodeWizardAVR V1.23.8a Standard...
RTC (SOP 20) + kondensator filtrujący to nie 10 elementów, każdy ma swoje zdanie. Jeżeli jednak oprócz tego odliczania czasu jako zegar procek ma robić coś jeszcze równie absorbującego np. przekazywać przez RS, streować jakąś matrycą itp. to RTC jest jak najbardziej pożądanym. Po drugie Samuraj: jeżeli chcemy mieć pełną kontolę nad liczbą cykli maszynowych...
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...
Witam. Napisalem w assemblerze program do generowania przebiegu, w symulatorze AVRstudio wszystko dziala ale jak zgram program do procka to dioda nie miga. Dioda podlaczona jest dobrze jak dam recznie 0 na wyjscie OC1A to sie swieci. Czy moglby ktos powiedziec czy program jest dobry. Dzieki z gory za odpowiedzi. Oto programik: .include "m8def.inc" .org...
zrobilem schemat zegarka na lcd alfanumerycznym 24x2 na attiny2313 i nie dziala schemat i program sciagnelem z tej strony: na tej stronie uzyty jes at90s2313 ja uzylem attin2313 i lcd 16x2 a ja uzylem 24x2. nie zmienialem kodu a compliwoalem w avr studio. Progamuje przez stk200/300. tutaj jest kod ;***************************************...
Chodzi mi o to drugie. napisałem taki program z dwoma nie zależnymi pwm ale nie wiem dlaczego przebieg OC1A da się tylko zmniejszyć wypełnienie a nie da się zwiększyć. oto program: .include "m8def.inc" .macro load16 ldi r16,high((at)1) out (at)0+1,r16 ldi r16,low((at)1) out (at)0,r16 .endm .equ res=30 ;rozdzielczość .cseg .org 0x0000 ldir20, 15 ldi...
Ten kompilator działa wrednie bo w zależności od jego opcji które ustawia się poprzez menu można zrobic tak ze liczba INT będzie CHAR i to w cale nie jest żart służę przykłądami jakby co :) O tym co kolega ma w opcjach niestety nic nie wspomina. Assembler w tym względzie jest jednoznaczny i prosty. A takl na marginesie my sie tu produkujemy a autor...
Witam, w ATtiny26 mam problem z właściwą inicjalizacją Timer/Counter1, tak aby na wyprowadzeniu PB3 (OC1B) pojawiła się fala prostokątna o zadanej programowo częstotliwości. Zaprogramowałem procka takim kodem: ... ldi R16,0x80 rcall TC1Init ... ;* ;TIMER/COUNTER 1 init * TC1Init: push R16 sbi DDRB,3 cbi PORTB,3 ;na wszelki wypadek ldi R16,(1<<CS10)|(1<<CS11)|(1&l...
Tu: TIMSK |= _BV(TOIE0); włączasz przerwanie. Tylko gdzie to przerwanie niby jest? Nie ma przerwania, więc wektor będzie wskazywał na "uniwersalny łapacz nieistniejących przerwań", który resetuje układ. Pozatym TCCR0=0x03; //pres TCCR0|=_BV(WGM00); TCCR0|=_BV(WGM01); //Fast PWM TCCR0|=_BV(COM01); TCCR0&=~_BV(COM00); //Fast...
Czytam dokumentacje SDCC i jest tam napisane jak wywoływać procedury napisane w assemblerze z poziomu języka C. Niestety nie mogę sobie z tym poradzić :/ Mam przykładowo taką prostą funkcję napisaną w assemblerze: .globl _asm_func _asm_func: MOV C,P1.1 CPL C MOV P1.3,C RET i powiedzmy, że chciałbym ją użyć w programie napisanym w C: #include <at89s8252.h>...
Ok, moje błędy, niemniej wcale mi to nie pomogło, mówię, widzę brak inkrementacji z IDE Simulator po prostu. A to dziwne, bo sobie wkleiłem twój kod, wywaliłem to cli/sei z przerwania i wszystko działa ok. Co znaczy, że nie widzisz brak inkrementacji? U mnie wchodząc w przerwanie TCNT0 jest równy 8, potem 12 i 15, bo tak jest kompilowana obsługa przerwania....
Przepisał bym Ci to do assemblera to by działało z 5 razy szybciej. Ale najpierw musisz uruchomić przerwanie (żeby program do niego skakał). Ja nie widzę błędu w kodzie i powiedział bym że powinno działać (przerwanie).
Odpowiem na własne pytanie zamieszczając cytat z avrfreaks forum. Autor: clawson. "This is dependent on your C compiler. In the case of GCC there is some "hidden" assembler: Code: 0x0000 JMP reset 0x0001 .. interrupt vector table 0x00NN 0x00NN+1 reset: clear register R1 0x00NN+2 clear SREG (including I) 0x00NN+3 set stack pointer 0x00NN+4 if .data vars...
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.
Widzę, że coraz bardziej zbliżamy się do assemblera. W bascomie da się wyłączyć generowanie odkładania i pobierania ze stosu rejestrów w czasie ubsługi przerwania: On timer1 nazwa_suba NOSAVE Ale wtedy to asm w obsłudze przerwania obowiązkowy (bo kto odkryje, które rejestry zmienia Bascom). Ewentualnie można zdekompilować prog sprawdzić i potem dopisać....
Jeśli już cyfrowo to żaden 8051 bo to jest kontroler na którym można zrobić sobie timer ,zegar czy zterowanie do efektów z przyciskami i wyświetlaczem.Do samych efektów tylko procesory sygnałowe.są nawet specjalizowane ,np. AL3201 ,link nie działa ,może czasowo?Załączam notę z tego powodu.
Kiedys cos takiego napisalem. Jezeli chcesz to przesle Ci zegarek napisany w assemblerze na 8051 na system DSM. Godzina wyswietlana jest na wyswietlaczu siedmiosegmentowym. Jak cos to daj znac. Pozdro
Siema. Mam do napisania projekt (dsm) assembler " miernik refleksu , wykorzystać układ wewnętrzny timera ". Jak ktoś wie proszę pisać. Dzięki. Zamykam. - arnoldziq
Dzięki Zbych jeszcze jedno chodzi mi o wzór z książki Gałków dotyczący wartości wpisywanej do licznika przy transmisji. Korzystając z 517 nie musisz używac timerów do taktowania transmisji szeregowej. Możesz użyć specjalnie do tego celu stworzonego układu taktującego. Wzór, który podałem dotyczny właśnie tego układu. tymczasem dla 18..M nie wychodzi...
Książka Jarosława Dolińskiego "Mikrokontrolery AVR w praktyce". Nie jest to co prawda kurs "krok po kroku", ale jest opisana każde polecenie assemblera dla AVR (głównie dla '2313) razem z przykładem jego użycia. Jest też opisana cała struktura mikrokontrolera, nierzadko poparta przykładami użycia poleceń w ASM (timery, watchdog i te sprawy...). Ja mój...
Co do tego przerwania w assemblerze to masz tylko czesciowo racje. Brakuje jeszcze paru ustawien. :)
dzieki, czegos sie nauczylem, program jednak dalej nie dziala :/ oto on: ORG 000H LJMP START ;IDZ DO START ORG 000BH ;PRZERWANIE OD T0 LJMP PRZERW_T0 ORG 0013H ;PRZERWANIE OD INT1 LJMP PRZERW_INT1 ORG 001BH ;PRZERWANIE OD T1 LJMP PRZERW_T1 ORG 003BH ;PRZERWANIE OD INT0 LJMP PRZERW_INT0 START: LICZNIK EQU 0 LICZNIK_JEDEN EQU 0 LICZNIK_IMPULSOW EQU...
Mam pytanie czy ma ktoś pomysł jak najefektywniej przetworzyć bajt odebrany łączem szeregowym. Problem polega na tym że podzielony on jest na 3 człony: -pierwsze dwa bity odpowiadają funkcjom jakie ma mikrokontroler wykonać: 00 - wysyłka danychz z bufora SBUF, 01 - ustawienie portów, 10 wyslanie wlasnego adresu, 11 - blad - kolejne 3 bity: wyznaczają...
przyczyna nie jest jednak taka banalna. Skoro tylko TCNT1 to dlaczego działa while(TCNT1L<100)? Wydaje mi się że to trochę dziwne, nieprawdaż? i jednocześnie przeczy w 99% tej teorii :). Poza tym w assemblerze do wyzerowania w nocie katalogowej jest program gdzie najpierw załadowane zostaje zero do TCNT1L a potem TCNT1H (lub odwrotnie)... więc coś...
Witam Jestem początkujący jeśli chodzi o programy w assemblerze i potrzebuje pomocy. Mam do napisania program następującej treści: Przygotowac program, który wykonuje nastepujace funkcje: a - generuje co 1 s impuls, a liczbe impulsów zlicza i wyswietla - w postaci binarnej na diodach LED w porcie P1, - lub/i w postaci dziesietnej na wyswietlaczu LCD,...
Trochę zmieniłem końcówkę programu: TIMER0: MOV TH0, #TH0_SET CJNE R0, #1, NO1 ;WYSWIETLENIE 1 LICZBY INC R0 SETB P4.0 MOV P1, #00111111B CLR P4.1 RETI NO1: CJNE R0, #2, NO2 ;WYSWIETLENIE 2 LICZBY INC R0 SETB P4.1 MOV P1, #01101101B CLR P4.2 RETI NO2: CJNE R0, #3, NO3 ;WYSWIETLENIE 3 LICZBY INC R0 SETB P4.2 MOV P1, #00000110B CLR P4.3 RETI...
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:)...
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 ( ) i oba są dosc fajnymi srodowiskami zarówno do pisania jak i testowania kodu. W szczególności, że mozna...
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...
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;...
Powiem szczerze, że nie do końca rozumiem o czym mowa.... Jeśli ktoś ma juz gotowe (sprawdzone przez siebie) implementacje obsługi i2c, ADC, timerów, SPI i czego tam dusza zapragnie, to połączenie tego w gotowy program nie potrwa znowu tak długo, a pewność optymalizacji kodu jest dużo większa niż przy jakimkolwiek kompilatorze C/C++ etc. Podejrzewam,...
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...
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
Pomyłka jest .org 49 więc nie powinno "włazić" na żaden wektor przerwania. Chyba właśnie doszedłem o co chodzi z tym przerwaniem... mianowicie o to że mam do czynienia z przerwaniem Timer0 COMP a nie Timer0 OVF które to znajduje sie pod adresem $028 ... i pod takim też działa poprawnie. Niech mnie ktos teraz oświeci czym różni się OVF od COMP ?
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"...
Witam czy mógłby ktoś sprawdzić poprawność kodu Assembler '51? Czy składnia jest ok? WDTCN DATA 0FFH ; WATCHDOG TIMER CONTROL AMX0CF DATA 0BAH ; ADC 0 MUX CONFIGURATION AMX0SL DATA 0BBH ; ADC 0 MUX CHANNEL SELECTION ADC0CN DATA 0E8H ; ADC 0 CONTROL ADC0H DATA 0BFH ; ADC 0 DATA - HIGH BYTE REF0CN DATA 0D1H ; VOLTAGE REFERENCE 0 CONTROL ADC0CF DATA 0BCH...
A poza tym to dlaczego 64615 to u Ciebie FC66h a nie FC67h? Nie pomyliłeś się czasem przy obliczeniach? Jak najbardziej moja pomyłka. Aby to zrobić zawsze musisz zapisać całą liczbę w systemie szesnastkowym ale nie rozumiem dlaczego uważasz ten sposób za zły Ja uważam za dobry.Pisałem ze chodzi o profesora prowadzącego zajęcia. Jednak Twoje wyjaśnienie...
Ja zaś nie mam pojęcia co oznacza 0x4920 albo 0x1E02. Czemu 99% ludzi posługuje się takimi konstrukcjami? Po to w nowoczesnych kompilatorach i assemblerach mozna definiować stałe, żeby tego używać... Gdybyś stworzył coś takiego - o ile byłoby prościej... TIM3->CCMR2=TIM_CCMR2_OC4M_PWM2|TIM_CCMR... TIM3->CR1=TIM_CR1_ARPE|TIM_CR1_CMS_EDGE;...
Czym się różni artysta od rzemieślnika? W C pisze się programy, aby zarobić na życie, jak najszybciej, aby klient tylko zaakceptował. W asemblerze raczej trudno w tych czasach zarobić na życie, wszyscy chcą tanio a jakość ich mniej interesuje. p.s. Można napisać program kalkulatora w ASM, tylko po co? Co ma jakość produktu końcowego do użytego języka?...
Doskrobałem trochę kodu, program działa jeżeli w linii CJNE A,03h,LOOP zmienię 03h na np. #03h co da mi dokładnie taką wartość, a nie wartość rejestru (będzie skakać do etykiety CORRECT jeśli nacisnę '3' na klawiaturze. Może linijkaMOV R3,#32h nie jest poprawna? Z tego by to wynikało. Ponadto aktualnie mój timer może zliczyć coś około 13 sekund, pomyślałem...
Procesor jest "trochę" szybszy od człowieka a Ty nie uwzględniłeś drgań styków przycisku oraz nie czekasz na jego zwolnienie. Co program ma zrobić z pobraną daną z tablicy?Nie zdefiniowałeś przerwania 0x18. Najlepiej po nie używanych wektorach przerwań dac RETI.Po co przerwania z TIMERA? Dodano po 1 A oto kod działającego programu wybacz za brak komentarzy...
O RTOS'ie myślę już od dawna, ale wszystko po kolei - nie można przeskakiwać z przedszkola na uniwersytet. Nawet zresztą kiedyś (chyba w 2006 roku) przymierzałem się do RTOS'a na PIC18, ale coś mi wtedy nie wyszło i się trochę zniechęciłem. Przez długi czas programowałem w assemblerze i jego piętno wciąż się odciska - mam wciąż wrażenie, ze moje C,...
Czy można w jakiś sposób zrobić coś takiego, żeby po przyłożeniu np.: 3,3V do nóżki Atmegi można było sprawdzić, czy jest tam to 3,3V czy np 1V ? Można to jakoś programowo rozwiązać ? Na razie zrobiłem przerwanie timer'a, w którym można by było sprawdzać stan nóżki, tylko jak to zrobić ? W przypadku zwierania tej nogi do masy jest prosto (tak jak z...
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...
Mam takie pytanie. Otóż używam programu emu 8086 version 4.03 w "examples"/"more examples"/ mamy "robot.asm" I teraz mamy zaprogramować robota. Na razie na pustej planszy bez lamp. Aby chodził w okół całej planszy czyli po kwadracie. Oraz po przekątnej. Ma ktoś jakieś pomysły jak to zrobić? Ponoć trzeba wykorzystać pętle. Wrzucam oryginalny kod programu:...
No tak, ale wtedy otrzymasz wygenerowany przez kompilator zupełnie inny kod assemblera, stąd program jak i symulacja nie będą odpowiadać wersji końcowej.
Witam, potrzebuje zrealizować opóźnienie 5ms w programie na uK 8051. Potrzebuje to do obsługi wyświetlacza 7 segmentowego 4 pozycyjnego. uK taktuje 12 MHz, więc czas cyklu maszynowego = 1 us. Znalazłem metodę, że można byłoby wpisać np. do timera T0 wartość: 65535 + 1 - (opóźnienie,czyli 5000 us). Wtedy wartosc początkową wpisałbym do timera = 60536...
Ok ale czy zmiana stanu na IO zabiera aż 20 cykli? poza zmianą stanu nic innego się tam nie dzieje ;] funkcja zmiany stanu na wyprowadzeniu: [syntax=csharp] static __INLINE void GPIOSetValue( uint32_t portNum, uint32_t bitPosi, uint32_t bitVal ) { LPC_GPIO[portNum]->MASKED_ACCESS[(1&l... = (bitVal<<bitPosi); } [/syntax] oraz odczyt:...
(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 !
Może nie zignorowałem tylko programuję w Programmers Notepad stąd pewnych nieścisłości kompilator mi nie pokazuje:) co do kwestii: 1. Zamieściłem teraz u góry F_CPU 2. Załączaj tylko io.h? chodzi o to żeby załaczać jedynie ten plik zamiat include <avr/iom8.h>? 3. Nie za bardzo znam się na assemblerze ale dzięki za odpowiedz:) 4. Przy takim ustawianiu...
(at)yanan Sposób na timeouty jaki masz jest ok, jakbym miał się czegoś przyczepić to tego, jak odróżnisz odebranie 0xff od timeouta w twojej funkcji? Oczywiście najogólniej robienie odbioru danych z wolnych interfejsów typu UART za pomocą poolingu to porażka na całej linii. Zdecydowanie należałoby użyć przerwań interfejsu UART, co w połączeniu z timerem...
Witam, zmodyfikuj swój program: 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, itd. Potrzebne Ci będą jeszcze pewne dodatkowe zmienne...
Witam Widzę że rozpętałem burzę :) , ale wracając do meritum, czyli czy jest to najmniejszy generator! Mimo najszczerszych chęci nie znalazłem 555 w takiej obudowie o jakiej jest napisane w artykule, dla odmiany Attiny10 w tej o której piszę jest dostępny. Co do łatwości programowania to trochę powątpiewam, Attiny z tej serii to nie Arduino i gotowe...
Generujesz sobie na timerze przerwanie co sekundę i w obsłudze przerwania zwiększasz zmienną sekunda o i i sprawdzasz czy nie osiągnięto 60. Jeśli tak to zerujesz i wysyłasz do wyświetlacza.
Jeśli nad projektem pracuje kilka osób, to łatwiej (nie znaczy łatwo) będzie łączyć zmiany w tekście niż zmiany w graficznej reprezentacji. Mimo że ta graficzna reprezentacja pod spodem zapewne też jest zapisana w tekście, to łączenie tam zmian dwóch osób nie będzie intuicyjne -- chyba że autor oprogramowania dostarczyłby jakiś specjalny tool do tego...
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....
(at)Freddie Chopin czepiasz sie szczegolow, przeciez napisalem, ze linia w stylu if..else. Jakbym znal assemblera to nie pytalbym czy : -ustawienie licznika timera -ustawienie stanu wyjscia 1 ze sprawdzeniem warunku -ustawienie wyjscia 2 -ustawienie wyjscia 3 -ustawienie wyjscia 4 -sprawdzenie wejscia 1(zapisanie do zmiennej) zajmie wiecej niz 64 cykle...