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...
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...
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)...
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...
Witam Pierwsze linie kodu to deklaracja ustawień liczników T0 i T1. Konfiguracja dla ułatwienia została rozpisana na poszczególne bity, dlatego póżniej trzeba je przemnożyć x4 i x8 aby bity były na swoich miejscach. Dla licznika T0: CT0 EQU 0 M0 EQU 1 G0 EQU 0 T0S EQU M0 + 4*CT0 + 8*G0 oraz dla licznka T1: CT1 EQU 0 M1 EQU 0 G1 EQU 0 T1S EQU M1 + 4*CT1...
Jakie komendy obsługują timer i counter w procku 90s2313 pod Asemblerem?? Proszę o pomoc!
code at 000Bh ljmp timer mov TMOD, #00000001b mov TH0, #0EAh mov TL0, #60h setb TR0 setb ET0 timer: RETI Musi uruchomić timer 0.
myślę że to wszystko wyjaśni http://www.edw.com.pl/pdf/k09/29_08.pdf
Witam Brakuje dyrektyw "equ" :D . Pozdrawiam
nie powiem.. ciekawe :) to asembler czy jakieś instrukcje bascoma? może ma ktoś wątli w C pod AVR?
A ja znowu nie wyobrazam sobie tego abym muial angazowac program głowny który przewaznie słuzy w innym celu jak tylko pomiar temp. W przerwaniu to wychodzi elegancko a ilosc czujników jak moze byc obsłuzona jest dowolna. W programie głownym umieszczam tylko procedure odczytu uzyskanych wartosci z przerwan i ewentualne sprawdzenie CRC co zajmuje ułamiki...
Czy to gdzieś w manualu powinienem szukać czy może w kodzie asm? Zrobiłem tez taki test że w main'e miałem: [syntax=c]AT91F_PIO_SetOutput(AT91C_BASE... AT91C_PIO_PC6); AT91F_PIO_ClearOutput(AT91C_BASE_PIOC, AT91C_PIO_PC6); licznik++; if(nHzTicker) { printf(licznik); }[/syntax] sam Timer szedł 1000Hz. Licznik naliczał zaledwie do około 279900, podczas...
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...
Hmmm..Moze i myle asembler bo pisalem kilka prostych programow na 8051 ale wydaje mi sie ze trzeba obliczyc cos przeciez. Przeciez timer i jegoprescale, zlicza do ilus tam i jest przerwanie. Iles przerwan daje nam sek jak chcemy. Itd... Przynajmniej mi sie tak wydaje. Co do RTC to fajnie ze mozna ale jak to uruchomic w BASCOM`ie. No i jak z tym liczeniem...
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...
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...
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...
#include "msp430.h" ; #define controlled include file NAME main ; module name PUBLIC main ; make the main label vissible ; outside this module ORG 0FFFEh DC16 init ; set reset vector to 'init' label RSEG CSTACK ; pre-declaration of segment RSEG CODE ; place program in 'CODE' segment init: MOV #SFE(CSTACK), SP ; set up stack main:...
Witam wszystkich majsterkowiczów :D Oto mój jeden z pierwszy programów napisanych na ATMEGE 8. Dotychczas programowanie mikrokontrolerów traktowałem jako zabawę, używając do tego BASCOMA i zestawu Treningowego. Obecnie stoję przed zamiarem budowy pewnego urządzenia ale przed rozpoczęciem prac chciałbym mieć pewność że część programowa będzie ok. Sam...
Kiedyś zrobiłem coś takiego dla s1200, 2313 itp. Jak chcesz to sobie przerób. Program odmierza czas, a po jego upłynięciu zaczyna migać żarówką (np wyłącza ją na 1s, potem zapala na 10s i tak 3 razy), a na koniec gasi żarówkę. Program nie jest jakoś super napisany, ale z tego co pamiętam działał. Do asemblacji radziłbym użyć oryginalnego assemblera...
co napisaliscie jako swoj pierwszy program na dany uC w danym jezyku (rozbudowy sie licza, byle by wciaz byla to ta sama baza) n. n. - literka, cyferke z przodu dodam sam. zachowujcie chronologie w swoich dokonaniach na roznych platformach jezykowych i sprzetowych, tak aby to mialo sens! ____________________ 0x1-a. Freddie Chopin - migacz diodkami o...
Witam. Buduje sobie pseudo skaner dyskotekowy znalezion w EdW (wiem że tego nie można w stu procentach nazwać skanerem) i mam problem. Potrzebuje pomoc w napisaniu / przepisaniu programu z języka Asembler na C++. Program jest pobrany ze strony EdW, jednak nic z niego nie rozumiem i przystosowany jest do AT89C2051. Ma on być wrzucony na Atmege8. Pinologia...
jesli wystarczy ci 18,2*/s to napisz obsluge przerwania 1Ch. w necie znajdziesz wiele o tym ;)
Ok, SPL <> SPH... i podłącz AVcc, skoro uzywasz PORTC. Tak w ogóle to poczytaj notę katalogową (oczywiście nie staraj się zapamiętać wszystkiego, raczej gdzie co jest omówione), bez tego to jak bez mapy na nieznanej drodze...
Jak napisać program w asemblerze dla DDM-51, który po naciśnięciu przycisku góra powoduje maksymalne świecenie diody, po naciśnięciu dół minimalne świecenie diody, po naciśnięciu lewo powoduje zmniejszanie jasności diody za pomocą timerów, po naciśnięciu prawo zwiększa jasność świecenia diody za pomocą timerów. Z góry dziękuję
Zobacz jak to robi Microchip. Potrzebny jest ADC, Timer i kawałek pola miedzi. http://ww1.microchip.com/downloads/en/Ap...
Za pomocą bitów CSn2 CSn1 CSn0 możesz ustalić podział częstotliwości kwarcu przez 1,8,64,256,1024. Aby uzyskać dokłądnie sekundę musisz ustawić podział na 8 lub 64. Wtedy do timera musisz wpisać odpowiednio 65536-62500 lub 65536-15625 (do rejestrów TCNTnH starsze 8 bitów i TCNTnL młodsze osiem bitów). Przepełnienie jest sygnalizowane flagą ToVn którą...
Czesc ! Portu B nie musisz ustawiac , po starcie procesora wszystkie porty sa ustawione jako wejscia ponadto : movlw80h movwfTRISB ustawia Ci jako wejscie jedynie RB7, pozostale to wyjscia MOVLW 0 MOVWF TRISA teraz caly porta A ustawiles jako wyjscia, malo tego uzywajac timer 0 i podzielnika 1:256 pamietaj ze aby zwiekszyc jego stan o jeden...
Witam, każdy popularny procesor możesz oprogramować korzystając z innych języków niż asembler (np. C). Także większość posiada wewnętrzne pamięci, więc niczego nie musisz doklejać na zewnątrz, a jak konkretny procesor będzie jej miał za mało, to zawsze możesz wybrać większego brata z wybranej przez Ciebie rodziny. A wybór konkretnej kostki musisz uzależnić...
Wystarczy jeden timer. Okres decyduje o czestotliwosci a dlugosc trwania dzwieku zrealizujesz zliczajac w jakiejs zmiennej liczbe tych okresow. W 8051 sa tylko 2 timery wiec szkoda ich marnowac na cos co nie jest konieczne. Lub najprosciej: while(1){ PIN = !PIN; delay_us(1000); } Wyjdzie 1kHz. BF
Jeśli piszesz w WinAVR i otworzysz plik w asemblerze to zobaczysz, że każde nie używane przerwanie prowadzi do resetu. Nieużywane tzn. nie posiada funkcji obsługi przerwania. Przerwanie takie od np. przepełnienia timera może nastąpić jeśli zostanie odblokowane, ale jak mówisz w tym przypadku to nie to. Możesz po prostu wyłączyć watchdoga i upewnić się...
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...
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...
Dziekuje za pomoc musze sam popracować. Bez pracy nad asemblerem do niczego nie dojdę Pozdrawiam tych którzy pospieszyli z pomocą. Zamykam temat.
W instrukcji piszą(str. 34): "Consequently, the high byte OCR1AH must be written first for a full 16-bit register write operation. Najpierw H, potem L. A w programie jest: out OCR1AL,ZL out OCR1AH,ZH Najpierw L, potem H. Mogę się mylić. Sprawdź.
Mało danych. Chcesz, żeby dioda migała na przerwaniach? Czyli przerwanie włącza, następne wyłącza - tak to zrozumiałem. Co do obsługi T0 musisz zrobić obsługę przerwania od adresu 0x0BH (czyli wyzwalanie przez flagę TF0). Wstaw coś takiego po LJMP start na początku: [syntax=text]ORG 0Bh ; start przerwania CLR TF0 CPL P1.4 ; zmiana stanu wyjścia sterującego...
Z pakietu wchodzącego w skład DSM-51: ;***************************************... ;LEKCJA 13- STEROWNIK TRANSMISJI SZEREGOWEJ ;PRZYKŁAD 1- NADAWANIE ;***************************************... ;********* Ustawienie TIMERów ********* ;TIMER 0 T0_GEQU0;GATE T0_CEQU0;COUNTER/-TIMER T0_MEQU0;MODE (0..3) TIM0EQUT0_M+T0_C*4+T0_G*8 ;TIMER...
64 takty to o połowę krócej. :) W każdym razie, rzeczywiście obsługa tego przerwania w asemblerze powinna się spokojnie zmieścić poniżej 2us. Ewentualnie można jeszcze dodać bramkę AND sterowaną z drugiego timera i załatwić to sprzętowo.
Oto szkielet programu *** .dseg .include "2313def.inc" ; Jaki procesor ;.......................................... SEGMENT DANYCH W SRAM ; Twoje dane ;.......................................... SGMENT DANYCH W EEPROM .eseg .org $0000 ; Twoje dane w EEPROM ;..........................................
Prędkość transmisji przy SMOD=1 wyliczamy ze wzoru: Vtr=Fxtal/(192*(256-wartT1)). A wartość wpisywaną do T1 za wzoru: wartT1=256-(Fxtal/(192*Vtr)). W Twoim przypadku (Fxtal=12000000 i Vtr=300) do T1 należy wpisywać wartość 47, czyli: TH1_SET EQU 256-209 TL1_SET EQU 256-209 bo 256-209 to jest właśnie 47. Da Ci to prędkość transmisji 299.043 , co mieści...
To się mylisz, konflikt może być. Zapisz tego fora tak: [syntax=c] for(;;) { int tmp = TIM9->CNT; if((tmp> 5000) && (zapalona)) { GPIOD->ODR |= (1 << 15); // gasi LED zapalona = 0; } } } [/syntax] Co będzie, kiedy tmp będzie > 5000 (np. ==ARR), w międzyczasie przyjdzie przerwanie i wyzeruje timer oraz zapali diodę? Ew. zaglądnij...
Zgadzam się wykonanie kiepskie bo podczas lutowania z tego co pamiętam moja lutownica marki topex zepsuła się chyba w połowie wykonania więc musiałem sięgnąć po lutownice transformatorową którą na poważnie lutowałem pierwszy raz stąd te efekty pompy do betonu:D. Ta płytka to był mój pierwszy poważny projekt - jedyne co wcześniej lutowałem to ze dwa...
Dlaczego nie Timer ? Obsługa przerwania TIMER0_OVR w niczym nie przeszkadza w działaniu PWM, a mamy w ten sposób jakąś podstawę czasu, który można sobie odliczać w tym przerwaniu. Dokładność co do 3 miejsc po przecinku nie jest taka istotna przy dekodowaniu RC5... Co do kodu - to nie ma prawa tak działać, obsługa przerwania powinna być jak najkrótsza,...
Witam!!! Częśc programu która cie interesuje to: TEMPLOOP: MOV ADCMODE, #12H ; INITIATE A SINGLE AUX CONV JNB RDY1,$ ; Wait for conversion results ; conversion result ready ; a value of 80h in AD1H=0degC MOV A, ADC1H ; 80h=0, FFh=+127, 00h=-128 CLR C SUBB A, #80H ; convert to 2's comp ; FFh=-1, 80h=-128, 00h=0, 7Fh=+127 W akumulatorze pozostaje temperatura...
Można to zrobić w każdym języku i w którym dokładnie będzie zależało jedynie od tego, czy podstawy któregoś z języków opanowałaś. Najłatwiej bedzie zapewne w c ale i w asemblerze nie będzie to zbyt skomplikowane. Prostym rozwiązaniem będzie użycie timera do odmierzania czasu a w pętli głównej sprawdzanie wartości zmiennej incrementowanej przez ten timer...
Ja znalazłem u Atmela. Nota aplikacyjna AVR410 o ile dobrze pamiętam. Ale nie wiem czy to pójdzie na tiny15. Procedura opiera się na Timerach.
vector timer0 w atega8 jest pod adresem 0x0009 a nie 0x001C mysle ze to wlasnie to
czas co jaki zostanie zdeklementowany rejestr R0 banku 1 jest określony przez szybkość wykorzystanego kwarcu i ilości cykli wykonywanych przez timer, możesz na przykład uruchomić timer mają w nim zapisaną już jakąś wartość, symulatory nie oddają rzeczywistego czasu pracy mikrokontrolera, musisz dopasować wartość rozpoczęcia pracy timera eksperymentalnie
Witam Bardzo proszę o pomoc w stworzeniu programu będącego prostym zegarem w 8051. Program mam wykonać wykorzystując wewnętrzny timer tick, który zlicza mi sekundy, minuty, godziny (0-23). Prosze o pomoc. Nie wiem co i jak w związku z zaprogramowaniem tego timer'a. Chcialbym aby na przerwanie wywolane przez ten timer był wysyłany winik do wyswietlacza....
Generalnie port jest zatrzaskiem więc nie ma sensu się martwić czy dana informacja się zmieni czy nie do czasu kolejnego zapisu do portu :) To daje ci sytuację taką korzystną sytuację że nie musisz się martwić o to co rozbi procek w tym czasie. Pytanie jak bardzo zależy ci na dokładności odmierzenia czasu w przypadku zapalania diody na około 1s lub...
Witam, Strasznie skomplikowałeś ten układ... Wystarczyło dać rejestr np. 74164 i 4 tranzystory. Nasuwa się pytanie w jakim formacie dostajesz dane (w kodach ASCII?) i co ma się wyświetlać na tej matrycy ?
Trzeba by to napisać w asemblerze.
Błądzisz. 0. Dlaczego wybrałeś muzealny mikrokontroler, dla którego informacji trzeba szukać w skanowanych artykułach z gazet wydawanych w latach 80-tych i 90-tych zeszłego wieku? 1. Dlaczego nie chcesz korzystać z timera? To jest najlepszy i najpewniejszy sposób odmierzania czasu. 2. Czy program w którym potrzebujesz opóźnienie 5ms nie robi nic innego...
Wiem że pytanie to pojawiało się zapewne już nie raz. Chciałbym się dowiedzieć jak wygląda obsługa przerwania, timera w C. W asemblerze uaktywnialo się przerwanie np. org 000bh sjmp int_timT0 i pod etykietą int_timT0 umieszczaszało się kawalek programu ( co ma robic jak dojdzie do przerwania ). Jak to wygląda w C?. Druga sprawa w asemblerze wiedzialem...
I o to właśnie chodzi - 2 takty na bit, czyli 16 taktów na bajt, reszta funkcji wykonuje się porównywalną ilość czasu, w efekcie za 50% odpowiada samo SPI. Druga rzecz - kompilator ma pewną dowolność w tworzeniu kodu asemblerowego, a to znaczy, że nie jesteś w stanie dokładnie powiedzieć ile ten kod się wykonuje. Dokładniej - jesteś w stanie, ale tylko...
Zumek zaproponował nam prace timera w trybie CTC (Clear Timer on Compare match) - zerowanie licznika (i wywołanie przerwania OC1A) po wykryciu zgodności rejestru TCNTn z OCRn. Można w ten sposób "skrócić" timer do potrzebnej wielkości. Odpowiada to mniej więcej "skracaniu" zakresu liczenia timera przez wprowadzenie wartości początkowej tyle, że licznik...
Czy są jakieś znaczące róznice tak aby program napisany na 1284 nie chodzil na 644P? Np. M1284p ma 4 timery, a mniejsze siostry tylko 3 :D Wiąże się to więc, z 4 dodatkowymi źródłami przerwań i większym o 16 bajtów obszarem wektorów przerwań.
Witaj !!! Tak jak napisał kolega LightHouser, nop to rozkaz, który nie robi na prawdę nic ale zajmuje cykl rozkazowy. W standardowym procesorze '51, zastosowano preskaler przez 12. Znaczy to, że częstotliwość taktująca (kwarca) wstępnie jest dzielona przez 12. Jeżeli zastosujesz kwarc np:12MHz to naprawde rdzeń procesora będzie taktowany częstotliwością...
Przy takich odpowiedziach na moje 2 pytania, nie musisz używać timera tylko zrobić tak jak proponuje asembler lub filtr RC o którym wspomniałem na początku. Kondensator dobierzesz eksperymentalnie i będzie ok.
jeśli Wy macie problemy z tym to zostaje mi nauczyć się asemblera bądź tych timerów dzięki za wyjaśnienie
Kolega chyba odleciał w tym asemblerowym samouwielbieniu. Gdzie ty tam widzisz asembler?
To co w takim razie robie źle z tym timer'em?
A czy w BASCOMie komenda 'wait 1' przy dyrektywie $crystal=<fosc> nie załatwi wszystkiego ?? A jeśli chodzi o precyzyjne odmierzanie czasu to polecam asembler i obsługe timera w przerwaniu. To jest chyba najdokładniejszy sposób. Pozdrawiam.
Wiesz, mam książkę Baranowskiego 'ATmega w praktyce'. A to co było??? oczywiście mi pomylił się autor ale tytuł ten sam ;) więc ją masz Co do wydajności prądowej to chyba też dostałeś już odpowiedzi różne, albo drivery ULN albo zwykłe tranzystory żeby ją zwiększyć i po ptakach Żeby nie robić na jednej nodze jednej diody nawet przez te tranzystory to...
Witam! Mam problem z liczba stałoprzecinkowymi i 89S8252 Buduje manipulator i przy zadawaniu wartości np. 270 stopni z silnika otrzymam 432 impulsów. Około 1,6 impulsa na stopień z enkoderów. Jak teraz przy zadawaniu watrości w stopnich zapisywać w rejestrze ile impulsów ma odliczyć timer aby wyłączyć silnik?? Programuje w asemblerze Pozdrawiam
$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,...
Polecenie w skrócie brzmi: Napisz program w asemblerze i w C, który wczytuje z tablicy kolejne liczby (bajty) i wyświetla je na diodach bit po bicie. Po każdym kolejnym bicie należy odczekać 5ms, dodatkowo po każdym bajcie należy odczekać 50ms. Wykorzystać przerwania licznika (timera). W asemblerze już napisałem i działa, natomiast w C zdziwiło mnie...
(at)atom1477 Jeśli ja wygeneruje przerwanie co 1 ms, to muszę mieć potem możliwość coś zrobić, czyli w przerwaniu muszę chociaż zmienną inkrementować, albo zrobię toggle pin i połączenie z głównym MCU przez INT0 tak jak pisałem post wcześniej . Mam kwarc 20ppm i nie jest on wystarczająco stabilny, dlatego poszedłem na DS3231 i źródło timera od T1....
Ogólnie mam problem w jaki sposób to zrobić by potem przy większej ilości regulowanych prędkości i ilości diod program był przejrzysty. uC 8051, chciałbym by ktoś wytłumaczył mi z przykładowym programem działanie też tych timerów czy priorytetów przerwań.
Łańcuch z diod LED. Może podpowiecie, jak napisać taką wstawkę w asemblerze do przerwania od Timera. Zmienna globalna pwm jest porównywana ze zmienną licznik (zwiększana w przerwaniu). Jeżeli większa, to LATX HI else LATX LO. Zmienna globalna będzie normalnie widziana w stawce asemblerowej?
Skoro chcesz użyć ATTiny13 to raczej ogarnij asembler, bo w C++ i Arduino nic na tym procku nie zrobisz.
Jeżeli używasz winavr to masz tam przecież gotowe funkcje. Jak ich dokładność jest niewystarczająca polecam asemblera, lub ewentualnie timer.
Zapewne, dlatego też mądrzy ludzie dawno temu wymyśili w c delay.h. A że precyzyjne opóźnienia można zrobić albo na timerze albo w asemblerze, stąd też nie jest dziwne, że mimo, że to c to opóźnienia są napisane w assemblerze.
Asembler w dzisiejszych czasach ma niewiele sensu, były dwa powody stosowania asemblera, optymalizacja szybkości wykonywania kodu i objętości. Ja zaczynałem od asemblera na 8051, bo wszyscy tak robili, później jak pojawiły się AVR pisałem głównie w C czasami robiłem procedury obsługi przerwań w asemblerze. Wtedy uświadomiłem sobie że asemblera używałem...
Chciałbym dostać rady do rozwiązania pewnego zadania z asemblera: "Do izolowanego wejścia I1 podlaczonego do P3.4 doprowadzony zostal sygnal synchronizacji poziomej monitora SVGA (zakres częstotliwości 17 khz ... 70 Khz). Należy dokonać pomiaru częstotlowości sygnału i wyświetlić ją na wyświetlaczu". Wiem tylko, że trzeba użyć w zadaniu timery.
Biorąc pod uwagę postęp w konstrukcji kompilatorów, przy współczesnych mikrokontrolerach zmodyfikowałbym to zdanie do postaci: "Nie używaj wstawek w asemblerze, BO nie masz naprawdę dobrych powodów, by to robić." ;)
Policzyć ile cyklów zegarowych przypadnie na 1 sekundę i zrobić pętlę, która wykona właśnie tyle cykli. Można też zaprząc do tego timery, wtedy odliczanie można zrobić bardziej precyzyjnie.
A czy sam timer2 pracuje bo w tych procesorach należy przed inicjowaniem peryferii włączyć do nich zegar (dla timera TIM2 w rejestrze PCKENR1). Chyba że wykonuje to timer_init.
Witam :) Czy ktos programuje moze w asemblerze i moze podpowiedziec w jaki sposob obslugiwac przerwania od TMR0. Probowalem zrobic prosty timer (po zalaczeniu zasilania liczy sekundy) z wyswietlaczem LCD korzystajac z przerwan od timera. Niestety nigdy nie udalo mi sie osiagnac takiego efektu, ktory sobie zalozylem. Zmiana wartosci poczatkowych dla...
Pewien madry czlowiek powiedzial mi kiedys na wykladzie: "W assemblrze pisze się kody do 2kB, wszystko co powyzej powinno byc pisane w C".Powod jest prosty.Gdy program się rozwija latwiej nad nim zapanowac gdy piszesz w C.Dobre rozbicie na moduly oraz system automatycznej dokumentacji oszczedzaja sporo czasu podczas jakichkolwiek bugow w programie.Na...
Bardzo fajny mikroprocek SAMSUNGA - 6 8bitowych portów I/O - 8 kanalowy przetwornik A/C - port szeregowy - dwa 8-bitowe PWM - dwa 16bitowe timery/liczniki rdzen SAM8 CZY KTOS MA KOMPILATOR ASEMBLERA LUB C DLA TEGO PROCKA? Lub moze trochu info w czym to moge zaprogramowac.
Chyba za ogolnie zadales temat. Zechciej doprecyzowac jak wielkie opoznienie, jaki zegar, czy na przerwaniach czy tez programowo i w jakim jezyku. Na poczatek podpowiem, ze z punktu widzenia celu czyli opoznienia 8086 nie rozni sie od innych procesorow, stad robi sie to tak samo jak w 68k czy w ARM. W mikrokontrolerach masz dodatkowo sprzetowe timery,...
Kolego, nawet nie chce Ci się przepisać programu... Już Ci pisałem - poczytaj o PRZERWANIACH. Przerwanie nie polega na ciągłym testowaniu jednej czy dwóch flag, tylko na pozostawieniu tego procesorowi. Przykład kodu z użyciem przerwania: org 0 ; adres wektora resetu sjmp start org 0bh ; adres wektora T0 sjmp t0_isr t0_isr: inc A anl A, #7 jnz t0_skip_blink...
PIT (programmable interval timer) - tym ustawisz częstotliwość i odtworzysz na systemowym głośniczku. Można użyć syntetyzera FM w karcie audio.
Ja do tej pory programowałem tylko AVRy Atmela ale z tego co czytałem to PICe też mają rozbudowane Timery sprzętowe. Musisz wziąć notę katalogową w ręce - zaczytać dobrze o konfiguracji timerów i odrazu ci się rozjaśni. Jeśli chodzi o C to nie pomogę ci bo ja z kolei wszystko piszę w asemblerze. Aby użyć timera sprzętowego z procka nie potrzeba żadnego...
Najprawdopodobniej kompilator "nie widzi" zależności między użyciem zmiennej globalnej w przerwaniu i w pętli głównej i sobie to nazbyt optymalizuje. Możesz to prawdopodobnie wychwycić obserwując kod wynikowy w asemblerze. Rozwiązaniem może być zmiana stopnia optymalizacji kompilacji lub dodanie parametru "volatile" dla zmiennej globalnej.
trzeba zrobic petle, ale to nie bedzie dokladne. lepiej uzyc timera. 0x41 0x56 0x45!!
Kiedyś zrobiłem projekt odtwarzacza dzwonków z nokii na tiny26. Użyłem timera i wyjścia PWM. Zmiana częstoliwości następowała przez przekonfigurowanie timera odpowiedzialnego za PWM. Trzeba było tylko zrobić mechanizm anty glitch żeby nie było stuków w głośniczku prze zmianie częstotliwości.
Atmega32 ma rejestr TIFR, czyli usuń "1". [syntax=asm]; Clear interrupts (if any happened). sbi _SFR_IO_ADDR(TIFR), OCF1A[/syntax] ; TIFR - Timer/Counter Interrupt Flag register .equTOV1= 2; Timer/Counter1 Overflow Flag .equOCF1B= 3; Output Compare Flag 1B .equOCF1A= 4; Output Compare Flag 1A .equICF1= 5; Input Capture Flag 1 edit. Jeszcze TIMSK zamiast...
Niby czemu miałoby to bez przerwania od timera niedzialac ?? W końcu jest to napisane w asemblerze (nie będzie optymalizowane) i podczas wysyłania są wyłączone przerwania.
Wektory ? Zachodzą jakieś wyjątki ? Cyklicznie co około sekundę jest wywoływane przerwanie od timera które wysyła dwa bajty danych i mruga diodą. Oto kod tego: Poprawiłem dobór języka w tagu syntax. Proszę na przyszłość używać tagu ] do wklejania kodu w asemblerze... /syntax] . LordBlick
Witam! Mniej więcej tak: ORG 0BH LJMP PRZERWANIE_OD_T0 ORG 100H WARUNKI_POCZATKOWE: MOV IE,#82H MOV TCON,#10H MOV TMOD,#01H MOV TH0,#03CH MOV TL0,#0B0H MOV R2,#2 PETLA_GLOWNA: NOP SJMP PETLA_GLOWNA PRZERWANIE_OD_T0: DJNZ R2,EXIT ;----------------------- TU PISZESZ CO MA SIE WYKONYWAC PO 100ms MOV R2,#2 EXIT: MOV TH0,#03CH MOV TL0,#0B0H RETI END Program...
Nie wiem dokładnie o co Ci chodzi. Jeśli chcesz samemu zbudować timer lub zegar to wydaje mi się że to zadanie Cie troszke przerośnie. Ale z tego co sie orientuje to 8051 jest tylko mikroprocesorem który jest zawarty w urządzeniu DSM - 51 i prawdopodobnie na tym masz napisać program realizujący funkcje timera i zegara w języku programowania jakim jest...
t0int: push r0 mov r0,jakislicznik djnz r0,koniec mov r0,#36 ... ... koniec: mov jakislicznik,r0 pop r0 reti rozumiem ze to procedura przerwania od timera a dlaczego jest 36 przy mov r0,#36 poza tym co to za ... pozdro
Widze ze nikt nie jest w stanie pomoc:cry:To moze jesli ktos ma to prosilbym kod programu w C albo w asemblerze gdzie jest ustawiony PWM na timerze 1szym. Dziekuje z gory Nikt nie pomaga, bo dział był niewłaściwy, przeniosłem z Automatyki i Robotyki
A change of the COM1x1:0 bits state will have effect at the first compare match after the bits are written. For non-PWM modes, the action can be forced to have immediate effect by using the FOC1x strobe bits. Być może w tym jest problem. OC1A jest prawdopodobnie inicjowane z wartością 0 do momentu wystąpienia pierwszego "compare match". W trybach "set...
Witam ja bym zmienił kwarc na 12Mhz to będzie rozdzielczość co 1us i wtedy timer ustaw na 50ms (50000) i masz równy czas . Nie wiem jak jest w bascomie ale asemblerze instrukcją ORL THL,#wartość można skorygować wartość licznika żeby odmierzał równy czas.
Witam deal - 8051 w wersj normalnej wykonuje instrukcję djnz w 2 cyklach tylko szybkie kostki od dallasa robią to w 3 cyklach więc program będzie taki: mov a,#7 ;1 cykl djnz acc,$ ;14 cykli a żeby ręcznie wykorzystywać przerwania trzeba po prostu umieścić program asemblera w odpowiednim adresie i tak dla timera 1 jest to adres 01BH a dal timera 0 jest...
Co do transmisji przez UART najpierw trzeba ustawić parę "rzeczy" ;) Poniżej wkleję kawałek kodu który transmituje liczbę 0 przez UART. tmod_set equ 020h ;ustawienie Timera 1 w tryb 2 th1_set equ 0F4h ;ustawienie szybkosci na 2400 bodow/sek. tl1_set equ 0F4h scon_set equ 050h ;ustawienie UART w tryb 1 i zezwolenie na odbior mov SCON,#scon_set ;zaladowanie...
asembler lub bascom(z tym ze bascom dla 8xxx51) ewentulanie c
asembler timer asembler sortowanie diody asembler
antena dookolny kierunkowy wentylator chłodnica aster zawór regeneracji bosch
schemat silnika espace klucz udarowy
Blaupunkt Wiesbaden SQR 45 – gdzie znaleźć oryginalną gałkę potencjometru? Atomic 4 – przegrzewanie cewki zapłonowej, przyczyny i diagnostyka