Nic nie trzeba informować kompilatora - Bascom ładnie przyjmuje wprost rozkazy asemblera ale w zasadzie atom1477 zrobił to nawet bez asemblera - sorki - po prostu "ręcznie" odwołał się do rejestrów i wpisał do nich odpowiednie wartości tzn poustawiał bity tak żeby coś tam działało w tym przypadku co ja ci podałem trza by to było mniej więcej zrobić...
Jaki masz zadeklarowany stos?
8Mhz /256 daje 31 250. 31250/125 daje 250 (ms) (250 -125ms) * 8 (co ósme przerwanie) = 1s.
Witam. W petli glownej programu musisz sobie napiac jakas procedurke wyboru podprogramow. Np mozesz uzyc do tego 3 przyciskow - jeden do zwiekszana zmiennej np wybor , drugi do jej zmniejszania atrzeci przycisk do potwierdzenia "enter" . Nie pamietam juz dokaldnie skladni w Bascomie ale moze to byc np tak: DDRB=&b11111000 // - piny 0 1 i 2 portu...
Z tego fragmentu nie wiadomo czy używasz przerwań. Może wywołujesz jakieś przerwanie i jego obsługa zajmuje tyle czasu , że przychodzi następne przerwanie i program się pętli ( jedyne co robi to obsługuje przerwanie )
Najpierw włącz zezwolenie lokalne, potem dopiero globalne. Jak nie pomoże, skasuj flagę od przerwania w bodajże GIFRrze:)
Musisz zaznaczyć cały tekst który chcesz pokazać jako kod, a następnie zaznaczyć napis Code $regfile = "attiny2313.dat" $crystal = 8000000 'kwarc 1MHz $prog &HFC , &HE4 , &H9F , &H00 ' generated. Take care that the chip supports all fuse bytes. Config Timer1 = Timer , Prescale = 64 'timer1 jako licznik 15536 Config Int0 = Rising 'detetor zera...
Gdy już usuniesz wewnętrzną pętlę do..loop to zwróć uwagę, że stan przycisku będzie sprawdzany raz na 60s. Możesz zrobić sprawdzanie np. tak (co 1 sek.): dim x as byte ... do 'sprawdź przyciski if x=60 then x=0 toggle ... end if wait1 incr x loop end Albo wykorzystać timer lub przerwanie.
Co do nadawania RC5 to ten rozrzut czasowy nie jest aż taki, żeby wyjść poza zakres tolerancji raczej, a z przysiadaniem napięcia to niech autor pokaże schemat - nie wiadomo czy i jaki wzmacniacz siedzi między procesorem i diodą IR. Niestety moim zdaniem program jest zły, bo w przerwaniu (z tego co kiedyś ostro testowałem) nie ma sensu wyłączać samego...
Witam Dla celów edukacyjnych w załączniku jest schemat i program do obsługi czterech wyświetlaczy na układzie 74164 W układach bardziej rozbudowanych programowo trzeba wykorzystać Przerwania Piotr
mam przerwanie w którym wykonuję operacje na zmiennych "globalnych" niestety po powrocie z przerwania moja zmienna odtwarza sobie wartość z przed przerwania. Czy jest jakaś możliwośc przekazania wartości z przerwania do programu głownego, oprócz on interrupt nosave? Witam, Sorki ale koledze chyba coś się pokręciło i to mocno.... jak już to pokaż swój...
Ale, co ten program u góry? Jak tak to teraz podeśle taki na przerwaniach. Jak tak to napisz co się działo na ekranie LCD.
Ale nie obsługa tylko co ile są wywoływane. No obsługa powinna być krótsza. Ale niektórzy potrafią w przerwanie wstawić waitms 500- nie wiem po co ale demoluje to cały program.
Ja bym zrobił na timerach, no bo po co zajmować procesor zapętlonym zadaniem. Ideą wielozadaniowości jest taka konstrukcja programu, tak by nie pracował w bezsensownych pętlach, kiedy może tylko sprawdzić czy wystąpiło zdarzenie (event) i przejść do następnego zadania.
Co to za przerwanie? Od porównania? Przepełnienia? Czy może od przechwycenia - co sugerują komentarze. Nie używasz innych przerwań? Załącz cały program.
WItam Mam taki prosty programik, ktory ma reagowac na 1,2,3,4 lub 5 impuls (zbocze opadajace) w zaleznosci od tego co ustawie. Problem polega na tym ze caly program dziala tak jak chce. Reaguje na 1,2,3 itd zbocze ktore ustawie tylko ..za kazdym razem po przerwaniu miga mi dioda led. Wyglada to tak jak by uC sie resetowal i zaczynal start programu od...
W przerwniu i programie głównym używasz zmiennych zadeklarowanych jako word. Myślę, ze tu leży pies pogrzebany. W C wystarczy użyc volatile i atomic_block. W Bascim? Był taki na Elektrodzie (niveasoft) co wiedział w jaki tajemniczy sposób Bascom zarządza takimi zmiennymi. Myślę, że nie masz wyjścia, tylko przed odczytej w programie głównym zmiennej...
Brak Load Timer w programie głównym.
Czesc! Mam do was pytanie jak przerobic ten program tak aby jednym przyciskiem np na p1.1 wchodzic do programu ktory bedzie wykonywal zliczanie impulsow jednokrotne a drugim zeby ta liczbe zapamietac i wrocic do glownego programu oczywiscie ta liczbe chcialbym gdzies zapamietac zeby moc z niej korzystac w glownym programie bo ja probuje i mi to nie...
Dodaj flagę , zwiększaj ją w przerwaniu, a w pętli głównej sprawdzaj czy osiągnęła już równowartość 750ms.
Masz w programie procedury obsługi przerwań ?
sprawdziłem w bascomie , co około 8ms jest przerwanie i przechodzi do "przerw" , czyli program ok
Szkoda, że ram pada bez prądu :) Jak już to trzeba by to w eepromie trzymać:) Już sie tak nie wymądrzajmy :-) nie o tym mówie na początku w moim programie ustawiałem parametr na 0 ale w twoim programie stan bramy jest sprawdzany w inny sposób u mnie za pomocą przerwań i ustawienie parametru A
wpisać w odpowiednim miejscu A w które miejsce programu nastąpi powrót z podprogramu obsługi przerwania? Ok. Trzeba by zmienić rejestr w programie obsługi przerwania.
... a gdyby tak w programie do zmiennej d podstawić żądaną wartość, a w przerwaniu sprawdzać jednokrotnie czy c=d?
...Daj znać co z tego wyszło. Zapewne guzik z pętelką :D Włącz przerwanie.
Zmień doświadczalnie wartość wpisywaną do timera. Zobacz czy poprawnie wyświetla ci to co chcesz. Ważne jest także żeby przerwanie nie było za długie bo wtedy może grozić to resetem uc.
Masz tutaj program odbierajacy dane z rc5 w przerwaniu int0: 'Program umożliwiający odbior danych w standardzie rc5 z użyciem przerwania int0 'dzieki czemu odbior danych nie zakłóca działania programu głównego $regfile = "m32def.dat" 'atmega32 $crystal = 8000000 'kwarc 8MHz Config Lcdbus = 4 Config Lcd = 16 * 2 'wyswietlacz 2x16 znakow Config...
Zrobiłem tak jak zaproponowałes i tez sie wiesza, odpusciłem sobie przerwanie i getrc5 zakąbinowałem w pętli głownej programu i cyka az miło:) Pozdrawiam
Wait nie stopuje programu. To nie całkiem prawda. Wait zatrzymuje główny program. Nie dotyczy to przerwań, które jak sama nazwa wskazuje przerywają działanie programu głównego, a więc i waita. Tak więc waity nie przeszkadzają przerwaniom, ale przerwania wydłużają czas waita. Przykład: Przerwanie o częstotliwości 400Hz w ciągu 100ms wykona się 40 razy....
Jednym słowem pcint to nie to samo co int0 ;) A dla potomnych int 0 w m2560 pin43 i o ile się nie mylę to to zabrakło opisu że program jest napisany w Bascomie ... Popraw temat zgodnie z normami ;)
Nie bardzo jest co komentować, bo najważniejszej procedury (ISR) nie pokazałeś. Jedno jest pewne: Taka konstrukcja i wywołanie procedury 800_ms zakończy się opóźnieniem programu głównego o parę mikrosekund i tyle. Zmienna Licz_8ms będzie się inkrementować tzw. "sobie a muzom". Co więcej, nawet jakbyś poprawnie skonstruował tą procedurę to dalej zamiana...
Program się zawiesi bo na czas zapisu program jest zatrzymywany w pętli oczekującej na zakończenie zapisu (tak robi BASCOM a domyślam się że mówisz o BASCOMowej funkcji zapisującej a nie jakiejś własnej). Kolejne przerwania od Timera będą wywoływane tuż po poprzednim a więc program główny będzie praktycznie stał w miejscu. O zajeżdżaniu pamięci EEPROM...
wiec napisz odpowiednio podprogram jesli po zakonczeniu jego wykonania bedzie ustawiona flage ze przerwanie nastąpilo wykonaj je ponownie
pier - twój program działa bardzo dobrze, dokładnie tak jak go napisałeś. A że napisałeś go badziewnie to taki masz efekt. Błędy: 1) W przerwaniu INT0 wyskakujesz z niego GOTO do głównego programu, tak nie można. Wyjdź z przerwania komendą RETURN, ale na jego końcu a nie przez podmianę GOSUB. Powinno być: If Sw = 1 Then Powerdown i RETURN na koncu....
Podejrzewam, że te Waitms w obsłudze przycisków blokują wyświetlanie. Spróbuj je do testu usunąć. Oczywiście przyciski nie będą wtedy działać poprawnie, ale sprawdzisz wyświetlanie. Obsługa wyświetlania powinna być przeniesiona do obsługi przerwania, ale to już większa przeróbka programu. To przygasanie tak bardzo przeszkadza?
Jak nie chcesz wait(co zrozumiałe) to wykorzystaj przerwanie od timera.
Twoje przerwanie odbywa się co około 4ms..... a ty w tym przerwaniu ładujesz WAITMS 4 i to aż cztery razy !!!! co daje ci łącznie 16ms. Tak więc zaczyna się przerwanie - trwa jak kolega wyżej napisał KOSMICZNIE DŁUGO, ale ok potem się kończy, i niestety od razu procek wykonuje następne przerwanie i tak wokółko ;) ..... widzisz co się dzieje???? procek...
Może spróbuj w ten sposób : $crystal = 4000000 Config Pind.5 = Output 'ustawienie wyjścia na pinie który standardowo sygnalizuje przepełnienie timer-a Config Timer0 = Timer , Prescale = 1 'ustawienie timer1 dzielnik 1 On Timer0 Przerwanie_timer1 'wywołanie przerwania po przepełnieniu timera Timer0 = 145 'wartość początkowa od której timer bedzie zliczł...
Tlumaczylem, ze restart bedzie tylko raz mozliwy, w petli programu. Nie napisales jasno, ze ma byc w kazdej chwili. Moze jutro ci wlepie kawalek kodu. ________________________________________... CONFIG INTx = LOW LEVEL On Intx Przerwanie Enable Interrupts do loop:end Przerwanie: disable intx '.... tu reset '.... enable intx Return...
Czyli nic nie zrozumiałeś z linkowanego programu. A szkoda... Zasada działania (podobnie jak dla wielu innych programów), to wykonywanie krytycznych sekcji w przerwaniach. Pętla główna może być zupełnie pusta. W programie głównym: 1. Zdefiniuj sobie 8 zmiennych (Parametr_x), które będą odpowiadały wartościom włączenia każdego z kanałów. Np. 100,47,198......
Może też być tak, że w kodzie programu nie ma wszystkiego np. taktowania. To co w kodzie ma pierwszeństwo przed ustawieniami kompilatora, a opcje kompilacji mogą się różnić.
case to taka imitacja warunków. Toszto wiecej kodu żre, niż byś miał do każdego porownania zastosować if : then Nie rozumiem powiazania przerwania urxc z buforowaniem. Po to się buforuje, zeby nie przerywać
Najdłużej tam pewnie trwa oczekiwanie na wynik pomiaru ADC który jest dodatkowo podwójny. Bascom robi dwa odczyty jeden za drugim. Można to wyłączyć, ale pomyśl o samym oczekiwaniu na konwersję. Gdyby to było poza przerwaniem to inne przerwanie spokojnie mogłoby to oczekiwanie przerwać tak jak można przerwać każde Waitms. Spróbowałbym w przerwaniu ustawić...
Witam, w dobrym kierunku idziesz, ale to ci nie zadziała bo jak? skoro na początku programu tylko raz ustawiasz piny klawiszy jako wejścia oraz pin przerwania INT0 też jako wejście. Więc co ma tutaj wymuszać stan niski na wejściu INT0? nic!. Aby ten sposób zadziałał - musisz jeszcze pomyśleć o zmianie kierunków portów wtedy gdy trzeba. Generalnie założenie...
co ma się niby ustawić Portd.0 czy Portd.5 ? Gdzie jest procedura obsługi przerwania od Timera? Nie wiem czy reset nie działa tylko bitowo w Bascomie, myślę że lepije i bezpieczniej jest zrobić krok=0.
Rzuciłem okiem w HELPa i funkcja "inputbin" czeka na znak, program dalej się nie wykonuje. Może lepiej użyć przerwań wykonujących się, gdy w buforze UART jest znak ?
Nie jestem specjalistą od Bascomu i tych mikrokontrolerów, ale podpowiem taki test: być może Twoja procedura przerwania nie mieści się w 1ms czasu procesora i po prostu gubisz kolejne przerwania. Aby to sprawdzić ustaw przerwania na np. 10 lub więcej ms., zmodyfikuj odpowiednio obliczenia i sprawdź czas mrugania. Jeśli będzie ok. to masz ewidentny dowód...
Ja robiłem dokładnie to samo :) Programowy UART sprawdza się, ale jak program nie jest za bardzo pocięty przerwaniami timerów itp. Poza tym trzeba "czekać" na dane, chociaż w bascomie nie robi to większej różnicy.
Co do wyłączenie światła po 30 sek. Dodaj dodatkową zmienną bit która będzie ustawiana np: na 1 po wyłączenia światła przez timer po 30 sekundach a dzięki niej nie będzie ponownie włączane światło przez wciąż otwarte drzwi (stan niski na wejściu uC). Dopiero zamkniecie drzwi ( stan wysoki na wejściu uC) spowoduje zmianę tej zmiennej na 0 dim 30SEK as...
Jeżeli brakuje pamięci flash to zastosuj inny mikrokontroler np. ATmega8. Zapewne zabraknie pisząc w w języku Bascom :( Lecz wstawki ASM mogą uratować sytuację. Owszem, jeśli pisząc w języku C dobrze go znając być może nie będzie kłopotu. Jednak tak, czy owak programista nie panuje nad tym, co zrobi kompilator. Jedynie pisząc w ASM wiemy, co się dzieje,...
Pokaż schemat to raz. Dwa: co to jest? Set Pinb.5 Set Pinb.6 Set Pinb.7 Tak po za tym chyba brakuje ci wartości początkowej timera0... Nie obraź się ale przy tym oscylatorze i preskalerze 64 otrzymasz przerwanie co najwyżej co 2ms... Na koniec zapamiętaj że program zawsze umieszcza się w znacznikach "code".
Tak po krótce przeanalizowałem wątek TIMER2 tego nowego programu. Po prześledzeniu kilku instrukcji i "śladów skoków" mogę stwierdzić, że nie jest dziwne, że gdy aktywny jest TIMER2 i jego przerwania to wszystko siada. Pojawia się przerwanie TIMER2, program wskakuje do jego obsługi a tam napotyka: GOSUB w inne miejsce, gdzie napotyka GOTO w jeszcze...
No da się. UART ma przerwania.
Witam ! Napotkałem taki problem: Mój program wykorzystuje przerwanie z końcówki INT1. uC M32. Program w Bascomie. Zdarza się, że na wejściu INT1 pojawia się stałe zero i wtedy przerwanie wykonuje się na okrągło, co powoduje zwis programu i reakcję watchdog'a. Próbowałem po wywołaniu przerwania wyłączyć go poprzez Disable INT1 i właczać po pewnym czasie...
Wrzuć wszystko do programu głównego tzn. przyciski ( ustawianie czasu załączania/wyłączania pompy), sprawdzanie Adc (poziom wody) przeliczanie wartości dla wyświetlacza , a samo wyświetlanie w podprogramie odświezanym co jedną sekundę za pomocą Timer0 . Timer0 dalej dla wyznaczania 1 sekundy. Buzer zrealizuj za pomocą zwykłej zmiennej licznikowej zwiększanej...
Tylko ze skokami uważaj, bo zapchasz stos i wszystko stanie. Lepiej wprowadz jakąś zmienną logiczną i wykonywać skok względem tej zmiennej w programie a nie w obsłudze przerwania, a w obsłudze przerwania zmieniać tylko wartość tej zmiennej. Pozdrawiam, Konrad.
Oliczenia są ok, pamietaj tylko o ustawieniu przecinka w odpowiednim miejscu. Grzesiek. Ps. w Twoim programie procek czeka bezczynnnie przez 1s, można to zrobić na przerwaniach - jak? poszukaj na elektrodzie, było już kilka razy.
Gdzies juz chyba widziałem, jak napisałeś coś w stylu, że "ogólnie wiadomym jest, że bascomowe SPISLAVE nie konfiguruje tak jak potrzeba" . Ja o tym czytałem pierwszy raz... Mogę wiedzieć której wersji Bascom używasz jeśli nie najnowszej 2085? W SPI najważniejsze jest to, że to master taktuje slave`a. Dlatego nie bez powodu w komendzie konfiguracyjnej...
Hehe... no to następny pomysł - a jak szybko obraca się pętla główna programu? Nie wiem jak masz skonstruowany program, czy w ogóle jest? Dużej precyzji czasów chyba nie potrzeba, nie ma różnicy, moim zdaniem, czy przytrzyma się przycisk 1s czy 1,1s, więc może ten pomysł wsadzić do pętli głównej i bez przerwań. Wtedy w zależności od szybkości pętli...
Można wykorzystać przerwanie zewnętrzne. Jutro przerobię program dla zakresu 87,50-108,5 oraz dorobię obsługę przerwania. Teraz jestem już trochę śpiący ;)
No na modyfikację nie mam czasu. Zwłaszcza, że już dawno nic nie pisałem. W dodatku ja nie używam wait (i Tobie też odradzam) co wymaga trochę innego podejścia do pisania programu. Mogę jedynie podpowiedzieć, że najlepiej było by skorzystać z przerwań INT0 i INT1 podłączonych pod przyciski. Wtedy przerwanie aktualnego zadania było by możliwe natychmiast....
Bo tak byłoby bardziej profesjonalnie (w przypadku tego konkretnego urządzenia). Ale ostatecznie podarowałem sobie przerwania, i zyskałem tym samym sporo cennej pamięci programu :-)
Proponuję do wykrywania dźwięku użyć przerwania zewnętrznego to zminimalizuje opóźnienie. Teraz program w pętli czyta ADC i sprawdza stan pinb.1 co nie jest optymalnym rozwiązaniem w tym przypadku.
Spróbuj przykładu podanego w [url=http://www.elektroda.pl/rtvforum/to... wątku. Nadawanie przez PRINT. Odbiór w przerwaniu URXC i flagą ustawianą i testowaną w pętli głównej programu.
Przetestuj ten. Tak go poopisywałem, że aż mi się nie podoba :D [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 '# wyświetlacz Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Cls '# timer ' 8000000Hz(8MHz)/256(Prescaler)=...
Chciałbym aby ktoś mi napisał prosty program z wykorzystaniem przerwania. aby wskakiwał do niego co określony czas np 1 sekundę by niezależnie co dzieje się w programie co Np sekundę czy 5sek wyskakiwał do procedury przerwania czyli przerwanie wykonywane co określony czas a nie na podstawie wymuszenia stanu logicznego na pinie do loop przerwanie: Mam...
I jeszcze jedno. Napisał Ci atom1477: Wychodzisz z przerwania za pomocą GoTo. To jest problem. to go słuchaj, bo to mądry człowiek jest. Powtórzyłeś ten błąd we wszystkich programach w tym temacie.
Proponuje coś na zasadzie prostego SPI, z wykorzystaniem przerwania sprzętowego, niech linia z przerwaniem sprzętowym będzie linią zegara, dowolna linią danych, jeśli zmieni się stan na lini przerwania sprzętowego niech to przerwanie w programie odczytuje bit z lini danych i niech wraca do programu, a jeśli licznik bitów osiągnie odpowiedni stan, czyli...
Witam! Mam pytanie do osób programujących w Bascomie. Dlaczego po kilkukrotnym wciśnięciu przycisku P3.2 program się zawiesza i co zrobić by przez cały czas działal poprawnie? Dziękuję za poświęcenie chwili czasu. Config Timer1 = Timer , Gate = Internal , Mode = 1 Dim D As Byte Dim C As Word D = 0 Declare Sub Czas On Timer1 Przerwanie Enable Interrupts...
witam. Po pierwsze podczas "gadania" z DSem wyłącz przerwania (na czas konwersji temperatury znów je włacz oczywiście), nie możesz bowiem transmisji 1wire zakłucać przerwaniami, w reszcie działania programu przerwania zostaw włączone, po drugie zatrzymania przerwań moą mieć wpływ na pracę zegara....będzie się późnić. A może by tak odczytywać DSa co...
Aż mnie dziwi, że przy takiej ilości zagnieżdżonych skoków program się nie wysypuje. Albo może się wysypuje i stąd te dziwne wyniki. Za radą kolegi Mundi1970 zainteresuj się definicjami stosów i przebadaj zagnieżdżanie podprogramów.
Buforuj otrzymane znaki i przetwarzaj w procedurze pętli głównej programu. Oczywiście wiąże się to z wywaleniem wszelkiej maści form kodu blokującego procesor i oparciem odliczania czasu o Timer.
Taj jak napisałem wyżej. WAITKEY będzie czekało do czasu, aż coś odbierze. Jeśli w tym czasie wystąpi jakieś przerwanie to się ono wykona i wróci do programu wykonywanego wcześniej, czyli do WAITKEY (chyba, że WAITKEY będzie w jakimś podprogramie przerwania - wtedy kolejne przerwanie się nie wykona (wykona się po skończeniu aktualnego), chyba że na...
Po pierwsze jakie czasy chcesz obliczać i jakie przerwania po co ??? To jest bascom nie assembler, deklarujesz na wstępie programu prędkość kwarcu a kompilator troszczy się o resztę tj. dajesz deklarację $regfile = "m8def.dat" $crystal = 12000000 Po drugie, procedura obsługi wyświetlaczy LCD (mowa tu o alfanumerycznych HD44780) jest w BASCOM zaimplementowana...
1 - doprowadź sygnały z czujników do trzech wejść jednego z portów 2- każdy z tych sygnałów doprowadź do wejścia przerwania INT0 ( odseparowane diodami lub przez transoptory np. CNY-17 ) Każde pojawienie się impulsu na jednym z wejść wyzwoli przerwanie INT0 W obsłudze przerwania sprawdzasz stan wejść i porównujesz z poprzednim stanem W zależności od...
...Temperatura pokazuję co jakiś czas błędny pomiar np 124 , 32 , 98 procek się resetuje chińskie znaki raz na jakiś czas ... A czy zdajesz sobie sprawę z tego, że przerwania "rozwalają" Ci transmisję 1wire :?: Poza tym, co z niżej wymienionymi dyrektywami Bascom-a :?: [syntax=basic4gl]$hwstack $swstack $framesize [/syntax] Wiedz, że kod(listing) programu,...
No, coś mi się wydaje, że jednak może nie do końca rozumiesz właśnie to wszystko i stąd takie podajęcie. Co to w ogóle dla ciebie znaczy, że: Bo niby po czym innym program ma poznać czy odczytane dane pasują w tym określonym miejscu ? .... toż twoja próba obsługi tego przerwania - pokazuje, że w 1000% mógłbyś wykorzystać mechanizm z Bytematch Ustawiłbys...
Witam. Mam problem z przerwaniami w atmega8. Wcześniej nie potrzebowałem przerwań więc to zagadnienie mnie nie interesowało. Potrzebuję wywołać przerwanie zewnętrzne int0 które uruchomi timer1, a ten zacznie odmierzać czas. Proszę o pomoc. Pierwsza zasadnicza uwaga to nie zauważyłem w programie konfiguracji interruptu0- coś np. takiego: config INT0=...
Nie znam Bascoma, ale jeśli wartoscią początkową licznika jest 4096 dziesiętne czyli 1000 szestnastkowo, to bardzo dobrze! Nie musisz zmieniac wartości TL0, ponieważ w chwili przerwania przyjmuje odpowiednią wartość (00h). Trzeba tylko w ciągu najbliższych 256 cyklach wpisać do TH0 wartość 10h (16): MOV TH0,#10h. Ale nie wiem jak się robi "wstawki"...
return przydałby się na końcu. I zacznij stosować ISR() Matko boska! tadzik weź ty się ze 4 albo 6 razy zastanów jak coś podpowiesz - RETURN w procedurze obsługi przerwania w C ????? Chyba że ty piszesz swoje programy w Bascomie ze wstawkami w C albo odwrotnie. do autora - żadnego polecenia return w przerwaniu bo będziesz miał tylko jeszcze gorzej....
ustaw sobie może inny podział preskalera na 8,64,256 bo te na 1 i 1024 mogą powodować jakieś problemy. Skorzystaj z programu do wyliczania czasu wystąpienia przerwań np kalk . Wyślij mi emaila to ci podeślę prosty programik. Według tego co zadeklarowałeś w programie przerwanie wystąpi co 0,00816075 s
dlatego też proponuję ci jak najwięcej posługiwać się etykietami, zresztą w przypadku zmiennych już to robisz ale warto też robić to w przypadku stałych, np adresów przerwań, adresów pamięci itp... ... skąd brać te nazwy? - zajrzyj sobie do plików typu def (definicje dla danego procka) i tam masz wszystko dokładnie - wystarczy tylko użyć kopiuj wklej,...
Cytat : "co 400us wywolywane jest przerwanie" i "portach LCD i diod " " w różnych momentach obsługi przerwania" Mam gratulować bystrośći wzroku czy czymś to mierzyłeś. Co w/g Ciebie powinien zrobić program, a co robi Może to co obserwujesz nie ma nic wspólnego z przerwaniami , a przyczyna jest w innym fragmencie programu ?
I chyba po POPALL przydałby się jeszcze dwa POP-y dla zdjecia zbędnego już adresu powrotu, którego POPALL nie zdejmie. Tak może być?? dokładnie - jak tego nie zrobisz, to z każdym przerwaniem będzie Ci rósł stos o 2 bajty, aż zacznie Ci nadpisywać jakieś dane - wtedy program się "wysypie". Aha.. w sumie na cholerę mi adres powrotu jak i tak skakać...
Wiec tak: W ogóle wyrzuciłbym zmienna/flagę F. Nie jest potrzebna tutaj. W programie głównym zamiast sprawdzania F, sprawdzaj A, czyli warunek IF z przerwania przenieś do programu głównego, łącznie z zerowaniem A. W przerwaniu zwiększaj tylko A. Zamiast: If F = 1 Then Cls Locate 2 , 1 Lcd "przerwanie" Wait 1 Cls F = 0 Enable Int0 End If zrobilbym...
Uruchom przerwanie od Countera (najlepiej od porównania wartości zliczonej z ustawioną) i zmień stan portu w podprogramie obsługi przerwania lub prościej, ale mało elegancko zmień [syntax=basic4gl]If Counter1 = 100 Then ...[/syntax] na [syntax=basic4gl]If Counter1 >= 100 Then ...[/syntax] Nie tak jest to, że w chwili zliczenia setki nasz if może się...
Przerwanie musi być skonfigurowane jako reagujące na zbocze a nie na poziom. Wtedy program nie będzie sie zawieszał na przerwaniu.
Cześć, z reguły tak to się robi, że podłączasz odbiornik podczerwieni pod przerwanie. Jeżeli program byś pisał w bascomie to prawdopodobnie musi być podłączone pod PIND.2 Jeżeli obsługę RC5 będziesz robił sam to możesz podłączyć pod dowolne przerwanie. Ogólnie zasilanie takiego odbiornika podłącza się przez filtr RC np 100 ohm szeregowo i 10u elektrolit...
Akurat w BASCOMie jest większa kontrola nad czasem wykonywania się instrukcji niż w C. hyhyhy a to miał być żart ? ;) czy na poważnie ? bo jeśli na poważnie to: Jak można w ogóle porównywać instrukcje Bascoma i C ??? czy np można w Bascomie zapisać coś takiego: a = ((a+b)/c)+mul(e,d... natomiast czy np w C można napisać coś takiego:...
Chyba się troszkę zagalopowałeś :D W przypadku kiedy PORTD.0 pracuje jako wyjście, nie ma sensu sprawdzać rejestru PIND, żeby przekonać się, jaki stan mamy "zaprogramowany" na danym wyjściu.Sprawdzenie rejestru PORTD wystarczy. no tak nie zwróciłem może uwagi na to, że portd w tym przypadku jest wyjściem (jeśli chodzi o całość programu)
Co do bascomowego symulatora to działa on u mnie bardzo wolno, a Hardware simulator wyświetla jakieś bzdury Symulację można przyśpieszyć dodając $sim , ale działa to przez usunięcie opóźnień, więc może zmienić zachowanie. W każdym razie polecam przyjrzeć się co się dzieje w pamięci RAM. [url=https://avrhelp.mcselec.com/index.h...
Dim Licznik As Byte Enable Interrupts 'Przerwania odblokowane '---------------------------------KONFIG... TIMER 0---------------------------------------... Config Timer1 = Timer , Prescale = 1 Counter1 = 59536 'Wywołąnie co 1ms Enable Timer1 'Odblokowane przerwanie TIMER 1 On Timer1 Procedura_w_przerwaniu_timer1 Procedura_w_przerwaniu_timer1:...
wielkie dzięki za podpowiedź wszystkim :((((((((((((((( jużsobie sam proadziłem, a tak przy okazji to okazało się że wykryłem błąd w bascomie ... ale jakoś go naprawiłem :)
Niedokładnie przeczytałeś. W zakładce nawigator: Config Timer- uwaga! po ustawieniu prascale licznik natychmiast zaczyna zliczanie. Można użyć start Timerx i stop Timerx Np. Config timerx, prescale 'timer zaczyna liczyć stop Timerx 'timer stoi- ale już coś zliczył Timerx=y 'timer ma wartość początkową =y - np.0 Start timerx ' Timerx zaczyna liczyć od...
Albo poczytaj o obsłudze przerwań
Napisz tak: Dim Zmienna As Byte Zmienna = 0 Config Intx = Low Level | Rising | Falling [ | Change ] 'Konfiguracja reakcji na sygnał przerwania 'za x podstaw nr przerwania wybierz jeden ze sposobów pobudzenia kocówki uC Enable Interrupts 'Uruchomienie przerwań globalnych Enable Intx 'Uruchomienie przerwania INTx On Intx Obsluga_przerwania 'wskazanie...
Przy tylu problemach z symulatorem w Bascomie zaproponujecie moze cos stabilniejszego. Znacie takie programy do 51?
Tego właśnie się obawiałem, no trudno, zrobię tak jak mówisz, tylko troszkę skomplikuje to program. Pozdrawiam!
Z tym adc to ciekawy pomysł,można go wykorzystać w innych projektach.Ale płytki już wykonane. Przecież timer zawsze startuje od zera ,potem ma dobić do 255 przerwać program. Potem co przerwanie incrementuje zmienna sekundę 30 razy by ta sekundę odmierzyć. Zmienna sekunda deklaruje na początku programu-normalnie.
przerwanie bascom bascom przerwanie electrolux przerwanie programu
sygnalizator wewnetrzny upgrade pentagram zetor instalacja
kompresor samochodowy kompresor samochodowy
Zamiennik tranzystora J13009-2 w myjce ultradźwiękowej Piec Beretta Junior: Cykliczne podawanie zimnej wody