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.
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.
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
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...
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ę...
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...
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...
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...
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...
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.
...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" :?:
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.
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...
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ń...
Ja bym zdjął wszystko ze stosu i wykonał skok (czyli dał GoTo). Ale to trochę nieprofesjonalny sposób. Flaga będzie najlepsza.
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...
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...
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...
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...
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.
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...
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
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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.
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...
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-...
najnowsza wersja BASCOM jest dostępna zawsze jako update na stronie wydawcy, teraz to już jest 2.xxxxx
wszystko programuje w bascomie, niemam pojecia co to jest flaga BF, wiec pewnie z niej niekozystam, chyba ze nieswiadomie
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...
Bardzo prosto: Dim Flaga as Bit Flaga=1 Po wykryciu naciśnięcia klawisza (i odfiltrowaniu zakłóceń na stykach), wykonaj: Flaga=not Flaga
$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...
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...
[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.
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]...
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.
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...
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ć...
[syntax=vbnet]if flag = 0 then flag = 1 gosub buzzer[/syntax] Nie rozumiem tego. Kiedy flaga jest zerowana, a kiedy ma być ustawiana? Czy flaga = 1 kiedy jest podpięta ładowarka czy kiedy odpięta? Nigdzie nie widzę w kodzie zerowania flagi "flag=0" Więc po pierwszym ustawieniu flagi ma ona zawsze wartość 1
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 pomysł na co? Flaga (zmienna) status if status=1 then PowerDown(); else Wake(); :>:>:> Na co pomysł?:D
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.
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...
Może napisałbym to inaczej, ale to co napisałeś skróciłbym do takiej postaci ;) [syntax=vbnet]Dim N As Byte , Alarms As Byte , Helpb As Byte 'zmienne pomocnicze Dim Alarm As Byte , Alarm_nr(5) As Byte , Flaga_alarm(5) As Byte , Alarm_status(5) As Byte , Ustawiony As Byte Dim A_h(5) As Byte , A_m(5)as Byte If Sprawdz_alarm = 1 Then Sprawdz_alarm = 0...
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łę...
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"...
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"...
'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...
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ą...
Jak zmusić diodę alarmu do migania nie używająć procedur waitms ? Mam teraz zrobine tak: [syntax=vb]If T >= 1100 Then 'jezeli temp T > 110'C to...(10=1'C) Set Porta.5 'zapal diode LED Else 'inaczej Reset Porta.5 'zgaś diode LED End If[/syntax] Ale dioda jedynie świeci. Wiem, że trzeba by wykorzystać do tego timer, ale nie za bardzo oriętuję się jak....
Czy ktoś może mi podpowiedzieć jak sprawdzić stan flagi FE w UART? Nigdzie nie mogę znaleźć przykładu. A: If Fe = 0 Then nie działa (wywala błąd przy kompilacji).
Niestety ale nie wiem co to jest flaga w obsłudze przerwania i czym zastąpić wait 45 a chętnie bym sie dowiedział.
Jak dam dword to kompilator wywala mi blad niechce sie skompilowac...dlatego dawalem word i moze przez to niedzialalo. Pozniej sprubuje tylko na zaplonie pobujac i sprawdzic. Ale dziwne bo nawdr gdyby tam raz na jakis czas spadlo do 4L to srednia nie wyszla by 4L. Musialo by byc przez 10 pomiarow okolo 4L. Wrzuce tez pelny kod bo teraz pisze z kom....
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.
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.
$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...
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...
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...
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...
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...
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
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
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...
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...
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...
Tzn. ma być tak: Według Wikipedii 42-44 (w kolejności bity 44,43,42) dni tygodnia w BCD (1 = poniedziałek; 7 = niedziela) Dodam, że dzień tygodnia jest "wyciągany " w taki sposób: [syntax=basic4gl] '*********************** Podprogram wyświetlania zegara DCF na LCD Sectic: Strtime = Time$ ' z ciagu czas Bsec = Time(strtime) ' oblicz sekundy Strdate =...
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
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...
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...........
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 =...
Nie chce mi się wnikać szczegółowo w kod, ale pewnie gdzieś zapomniałeś ustawić/zresetować którejś z flag.
...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...
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...
If Flaga = 1 Then Toggle Portb.2 Else Ten zapis generuje Ci ciąg impulsów na wyjściu, zamiast "toggle" wystarczy "set".
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...
Witam sprawdź ten kod co prawda są inne numery portów i inny procek ale jak zmienisz powinno działać. Problem jest jeden w momencie jak naciskasz przycisk i zmieniasz końcówkę na WYJŚCIE to stan tego pinu Musi być (0) Niski , żeby nie zrobić zwarcia. '$sim $regfile = "attiny2313.dat" $crystal = 11059200 $baud = 9600 enable interrupts 'włącz...
Najprosciej napisz ja na przerwaniu - port RS 232 ustawia flage ze odebral bajt do bufora i mozna ja sprawdzac i wyjmowac bajt gdy flaga - lub podpiac to pod przerwanie i wtedy wyjac bajt - podstawa sprawnego programu.
Wracajac do tematu czy moglbym prosic przynajmniej o pseudo kod obslugi przykladowo drgania w przyciskach , wysterowania przekaznika np przez 2s oraz komunikacji 1wire jednym timerem (atmega8 ma az 2 timery wiec pewnie szybko skoncza sie jego mozliwosci chcac napisac kod bez zatrzymywania) Cały dowcip polega na tym że z tego 8 bitowego timera możesz...
Tak,oczywiście ze zamiast waitms muszą by warunki żeby procesor mógł odmierzać czas . Natomiast zawsze nie rozumiałem sensu flag .
Doradźcie, mam taki podprogram, wykonuje się w pętli co 1sekundę. Kombinuję zrobienie tych dwóch podprogramów na Select Case, z tym, że nie mogę przenieść tej całej składni do Case, wyskakuje błąd: LOCAL must be used outside structures such as IF THEN , DO and WHILE [TEMP_oblicz AS INTEGAR [syntax=vbnet] .....Do If Flaga_100ms = 1 Then 'co 100ms Flaga_100ms...
>G_B dzięki , punkty poszły do ciebie , tak się składa że wczoraj sam do tego doszedłem , poniżej program , może się komuś przyda (procek mierzy odległość za pomocą enkodera i wyświetla na vfd ) : $baud = 19200 $crystal = 11059200 Printbin 22 Dim Flaga As Bit Dim Licznik As Integer Do If Flaga = 0 Then Set P1.6 If P1.6 = 0 Then Flaga = 1 Set P1.5 If...
Szybko zajrzałem do noty PCF8583 i tam jest napisane, ze kiedy nie używasz funkcji alarmu to stan na pinie INT zmienia się na przeciwny co 500ms. Tak wiec impuls jest na tyle długi ze spokojnie można go traktować jak zwykły przycisk naciskany co sekundę. [syntax=vbnet]$regfile = "m32def.dat" $Crystal=8000000 $hwstack = 64 $swstack=32 $framesize = 128...
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...
flaga bascom bascom konfiguracja flaga flaga funkcja
połączenie scart połączenie scart rozmagnesować magnes zmiana regionu samsung
radzio modbus dobór dławików kompensacyjnych
Migające kontrolki w ekspresie DeLonghi - przyczyny i rozwiązania Ukryte menu w Pioneer DMH-G220BT - dostęp i funkcje