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.
Do pętli głównej przenieś w takim razie fragment struktury Select Case a zmienną niech będzie cas.Wartości jedynie od 0 do 4. Dlatego, że pozostałe wartości będą wyświetlane z instrukcji If then (alarmy). Do każdego jednak warunku case musisz wstawic Wait 1. Inaczej informacja wyświetli się na czas tak mały, że jej nie zauważysz. Ta strukturę Select...
No i gdzie ta flaga?
dodatkowa flaga
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...
...Niestety nic się nie dzieje - terminal wyświetla napis test i na tym koniec... A co spodziewałeś się zobaczyć w terminalu, bo chyba nie słowa "flaga" :?:
Timer w przerwaniu obsługuje wyświetlacz LED i inkrementuje zmienną byte, która w pętli głównej w instrukcji Case wybiera konkretne funkcjonalne fragmenty programu do wykonania, których wykonanie czasowo mieści się pomiędzy przerwaniami od timera. W przerwaniu od timera ustawia się także flaga przerwania, która uruchamia za pomocą If Then instrukcję...
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.
Żeby skasować flagę przerwania w rejestrze, musisz zapisać " 1 ". Znajdziesz to w dokumentacji mikrokontrolera. Cytat z polskiego tłumaczenia: Flaga jest zerowana po wykonaniu procedury obsługi przerwania. Lub może zostać wyczyszczona poprzez wpisanie logicznej jedynki do niej.
Jak już pisałem, dawno nic nie robiłem w bascomie, ale poniżej daję ogólny zarys opóźnienia dla przycisku przy użyciu licznika Config Timer0 = Timer , Prescale = 1024 Enable Interrupts On Timer0 , Czas Dim Flaga As Bit Main: Do If Pinx.x = 0 and Flaga = 0 Then Load Timer0 , 25 '0,0256s. dla 1MHz Enable Timer0 End If If Flaga = 1 Then Reset Flaga...
A po co tak teoretyzować - wystarczy zajrzeć do PDF'a scalonego odbiornika TFMS czy TSOP żeby zobaczyć jak należy postąpić nie tylko z linią sygnału wyjściowego ale też jak podać zasilanie. Ludziom nie chce się tam zajrzeć a potem zdziwienie, że nawet jak działa - to jednak jakieś błędy się wkradają, czasem jakieś zakłócenia itp (jak tam już zajrzysz...
Dane odbieraj w przerwaniu. Jak natrafisz na znaki "AT" to rozpoczynaj zliczanie 154 bajtów po czym ustawiaj flagę "Data_ready" czy jakąś taką i znowu czekaj na znaki "AT". A jak chcesz odbierać dane o rożnych długościach to czekaj na znaki "AT" i ustawiaj flagę po ich odebraniu. Tyle że odebranie poprzedniej ramki będzie wymagało pojawienia się początku...
Proszę bardzo, przykładzik jest lekką modyfikacją liczenia czasu w przerwaniu z książki Wiązani. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Timer0 = Timer , Prescale = 256 On Timer0 Przerwanie Dim Licznik8ms As Word Dim Flaga As Bit '1 juz czas, 0 jeszcze nie Enable Interrupts Enable Timer0 Load Timer0 = 250 Do 'wyslanie komendy...
Ja bym zdjął wszystko ze stosu i wykonał skok (czyli dał GoTo). Ale to trochę nieprofesjonalny sposób. Flaga będzie najlepsza.
Ja bym nie ufał i dopisał przed skopiowaniem bufora [syntax=vbnet] If Flaga Then Return[/syntax] a [syntax=vbnet] In_pos = 1 'Zmniejszamy wskaźnik bufora do 0 (usuwamy ramkę)[/syntax] przeniósł przed ten warunek.
Na pierwszy ogień drastycznie zmniejszy Ci sie program jesli zamiast łączonych warunków przez "AND" rozbijesz je na dwa pojedyncze IF'y tylko UWAGA - te które nie mają w sobie "ELSE" - z else musisz zostawić jak jest, bo zaczną się cuda dziać :) EDIT: I jeszcze mi się przypomniało... jak nadal będzie ciasno to wszystkie flagi - zmienne typu BIT - zamień...
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...
Prawdę mówiąc nie wiem czemu tak się dzieje, ale mam pomysł. Np. stawiać flagę w odpowiednim miejscu od kiedy ma reagować na zbocze, a w podprogramie sprawdzać na samym początku czy ta flaga jest ustawiona.
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...
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 =...
Nie napisałeś , że ten pilot nie pracuje w kodzie RC5 , ale też nie napisałeś , że w tym kodzie pracuje :wink: Inna wersja Twojego programu: $regfile = "m32def.dat" $crystal = 8000000 '11059200 Dim Adress As Byte , Command As Byte , X As Byte , Tmpcode As Word Dim Odebrano As Bit , Flaga As Byte Config Pind.2 = Input : Portd.2 = 1 Config...
Nie rozumiem do konca, jutro przeczytam jeszcze raz posta uwazniej (dzisiaj juz jestem zmenczony) Ja to widze tak: dim flaga as bit do if cos tam cos tam = cos tam then flaga=1 end if loop until flaga=1 flaga=0
Dokładnie tak, ma pisnąć jednorazowo po podpięciu ładowarki. Problem w tym że siedzę nad tym drugi dzień i nie wychodzi mi. Pomieszało mi się z tymi flagami.
Wystarczy zamienić funkcję wait na taką, która wykorzystuje timer - nawet niekoniecznie przerwania, po prostu czeka, aż stan timera zwiększy się o odpowiednią wartość (odczytujemy timer, obliczamy stan końcowy i czekamu w pętli aż timer tyle osiągnie) - taka pętla będzie w miarę niezależna od przerwań, no chyba że w tych przerwaniach spędzasz strasznie...
Wziąć timer i ustawić przerwanie np. co 50ms. W przerwaniu ustawić dwie- albo więcej flag. W pętli głównej sprawdzać czy flaga ustawiona. Jeśli tak- to wykonujemy coś co ma być wykonane co 50ms i skasować pierwszą flagę. Potem sprawdzać drugą flagę i zwiększać o 1. Jak osiągnie 750ms to odczytać temperaturę i ustawić żądanie pomiaru. Skasować drugą...
Witam a może coś takiego rozwiąże problem: dim flaga as bit dim a as byte do if P1.0 = 0 and flaga = 0 then a=a+1 'wartośc zwiekszana tylko podczas opadającego zbocza flaga = 1 end if if P1.0 = 1 then flaga = 0 end if loop Przy wykorzystaniu wejśc P1.0 i P1.1 w układach typu 89C2051, 89C4051 itp. należy pamiętac o podciągnięciu tych wejśc do plusa zasilania...
Nie analizowałem Twojego programu- ale może to Ci się przyda. Może moje stare belferskie umiejętności (teraz to się nazywa- zdolności pedagogiczne) jeszcze całkiem nie zanikły. 'Program poglądowy do unikania wait 'Prescale oczywiście można zmienić 'licznik też i Temp0 też $regfile "m8def.dat" $crystal = 8000000 Config Lcd = 20 * 2 Config Lcdpin...
Jak używasz jakiejś bardzo starej wersji spolszczonej to możliwe, ale Demo2075 już nawet to potrafi. Możesz użyć Twojej poprzedniej konfiguracji z Load Timer, ale dodaj ustawianie tej flagi 5ms w przerwaniu.
Nie chce mi się wnikać szczegółowo w kod, ale pewnie gdzieś zapomniałeś ustawić/zresetować którejś z flag.
A czy nie najprościej jest zadeklarować jakąś flagę jednobitową i w obsłudze jednej sekundy robić jej komplementację i w zależności od tego czy flaga=0 wyswietlać spację a flaga=1 wyswietlać ':'.
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...
Prawdopodobnie jest tak jak piszesz , tylko w bascomie flaga jest chyba kasowana automatycznie po skoku w przerwanie , a na początku przerwania jak nie dałem disable int0 , to program lubił się zawieszać , albo robił kaszanę na wyświetlaczu.
Jeśli chcesz zrobić wait na liczniku to możesz uzyskać dwa efekty. W obu ustawiasz w przerwaniu flagę. Pierwszy do instrukcja czekaj aż flaga będzie ustawiona wykonuj dalszy ciąg programu loop Generalnie w takim rozwiązaniu nie ma sensku dawać timera. Druga opcja do instrukcja if(flaga ustawiona) reszta kodu loop Oczywiście drugie rozwiązanie...
Np. tak: Set Flaga : While Flaga = 1 : Wend to umieszczasz raz lub kilkakrotnie w odczycie z DS-a. Część umieszczona poniżej tego wykona się dopiero jeśli flaga zostanie zresetowana. Flagę resetujesz po wykonaniu przerwania.
le sorry, moj blad myslalem ze to program, a to byl koment do programu. Co do tego return. Jak dobrze widze to jest to sub a nie przerwanie lub podprogram. A wracasz z suba normalnie przez end sub. Dodano po 5 widze, ze masz tam petle to dodaj flage (zmienna jedno bitowa) do tego ifa i zrob loop until flaga. Dam ci przyklad: dim flaga as bit flaga=0...
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...
No przecież prosto. Konfigurujesz timer1 do pracy w normalnym ale nie robisz start timer. robisz przerwanie dzialajace na zbocze np. narastające-> Dalej : robisz zmienną flaga w przerwaniu robisz if flaga=1 then start timer1 flaga=0 else stop timer1 w rej od timera masz czas... kopiujesz gdzie Ci tam pasuje flaga=1 zerujesz licznik endif I tyle, oczywiście...
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...
Tak,oczywiście ze zamiast waitms muszą by warunki żeby procesor mógł odmierzać czas . Natomiast zawsze nie rozumiałem sensu flag .
Proszę. Nie opisywałem go i tutaj może wyglądać dziwnie, ale u mnie rysuje linie łączące bloki. Wygląda to jak na załączonym obrazku i nie mam potrzeby dla takiego kodziku tego opisywać. http://obrazki.elektroda.pl/9672124500_1... Błąd mógł się wkraść bo to tylko tak z doskoku dla relaksu napisałem w pół godzinki. Życzę owocnego testowania...
Witam, O Histerezie też myślałem ale nie za bardzo wiem jak to ugryź w realizacji. Teoretyczne wyglądało by to tak: Zmierz wartość temperatury, porównaj z zapisaną poprzednio w TEMP'ie, jeżeli jest o X procent większa lub mniejsza to zareaguj na to. Ale jak to wykonać w programie?? Nie za bardzo wiem. Prosto. Do histerezy musisz mieć: * dwa poziomy...
Dla sprawdzania jednego klawisza: do ... ... ... gosub sprawdzanie_klawiszy if flaga = 1 then instrukcje gdy wciśnięty klawisz end if ... ... ... loop sprawdzanie_klawiszy: flaga = 0 if Ok = 0 then waitms 50 if Ok = 0 then flaga = 1 end if end if return mniej więcej tak to ma wyglądać. Jeśli chcesz sprawdzać kilka klawiszy robisz bardzo podobnie....
Przerwanie od RFM12 [syntax=basic4gl] '*************************************** Przerwanie INT2 - od RFM12 Int2_rfm: Disable Int2 Disable Interrupts Flaga_rfm = 1 Sd_card = 1 ' zablokowany zapis do karty SD Gosub Rf12_receive D1 = Received_data ' ciag inicjujacy - $TEMP / $DATA Gosub Rf12_receive D2 = Received_data ' ciag inicjujacy - $TEMP / $DATA Gosub...
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-...
Nigdy tego nie robiłem z rozrzutności, ale teraz chcę zoptymalizować troche swój program. Deklaruje zmienne będące flagami determinującymi różne warunki w jakiejśc tam nieskończonej pętli programu. Flagi są ustawiane przez procedury, funkcje lub przerwania. Dim flaga1 as Byte Dim flaga2 as Byte ... Dim flaga8 as Byte Zajmuje mi to 8 bajtów. Czy zmiana...
Dostosuj do swoich potrzeb i spróbuj tego: Dim I As Byte Dim J As Byte Dim K1 As Byte Dim K2 As Byte Dim K As Byte Dim Flaga As Byte Dim Pomoc As String * 2 Dim Pomoc2 As String * 1 Dim Dlugosc1 As Byte Dim Dlugosc2 As Byte Dim Numer_tel As Byte Dim Komunikat As String * 80 Dim Numer_gsm As String * 13 Numer_gsm = "48604604604" ' tu wpisz...
1. Można wykorzystać przerwanie sprzętowe. 2. Umieścić pętlę w pętli głównej, która sprawdza tylko jeden klawisz w zależności od flagi, którą ustawisz on/off , jeśli on pętla wykonuje się jeden raz a tym samym wykonuje się pętla główna, jeśli off pętla wykonuje się dopóki nie naciśniesz klawisza i ustawisz flagę na on
Czy tak może być? Nie. Po komendzie: "1wwrite &H55" Spodziewana jest komenda wpisu adresu adresu device do której odnoszą się dalsze komendy, ponadto: Błędem jest stosowanie tejsamej flagi (niby stopniowej) do wielu operacji bez jej kasowania. Zauważ że flaga=1, lub flaga =2 utrzymuje sie przez dłuższy czas, o wiele dłuzszy niż 'przewinięcie 'pętli...
[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.
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 =...
mała podpowiedź było troche błędów w Twoim programie i przeczytaj co dopisałem wyżej odnośnie pull up [syntax=basic4gl]'----------------------... '--------------------KONFIGURACJA-------... $regfile = "m8def.dat" 'informuje kompilator o procesorze $crystal = 8000000...
Witam Mam płytkę sterującą dwoma kanałami PWM - przez ULN oraz MOSFETY. Płytka ma dwa wejścia oraz wejście czujnika PIR - INT1. Ma przede wszystkim sterować włączaniem taśmy LED 12V z czujnika PIR ( oprócz tego z drugiego wejścia ). LED włączona przez PIR ma docelowo świecić określoną ilość czasu ( zależną od natężenia światła ) i się wyłączyć. Żeby...
Bardzo prosto: Dim Flaga as Bit Flaga=1 Po wykryciu naciśnięcia klawisza (i odfiltrowaniu zakłóceń na stykach), wykonaj: Flaga=not Flaga
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...
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...
Mam już gotową płytkę, impulsy z obrotomierza kieruję na ICP tak jak zasugerował tmf. I teraz pytanie do Was czy pomożecie w pisaniu programu, żeby odpalić obsługę tego ICP ? Obecnie mój program wyglada tak: [syntax=vb]'--------------------KONFIGUR... $regfile = "m16def.dat" 'informuje kompilator o pliku...
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.
$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 Portb.1 Declare Sub Buz Declare Sub Buze Declare Sub X Dim Flaga As Bit Dim I As Byte Flaga = 0 Call X Do If S1 = 0 Then Waitms 45 If S1...
najnowsza wersja BASCOM jest dostępna zawsze jako update na stronie wydawcy, teraz to już jest 2.xxxxx
Strzala86. Zmień myślenie o istocie działania programu. Program nie powinien czekać na jakieś zdarzenie. Za pomocą timera oraz zmiennych, które potocznie nazywane są flagami można napisać program tak, żeby cały czas działał bez opóźnień. Przykład takiego programu masz poniżej: http://www.elektroda.pl/rtvforum/topic17... Jest tam nawet przyład...
Ale pomysł na co? Flaga (zmienna) status if status=1 then PowerDown(); else Wake(); :>:>:> Na co pomysł?:D
Jest tego sporo, DCF77, 7 x DS18B20 i DHT11 ( akurat jeśli chodzi o niego to mam wątpliwości, czy ten kod działa, bo jest na obydwu płytkach podpięty i zdarza się zawieszenie ) Nadajnik Atmega328p Dodano po 16 Odbiornik Atmega644P - trochę zmieniłem obsługę przerwania, wydaje mi się, że w przerwaniu nie powinno się wykonywać dużych obliczeń. [syntax=basic4gl]...
No dobra to tak trochę "po chłopsku" to opiszę: Jeśli ustawisz Bytematch = 13 to znaczy to tyle, że program przejdzie od podprogramu w którym może być tylko jedna linijka np. jak ja to zrobiłem w moim programie wysylania sms: Serial0charmatch: Input Todczyt Noecho Return Oczywiście trzeba ustawić Input na działanie tylko na znak enter (13). Proste...
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ć...
Mam prośbę do tych znających lepiej BASCOMA, o przeanalizowanie tego kodu. Program po pewnym czasie wysypuje się. Temperatura co jakiś czas waruje. Podprogramy działają, ale całość nie chce współpracować. Z góry przepraszam za jakość kodu. [syntax=vb]'--------------------KONFIGUR... $regfile = "m16def.dat"...
Tzn. zrobiłem odczyt - pierwszy czujnik co 1 minute i 1 sekundę - drugi czujnik co 2 minuty i 2 sekundy ale wczoraj po jednej dobie poprawnej pracy zawiesił się, więc teraz mam dwa razem ( oczywiście na osobnych liniach ) i dział już nieco ponad dobę. Ale spróbuję ( tzn. poczekam aż się zawiesi ) np. co dwie minuty i zmieniać na przemian przez flagę.
Wydaje mi się że masz bład w transmisji ze względu na to że masz kwarc 4Mhz i baud 1200. Tak przy okazji zegar masz przestawiony na wewnetrzne 4MHz czy zewnetrzny kwarc? Jesli na zewnetrzny to ustawiles prawidlowo fuse bity?? Podam Ci prosty program który u mnie dziala bez zarzutu przy kwarcu 8MHz i predkosci transmisji 9600: $regfile = "m32def.dat"...
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łę...
wszystko programuje w bascomie, niemam pojecia co to jest flaga BF, wiec pewnie z niej niekozystam, chyba ze nieswiadomie
Witam Mimo, że większość proponowanych tutaj rozwiązań podłączenia RFM12 do Atmegi wykorzystuje SPI programowe, ja podłączyłem tradycyjnie, przez SPI sprzętowe - mimo, że nie miałem problemów z wgrywaniem kodu do Atmegi spiętej z RFM12, to uruchomienie ich razem jest problematyczne ( każde osobno działa bez problemu ) [syntax=basic4gl] $include "Config_AVR-DOS.BAS"...
Niestety ale nie wiem co to jest flaga w obsłudze przerwania i czym zastąpić wait 45 a chętnie bym sie dowiedział.
'Działa od 30rpm do 300000rpm $regfile = "m8def.dat" $crystal = 8000000 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 Config Timer1 = Timer , Prescale = 64 Config Int0 = Rising Dim Flaga As Byte Dim Text As String * 10 Dim Wynik As Single Dim Zmienna As...
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...
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.
W tym drugim (niedziałającym) programie nie ma flagi. przekazuję tylko dane w 2 zmiennych. no i masz co masz - przez akurat takie przekazywanie, przecież efekt sam widzisz Nawiasem to tam w Twoim przykładzie powinno być bit zamiast byte. Może być Bit ale nie musi - ja zawsze stosuję Byte bo czasem u mnie flaga może przybrać inne wartości niż 0 albo...
Ale nie blokuje przerwań. Przycisk przenieś na PD2 lob PD3, ustaw zezwolenie obsługi przerwań i przerwania zewnętrznego, ustaw obsługę tego przerwania np. on INT0 ustaw_flage ustaw_flage: flaga=1 return i wpisz zamiast: "If Pinb.0 = 0 Then" "If Pinb.0 = 0 or flaga=1 Then" P.S. Ale obsługi Timerów powinieneś się tez nauczyć.
A może po prostu dodaj sobie flagę którą ustawiaj po wykonaniu pierwszego przerwania. W drugim przerwaniu sprawdzaj czy flaga ustawiona. Jeśli tak to wykonuj coś tam jeśli nie to nic nie rób.
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...
poza tym dlaczego nie używasz sprzętowych timerów jako timerów tylko do generowania przerwań? Kolego może źle mnie zrozumiałeś ale do ustawiania flagi używam Timer0 i właśnie mnie dziwi dlaczego mi się te czasy nie zgadzają Jak do wyznaczenia czasu używam tego samego timera. Tak wygląda obsługa przerwania u mnie : Timer może zliczać czas wprost i w...
AVE... DS18B20 posiada dwa rejestry: Th(bajt 2) i Tl(bajt 3). Jeśli temperatura jest niższa lub równa Tl albo wyższa lub równa Th, to układ ustawia flagę alarmu. Komendą Alarm Search[ECh] można sprawdzić, czy flaga jest. Bascom, PICBasic oraz różne dialekty C dla mikrokontrolerów posiadają gotowe biblioteki i komendy obsługi 1-Wire... Dzięki tym rejestrom...
A jest $regfile "m8515.dat" ? Zresztą może Bascom nie chce rejestru w if. Może tak: Dim moja _flaga as bit moja _flaga= ADCSRA.FE if moja_flaga=0 then
$crystal = 8000000 $regfile = "M16def.dat" $hwstack = 128 Tu zmieniasz wg wlasnych parametrow '- deklaracja zmiennych dla usart ---------------------------------------- Dim Index As Byte 'kolejny znak w buforze odbioru Dim Odebrano As Bit 'flaga ustawiona po odebraniu znaku Dim Buf(10) As Byte 'bufor wejsciowy - 10bajtow '- konfiguracja...
Znalazłem coś takiego, czy oto chodziło ?? Config Serialin = Buffered , Size = 32 , Bytematch = 13 '... If Flaga = 1 Then Input String_var Reset Flaga End If '... Serial0charmatch: Set Flaga 'można odczytać znaki z bufora poprzez np. Input String_var Return
Ldi R30, 28 Ldi R31, 78 Rcall _lcd_delay ; 20 ms delay at 4 MHz Witam, przedstawiony kod asemblerowy jest niezmiernie prosty w edytowaniu i zmienianiu parametrów instrukcji. Ldi - jak każdy wie, to ładowanie odpowiedniej wartości do rejestru Rcall - wywołanie programu. _lcd_delay: Sbiw R30,1 ;2 cycles Brne _lcd_delay ;2 cycles Ret Sbiw - instrukcja...
...miałbym jeszcze jedno pytanie,mam jeszcze jeden podprogram który miałby cofnąć zegarek do tyłu każdego roku w październiku niestety cofając z godziny trzeciej na drugą już cały czas tak się cofa czyli dojdzie do 3 i wskakuje na 2,jak zrobić żeby szedł dalej czyli po przejściu z godziny 3 na drugą już dalej się nie cofał Zastosuj flagę. jeżeli trzeba...
Witam, jak wiadomo (przynajmniej mi narazie) z helpa Bascoma - zwykłe polecenie PRINT generuje na końcu dwa dodatkowe znaki CR i LF Niekoniecznie :D Za pomocą polecenia PRINT , można wysłać stringa zakończonego ... praktycznie dowolnym znakiem - również sterującym. Print "Zmienna" ; Chr(13) ; ' średnik zakazuje wysyłania znaków sterujących. ... druga...
Co to za przykład ? jak widzisz nie jestem początkującym wiec nie podaje kodu bo jest to zbędne ale jak już tak chcesz to proszę - narysowane kolorowymi kredkami prościej się nie da - i tak nadal to samo dla ludzi co wiedzą o co chodzi [syntax=basic4gl]$crystal = 16000000 Config Timer0 = Timer , Prescale = 64 Enable Timer0 : On Timer0 Prztimer0 do loop...
Witam, W jaki sposób w Bascomie uruchomić TWI bez korzystania z dodatkowych bibliotek - Atmega8 jako Slave Receiver? Próbowałem (piszę z pamięci tak w skrócie, korzystałem z PDF'a): Enable Interrupts Enable TWI ' lub ustawiałem odpowiedni bit w rejestrze TWCR 'TWBR i bity preskalera ustawiałem na "0" i na 400kHz On TWI Sprawdzaj Do if Flaga=1...
Bez przerwania od INT0 wydaje mi się że się da,ja bym to zrobił tak w funkcji odczytującej z rtc dopisał bym takie cos: If Rtcsec = Staresec Then Flaga=0 Else Flaga = 1 Starecec = Rtcsec endif Czyli za każdym odczytem bedzie sprawdzane czy stare sekundy są zgodne z nowymi (config clock już nie potrzebne) jeżeli tak to nic sie nie wykona flaga=0 jeżeli...
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...
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...
wydaje mi się że postąpiłem zgodnie z opisem, a jednak podczas wykonywania pracy przez toggle nie mogę nic innego zrobić;/ [syntax=basic4gl]Dim Znak As Byte Dim Flaga As Bit Dim Flaga1 As Bit Dim I As String * 1 Dim Z As Byte Flaga = 0 Z = 0 Do If Flaga = 1 Then If Znak = 97 Then For Z = 1 To 40 Toggle Portd.0 Waitms 20 Next Z. Print Znak If Flaga =...
Na pierwszy problem lekarstwem jest przeniesienie Loop przed etykietę Sciezka. Drugi można rozwiązać np tak: Dim Flaga As Byte Do If PinA.0=0 Then Flaga=0 If PinA.1=0 Then Flaga=1 If Flaga=0 Then Gosub Sciezka If Flaga=1 Then Gosub Odliczanka Loop
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...
Emarus, dokładnie jak pisze Wojtek. Przerwanie leci co 4ms W podprogramie przerwania zliczam je 25 razy aż osiągnę 100ms i wtedy wystawiam sobie flagę irq100ms
Poopuszczałeś trochę, a do tego literówki i dlatego wyrzucało błędy. Ten program kompiluje sie poprawnie. $regfile = "attiny2313.dat" $crystal = 11059200 $hwstack = 32 $swstack = 10 $framesize = 20 'DEKLARACJA ZMIENNYCH I PROCEDUR Dim Flaga As Bit , Flaga1 As Bit Dim Wylacz As Byte , Znak As Byte , Adres As Byte , Licznik As Byte Dim Znak1...
już dawno nie używam bascoma więc nie pamiętam jeak jego polecenia dokładnie wyglądały ale poczytaj o pętli for i poleceniu rotate. mniej więcej by to tak wyglądało: Do pętla for (wykona się określoną przez ciebie ilość razy np. 6) waitms x rotate (przesunięcie bitu na porcie) koniec pętli jakieś działanie np. wyzerowanie portu obsługiwanego w poprzedniej...
If Flaga = 1 Then Toggle Portb.2 Else Ten zapis generuje Ci ciąg impulsów na wyjściu, zamiast "toggle" wystarczy "set".
Dzień dobry, Znalazłem kod źródłowy sterownika pieca C.O. w internecie i chciałbym zrozumieć ideę działania TIMERA0 w Bascomie na podstawie poniższego kodu. Czy ktoś z Was może mi wytłumaczyć jak to liczyć? Jak dopasowywać obliczenia do innych rezonatorów kwarcowych. Czytam helpa i nadal nie mogę tego pojąć. Proszę o wyrozumiałość. Na początek zapytam...
Właśnie ten chyba mi nie działa ... mam moduł SIM800L dokładnie taki jak w tym linku https://www.youtube.com/watch?v=-okAX7Zo... , znalazłem w necie coś takiego, nie wiem czy telefon się zalogował do sieci mam kartę , na której mogłem wybrać numer telefonu w sieci GSM a jest zarejestrowana według UE prawa [syntax=vbnet] $baud = 19200 Declare Sub Wyslij...
bascom flaga bascom konfiguracja flaga flaga funkcja
licznik energii filtr czujnik klamka amortyzatory pralki whirlpool wymiana
Kierownica nie działa po podłączeniu do portu USB Custom ROM dla tabletu QSmart TB-707 - dostępność i ryzyko