W PDF jest napisane, że flaga jest zerowana gdy : "interrupt routine is executed". Ja to tłumaczę jako obsługa przerwania jest WYKONANA. CZYLI po ZAKOŃCZENIU. W PDF jest też napisane, że zerujemy ją wpisując do rejestru wartość na określonym bicie 1.Czyli EIFR.0=1. Dlatego wpisując EIFR.0=0 NIE ZEROWAŁEŚ FLAGI!. Spróbuj ja wyzerować następująco If EIFR.0=1...
Jeśli wybierasz BIT w celu pozornej oszczędności to kompilator wszystkie flagi bitowe wsadzi do jednego Bajtu. Nie ma innej możliwości. Bajt składa się z ośmiu Bitów . Ale do rzeczy. Najprościej to wytłumaczyć następująco. Na przykładzie flagi Z . http://obrazki.elektroda.pl/4444213200_1... Flaga ta wskazuje zerowy wynik działania arytmetycznego...
W rejetrze GIFR pojawia się flaga żądania obsługi przerwania INTF0. I czeka. Gdy w rejestrze GICR pojawi się ponownie flaga INT0 (czyli w Bascomie enable INT0) przerwanie jest obsłużone i flaga INTF0 jest wtedy kasowana. Flaga INTF0 może byś skasowana ręcznie.
Trzeba zrobić detekcję zbocza np. poprzez użycie dodatkowej zmiennej- flagi Zmienna ta ustawiana byłaby np. na 1 po wysłaniu SMS-a, a wejście do podprogramu wysyłającego SMS pod warunkiem, że ta zmienna = 0 If Pir_1 = 0 And Mw_1 = 0 And Flaga = 0 Then ....... (program wysyłający SMS) Flaga = 1 En If Gdzieś w głównym programie If Pir_1 = 1 And Mw_1 =...
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ć...
Jak zmusić diodę alarmu do migania nie używająć procedur waitms ? Mam teraz zrobine tak: Używasz Timer0 jako pewnego rodzaju 'swoisty' prescaler: (4 ms; 100 ms; i 1 sec). Dlaczego okazyjnie nie wykrzystać tych 100 ms na miganie diodą? Wstaw tą wyżej procedure (troche zmodyfikowana - zamiast "set Porta.5" daj "toggle") w przerwaniu timera0 w miejscu...
Jeżeli przycisk miałby podciąganie to zawsze byłby w trybie gaszenia a po wciśnięciu i zwarciu do masy 0 czyli tryb rozjaśniania tu mi już coś nie pasuje! Dodano po 20 [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 16000000 Config Pinb.1 = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale =...
dlaczego piszesz, ze masz przycisk podlaczony do zasilania (ja pod slowem zasilania do plusa) ? Juz sie zmartwilem. Tu masz poprawiony kod: $regfile = "m8def.dat" $crystal = 1000000 Config Portc = &B1111111 Portc = &B1111111 Config Portd = &B11111111 Portd = &B11111111 config pinb.1= input ' tego nie miales a bardzo wazne S1 Alias Pinb.1 Set...
Witam wszystkich Mamy przedświąteczny okres a tu jeszcze taki problemik mnie dorwał Jak dokonać podziału żeby uzyskać 1/12 sekundy w pełnej wartości bez przecinków O ile jest to wykonalne ? Do dobrania jest kwarc preskaler i dowolna wartość podziału flagi.
Mnie zastanawia jedna rzecz, skoro korzystasz z przerwań to po jakiego grzyba tam input? Zobacz jak mozna to rozwiazac: Odebrano: Disable Urxc ' wylaczenie przerwania na czas trwania aktualnego 'Jesli licznik znakow jest mniejszy od maksymalnego rozmiaru bufora to... If Licz_znaki < Max_znakow Then '...zwieksz licznik znakow, do buforu transmisji...
Gdy procesor jest w trakcie wykonywania procedury przerwania, następne przerwanie nie będzie przyjęte , gdyż procesor (nie kompilator!) zeruję flagę globalnego zezwolenia na przerwania. Tak samo flaga bieżącego przerwania (tego, którego procedura obsługi jest wykonywana) zostaje automatycznie wyzerowana. Po zakończeniu przerwania flaga globalnego zezwolenia...
Za to mam problem z temperaturą. W pokoju mam 20, może 22 stopnie, a termometry pokazują 25, a przy niektórych włączeniach, nawet 29 stopni. Pomiędzy jednym a drugim 0.2, 0.3 stopnia różnicy. Rezystor podciągający użyłem 3.3K, zamiast 4.7K, ale to chyba nie jest wina tego. Wartośc rezystora podciągającego magistralę 1-wire nie jest krytyczna i to w...
hunterhouse W AVR-ach sprzętowo można zatrzasnąć zawartość timera , ale uruchomić zliczanie trzeba programowo.Natomiast w 51-ce można uruchomić i zatrzymać timer sprzętowo.Jeśli na P3.3 jest stan wysoki i flaga GATE timera1 jest ustawiona , to timer zlicza doputy , dopuki stan na P3.3 nie zmieni się na niski.Problem jest tylko z tym , że Charly chce...
Najlepszy manual to dokumentacja megi32 dostępna bezpośrednio u atmela na stronie. Tak szybko patrząc, at90s2313 ma rejestry UDR/UCR/USR, ale tam jest prosty UART. Mega32 posiada USART, który posiada więcej rejestrów, które dostępne są poprzez UDR, UCSR void UART_init(void) { // ustaw prędkość transmisji UBRRH = (unsigned char)(UART_CONST...
tak wygląda sam kod do odczytu predkośći "trochę nie ogarnięty sorki" [syntax=basic4gl] $regfile = "m16def.dat" 'wew rezonator $crystal = 8000000 'jest włączony wew rezonator $baud = 9600 'szybkosc ibusa Config Lcd = 16 * 2 'używany wyświetlacz i piny do jakich jest podłączony Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7...
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)=...
http://obrazki.elektroda.pl/5724768100_1... Witam, Aktualnie buduję/remontuje niewielką tokarkę, do zastosowań domowych. Jej mechanika jest dość prymitywna, co za tym idzie nie posiada żadnych podziałek, ani automatycznych posuwów. Wobec tego chciał bym zaopatrzyć ją w liniał, który będzie pokazywał pozycję imaka na wyświetlaczu LCD....
Jako że asembler jest z reguły samodzielnym niezależnym, i nie związanym z IDE programem wszelkie etykiety i makra są jego wyłaczną domeną. Generalnie etykiety i marka to jest inna droga przy kompilacji ale te rozważania wkraczają w naukę o kompilatorach/translatorach. Jeżeli assembler jest makto-assemblerem (dziś trudno o inny) to wszelkie maka są...
Witam Pisze program którego struktura jest oparta o zdarzenia generowane flagami z przerwania. Mam 3 zdarzenia: - co 10ms - co 500ms - co 1s Nic by w tym nie było dziwnego, ale zauważyłem że coś nie tak z programem się dzieje. Zacząłem wycinać roboczo kod z programu aby sprawdzić co może być przyczyną. Wycinałem i wycinałem, aż doszedłem do samego szkieletu...
witam czy moze mi ktos powiedziec jak odczytac w bascomie flage TR0 chodzi mi o to ze dalsza praca programu ma byc uzalezniona od tego czy licznik dzial czy nie moze w bascomie jest inny sposob zeby odczytac stan licznika dal przypomnienia dodam ze flaga ta znajduje sie w rejestrze Tcon a adres rejestru jest podzielny przez 8 wiec mozna go adresowac...
niezależnie kiedy odczyta powinno wyzwolić w jednym i tym samym momencie czyli na sygnał pochodządy z int Pod warunkiem, że flaga przerwania od Int0 nie jest ustawiona, w przeciwnym przypadku wykona się natychmiast. Nie wiem czy taka konstrukcja: disable int1 --->wyłącz przerwanie end if Return ---> rzeczywiście wykonuje się RETI, które kasuje flagę...
Program poprawiłem, ale dalej jest problem z drugim timerem tzn. działa tylko z TIMER0 , działa klawiatura, funkcja rozpędzania wirnika. włączenie drugie timera wiesza program. Zamieszczony program (tylko z TIMER0) działa fizycznie. [syntax=vbnet] $regfile = "m2560def.dat" $crystal = 16000000 '$sim '***************************************... Config...
Coś te flagi przecież ustawiło... Najpierw włączasz obsługę tych przerwań, potem włączasz podciąganie pinu to flaga już ustawiona...a kasowana jest przez AVR sprzętowo kiedy obsługiwane jest przerwanie. Bascom nie musi obsługiwać żadnego kasowania flagi przerwania bo robi to sam procesor tyle, że w przerwaniu (jednym w wyjątków potwierdzających regułę...
flaga to zmienna bitowa. pseudokod: przerwanie co 50ms: if P1 =1 if flaga_P1 =1 start silnik zacznij odliczanie 20sek else flaga_P1=1 else flaga_P1 = 0 kolejny sygnal...........
Czyli na końcu obsługi przerwania można wpisać: Set GIFR.intfx - gdzie x- numer przerwania. Bo to jest tak że rejestr w którym wpisujemy zezwolenie na obsługę przerwania to nie jest ten sam rejestr do którego jest zgłaszana flaga wystąpienia przerwania. Ten pierwszy Bascom obsługuje sam- przez enable. A do drugiego trzeba się "dogrzebać" ręcznie. Pacaneum...
Dla każdego ekranu flaga określająca czy powinien być wyświetlany i sprawdzanie tej flagi zanim się procesorowi wyda polecenie wyświetlenia go.
Bo nie wyłączałeś flagi żądania przerwania- wyłączałeś flagę zezwolenia na obsługę przerwania. A flaga żądania obsługi przerwania jest w innym rejestrze- Bascom tego nie obsługuje. Jak po obliczeniu włączałeś zezwolenie na przerwanie to flaga żądania obsługi przerwania już tylko "czychała" aby w to przerwanie wejść. Tę flagę- żądania obsługi przerwania-...
emarcux w poscie#5 masz dokładnie podprogram przerwania, który jest uruchamiany co 4ms ( z przerwania ) i zlicza właśnie do 25 po czym to wprowadza znak na LCD:............ Tylko moze nie kliknales "rozwiń kod" bo normalnie jest zwinięty w poście Ja widziałem cały code..... Wysłanie jakiejś pośredniej informacji do LCD nie jest równoważne z postawieniem...
Już kiedyś pisałem o błędach bascoma w obsłudze przerwań (raz wywołane jest potem cyklicznie generowane pomimo, że czynnik wywołujący przerwanie już zanikł, bo bascom zapomina przy kompilacji kodu o fladze w rejestrze przerwań). Ale tu Bascom nie ma nic do rzeczy, flaga wystąpienia przerwania jest kasowana automatycznie przez procesor gdy włączona...
A jest możliwość zapisu danych w do MS Excela lub do csv w postaci tabel? Dlaczego 11 bajtów przy czterech naraz (a nie 8)? Niestety nie ma możliwości zapisu do excel'a, i ja nie potrafie tego zrobić. Wykres można zapisać do pliku *.grf Po otwarciu go w notatniku wygląda tak: Kurve 255 1462 0.00000000000000E+0000 0.00000000000000E+0000 9.99999999999446E-0004...
najnowsza wersja BASCOM jest dostępna zawsze jako update na stronie wydawcy, teraz to już jest 2.xxxxx
[syntax=basic4gl]If Flaga = 1 Then Flaga = 0 Incr Co4ms[/syntax] IIRC JEDNA operacja w linii. IF WARUNEK THEN DZIAŁANIE i koniec, a u Ciebie masz przypisanie 0 do zmiennej Flaga oraz zwiększenie o 1 zmiennej Co4ms.
Zacznij od tego aby na przerwaniach od timera, np 1ms liczyć czas przez jaki przycisk jest naciśnięty, niech będzie to zmienna "czasGora". Jeśli zwolniony zerujesz czas. Gdy jest naciśnięty przez 2000ms, ustawiasz flagę "rozjasnianie". W przerwaniu gdy flaga ta jest ustawiona zwiększasz wypełnienie PWM do MAX. Pierwsza część zadania zrealizowana. Następnie...
Jest różnica bo używasz InputBin w przerwaniu. Ono odbiera 4 bajty ale skoro są włączone przerwania to flaga od odebranego znaku jest ustawiana. Ręcznie skasować flagę to można chyba tylko bezpośrednim wpisem do rejestru. Tutaj BASCOM nie pomoże. Musowo zajrzeć do datasheeta.
Te Waity do diody Led żeby patrzeć czy program się zawiesił nie są szczęśliwym rozwiązaniem dla programowego portu :D Zobacz tak. Dioda błyśnie jak coś odbierze i oczywiście wyśle Ci to drugim portem software`owym. [syntax=vbnet]$regfile = "m328pdef.dat" $crystal = 8000000 $hwstack = 32 ' default use 32 for the hardware stack $swstack = 10 ' default...
Teoretycznie juz byłem prawie w "w domu" az zauwazyłem , ze cały program rozwalają mi flagi. Zauwazyłem , ze róznie zaczynaja zliczac odcinki czasowe - brakuje zawsze kilku cykli. Zrobiłem testowy kod by poogladac co sie dzieje (Wyciełem cały program aż doszedłem do struktur flag:-) )- identyczny jak mam w programie nad którym siedze. wariant pierwszy...
Ten program jest dziwnie napisany i być może po czasie brakuje mu stosu. Już wyjaśniam. 1. Po pierwsze powinno się deklarować wielkość stosu #hwstack bo inaczej to masz tam tyle ile masz wpisane w IDE a tam możesz mieć dalej jakieś Tiny2313. 2. Po drugie użycie instrukcji GoTo by przeskoczyć z jednego Sub do drugiego lub wyjście z Sub do pętli głównej...
Niespecjalnie twój pomysł ma sens. A raczej nie do końca ma sens. Spowoduje on tylko zmniejszenie latencji obsługi innych przerwań, ale to samo możesz uzyskać pisząc przerwania nieblokujące (o ile Bascom to umożliwia). Pomysł z flagą ma sens w sytuacji w której obsługa przerwania byłaby koszmarnie długa, ale nie z powodu złożoności obliczeniowej, a...
100 lat po powstaniu tego posta jest to nadal jeden z niewielu tematów dostępnych w internecie opisujących komunikację z MCP w Bascom...mój problem jest następujący...Uc komunikuje się z MCP rewelacyjnie jednak tylko przy używaniu hardware SPI...przy próbie komunikacji przez software SPI program staje w pętli do loop w subie Init()...czyli z jakiegoś...
dim flaga as byte niczym nie różni się do Dim Flaga As Byte. Nie wierzysz to sprawdz. Wiem bez sprawdzania. Tylko nie zdarzyło mi się żeby Bascom nie poprawił pierwszych liter na duże. Dlatego sądziłem że autor wątku pisze z pamięci.
Dzięki Nemo to będzie to. Pewnie zostaje flaga irq dla INT0 i następne po odblokowaniu przerwania jest wywołanie obsługi. Jest jakieś polecenie Bascomowe do zerowania tej flagi. Czy wyzerować bit z asma ?
Niestety ale nie wiem co to jest flaga w obsłudze przerwania i czym zastąpić wait 45 a chętnie bym sie dowiedział.
Witam Chciałem do kuchni wstawić czujnik PIR, ale z dodatkową zaletą, czyli stopniowym zwiększaniem i zmniejszaniem PWM, dodatkowo jeśli podczas zmniejszania PWM nadejdzie przerwanie INT1 od czujnika PIR, to program ma przestać zmniejszać, tylko zacząć zwiększać i to nie od zera, ale od wartości na której "zastało" go przerwanie INT1 od PIR. W sumie...
jak zaprogramowac 89s52 tak aby wejscie p1.2 (podlaczone do wylacznika bistabilnego) zamienialo p1.4 na wylacznik astabilny ? nie wiem jak to zaprogramowac ;/ w basicku prosze o pomoc znalazlem cos takiego dim flaga as bit config portx.y = input set portx.y przycisk alias pinx.y do if przycisk=0 then toggle flaga waitms 150 end if loop ale to nie dziala...
Osobiście mam taki pomysł: Ustawiamy sobie timer w tryb licznika i oczywiście zlicza sobie impulsy i generuje przerwanie podczas przepełnienia. Teraz resetuje nam(lub ustawia wedle uznania) zmienną "flaga", oczywiście po jakimś czasie. Następnie prosty waruneczek: Set Flaga : While Flaga = 1 : Wend I co robi procek? Grzecznie czeka aż flaga...
Przerobiłem program na Atmega328. Teraz ma tylko odbierać dane z master na Atega1284p i wysyłać do Domoticz. [syntax=vbnet] $regfile = "m328pdef.dat" $crystal = 8000000 $hwstack = 100 ' rozmiar stosu sprzętowego $swstack = 100 ' rozmiar stosu programowego $framesize = 128 $baud = 19200 '************ Uart 0 Config Serialin0 = Buffered , Size = 150 ,...
Odświeżę temat Zrobiłem tak, jak zasugerował niveasoft , czyli na Case Nie wiem czy tak to miało wyglądać. Zostaje ~994ms na inne sprawy do mnie przemawia, tylko może trzeba inaczej do tego podejść. Póki co będę próbował przenieść MAX na sprzętowe SPI - Wtv020SD nie ma pinu CS, więc może sterowanie obydwu układów poprzez pin CS może być utrudnione.
...czyli, po wywołaniu przerwania ustawić flagę, a w programie głównym gdy flaga będzie przypuśćmy = 1 (funkcja while - wend) to wykona się podprogram odczytu z DS-ów. Coś takiego? While flaga = 1 1wreset 1wwrite &H55 1wverify Dsid1(1) 1wwrite &HBE Tp = 1wread(2) reset flaga wend A w przypadku gdy jest więcej czujników, np. trzy? To...
Odczytywać temperature po ustawieniu określonej flagi w przerwaniu. Kawałek kodu z mojego programu kiedy robiłem to jeszcze w Bascom Dim Flaga As Byte : Flaga = 0 On Timer0 Int_timer0 ' wskazanie do obsługi przerwania Timer 0 Const Factor = &H6A 'częstość wywołania przerwania timera Config Timer0 = Timer , Prescale = 64 'ustawiona na ok. 1,6ms Timer0...
Kod taki zdawkowy, ale domyślam się, że chodzi o brak histerezy. Dodaj histerezę. Zamiast jednego progu decyzyjnego na 3.35 robisz dwa. Jeśli mniej niż 3, 3 5 to Flaga = 1, ale drugi robisz trochę wyżej. Jeśli więcej niż 3, 4 5 to Flaga = 0 [syntax=vbnet] Select Case Wynik Case Is < 3.35 : Flaga = 1 Case Is > 3.45 : Flaga = 0 End Select[/syntax]...
flaga bascom bascom konfiguracja flaga obsługa flaga
aspire dioda akumulator robot reflektory brudne
STAG-4 nie przełącza na gaz: diagnostyka i rozwiązania Jak zrobić antenę ferrytową - krok po kroku