Najprościej - przed komunikacją z termometrem daj Disable Interrupts, a po komunikacji Enable Interrupts.
Może powinieneś włączyć przerwania - enable interrupts .
A czy to też nie działa : Config Watchdog = 16 Start Watchdog Disable Interrupts być może Bascom odblokowuje przerwania w starcie watchdoga?
Spróbuj tak: Menu: Disable Int0 Disable Int1 Enable Interrupts Cls
Ściągnij najnowszego bascoma z MSC Electronics bo starsze wersje czasami się dziwnie zachowują. Raz miałem taką w której wydanie polecenia Enable Interrupts generowało błąd :)
Witam. Pytanie odnośnie kompilatora Bascom AVR. Załóżmy, że w programie wykorzystuję dwa przerwania. Pierwsze pochodzi od nóżki Int0, drugie od przepełenienia Timer 1. Czy (i kiedy) w procedurze przerwania powinienem stosować wyłączanie przerwania na czas jego obsługi? Niby Bascom udostępnia gotowe disable interrupts (wyłącza cały system przerwań) oraz...
Wklep na początku przerwania : Enable Interrupts Wywnioskowałem to z pomocy bascoma (polecenie on Interrupt)
Czy moglby ktos wytlumaczyc roznice pomiedzy : Enable Int0 a Enable Interrupts Zauwazylem, ze we wszystkich programach, zezwalamy ogolnie na przerwania (Enable Interrupts ) a potem jeszcze raz na dane przerwanie( Enable Int0 ) .
Oprócz tego co napisał Balu to ustaw sobie INT0 aby było wykonywane za pomocą opadającego zbocza. Przykład: Config Int0 = Falling On Int0 wylacz Enable Interrupts Enable Int0 ...... wylacz: ....... return
Wskazówki : [syntax=basic4gl] Config Serialin = Buffered , Size = 254 , Bytematch = All Enable Serial Enable Interrupts Serial0bytereceived: Return [/syntax]
Musisz właczyć przerwania . Dodaj na początku programu sei lub inaczej enable interrupts
...Dałem polecenie debounce i powinno zwiększyć zmienną o 1 i poczekać do puszczenia przycisku, ale nawet szybkie naciśnięcie zwiększa zmienną o kilkadziesiąt jednostek. Może chodzi o przerwania? Może to być "sprawka" przerywań, proponuję na początek: [syntax=basic4gl]Klik: Disable interrupts Incr Bsend If Bsend = 100 Then Bsend = 0 Enable Interrupts...
Disable Interrupts 1wreset Enable Interrupts Disable Interrupts 1wwrite &HCC Enable Interrupts Disable Interrupts 1wwrite &H44 Enable Interrupts Waitms 750 'czas konwersji 750 ms Disable Interrupts 1wreset Enable Interrupts Disable Interrupts 1wwrite &HCC Enable Interrupts Disable Interrupts 1wwrite &HBE Enable Interrupts Najgorzej to z tym: T(1)...
Przenieś Enable Pcint0 i Enable Pcint3 zaraz przed Enable interrupts, albo zobacz co sie stanie jak skasujesz flagi tych przerwań. PCIFR.PCIF0 = 1 PCIFR.PCIF3 = 1
Przecież mam włączone przerwanie komendą enable interrupts :)
Łopatologicznie: Najpierw ładowana jest stara zawartość rejestru odpowiedzialnego za włączanie lub blokowanie przerwań (korzysta z tego np. polecenie ENABLE). Potem włączane jest przyjmowanie przerwań z linii INT4, tak jakbyś wykonał ENABLE INT4. A na końcu nowa zawartość rejestru zostaje zapisana w pamięci procesora. I od tej pory przerwania z INT4...
Napisz co sam jeszcze sprawdziłeś. Używałeś kiedyś tej Megi32 czy jest nowa? Czy spróbowałeś napisać krótki kod testowy żeby sprawdzić czy mikrokontroler poprawnie steruje wyświetlaczem? [syntax=vbnet] Lcd "Test LCD" Wait 1 Cls '...dalsza czesc kodu[/syntax] Są pewne podstawowe rzeczy które można doczytać i/lub sprawdzić samemu. Znajdź też ten fragment...
Ischarwaiting() działa tylko w połączeniu z Config Serialin = Buffered i do tego Enable Interrupts .
Rzuciłem okien na kod i nie znalazłem w procedurze wyświeltlania po I2C "DISABLE INTERRUPTS". Powinno pomóc. Możesz też wyłączać tylko INT0 lub INT1. Pamiętaj tylko by je potem włączyć po zakończeniu wyświetlania ("ENABLE INTERRUPTS").
Witam... Ja bym nie bawil sie w komparator i ... tylko wzioł cfrowy termometr 1-wire np DS1822, DS1821(swoją drogą da sie go zaprogramować jako termostat) no ale można zrobić to w rózny sposób, wracam do tematu postu... Przerwanie od komparatora w BASCOM Config Aci = On , Compare = Off , Trigger = Toggle On Aci Przerw Enable Interrupts Enable Aci coś...
Taki jest Bascom niestety. Wiele rzeczy w tym kompilatorze czasem powoduje bardzo dziwne zachowanie, bo W TEORII enable disable interrupts powinno zablokować wszystkie przerwania...
Witam ! W listingu brakuje: Enable Interrupts Pozdrawiam. Stefan
Dodaj to: [syntax=basic4gl]'---PRZERWANIE OD TIMERA 2---------------------------------------... Ms: Enable Interrupts '<-To ... ... ... Disable Interrupts '<-To Return[/syntax]
[syntax=basic4gl]Enable Timer0 Enable Interrupts[/syntax] Tu znajduje się problem. Bascom 1.11.9.8
Enable Timer1 oczywiście też musi być. I globalne Enable Interrupts. Ale Disable Timer1 nie jest potrzebne.
hmmm Przede wszystkim: Enable Interrupts On Timer0 Przerwanie Stop Watchdog Config Timer0 = Timer , Prescale = 1024 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256 'PWM=250Hz Load Timer0 = 195 To włączenie przerwania jest wstrętne w tym miejscu:P Co do wniosków... może spróbuj zwiększyć stos o...
I może troche głupie pytanie ale myśle nad tym już troche czasu i nic nie moge wymyślić a dokładniej jak procerura Do 'set up a 1 sec accurate DO NOTHING loop Enable Interrupts 'wait 1 as per BASCOM-51 is not accurate For Delayword = 1 To 45440 Next Delayword Disable Interrupts dla mikrokontrolera AT89C2051 z kwarcem 24MHz odlicza dokładnie 1 sekunde?Znalazłem...
Oto prosty przykład: $regfile = "m8def.dat" $crystal = 4000000 Config Timer1 = Pwm , Prescale = 1 , Compare A = Disconnect Compare1a = 32768 On Compare1a Oc1a_int Enable Compare1a Enable Interrupts Do nop nop nop nop Loop Oc1a_int: nop nop nop Return Reszta opisana w Helpie :wink: Piotrek
Spróbuj tak: $regfile = "m8def.dat" $crystal = 8000000 Config Portd.7 = Output Portd.7 = 0 Config Clock = Soft Time$ = "12:40:00" Enable Interrupts Do If _min = 41 Then '60s później włącza przekaźnik Portd.7 = 1 End If Loop End
A jak zakomentujesz program między enable a disable interrupts tam gdzie odbierasz temp. z termometru?
Sprawdziłem ten kod przed chwilą i jeśli na PD6 jest przycisk.. to jego kolejne naciskanie włącza lub wyłacza naprzemiennie diode LED na pinie PORTD.7 100% tested [syntax=vbnet]$regfile = "m644pdef.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 Pcmsk3 = &B01000000 Enable Pcint3 : On Pcint3 Pcint3_isr Config Portd.6 = Input : Set...
Zgodnie z wskazówkami robię tak: Config Pcint0 = Falling On Pcint0 Program Enable Interrupts Enable Pcint0 Bascom wywala mi błąd podczas kompilacji ze nie am takiego źródła przerwania pcint0. Dzięki za pomoc, niestety nie znam na tyle dobrze angielskiego żeby poradzić sobie z notą :(
Użyj Timer'a 2 i wszystko będzie cacy. Pzdr. A piny to się konfiguruje tak: Config Pinb.1 = 1 a nie Portb.1. Przydaje się też wrzucenie linijki z def'em procka: $regfile = "M8DEF.dat", zresztą: $crystal = 8000000 $regfile = "M8DEF.dat" Config Timer2 = Timer , Prescale = 256 On Timer2 Przerwanie Dim A As Byte , B As Byte Config Lcd = 16 * 2 Cursor Off...
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...
Szukając w dokumentacji frazy PCINT, znalazłem przykład czytnika tagów HITAG. Jest tam interesujący... komentarz :-) 'you need to use a pin that can detect a pin level change 'most INT pins have this option 'OR , you can use the PCINT interrupt that is available on some chips 'In case you want PCINT option ' Pcmsk2 = &B0000_0100 'set the mask to ONLY...
Nie jestem bascomowcem bo programuje mikrokontrolery zawodowo, więc... Ale spróbuje ci pomóc. Przerwanie odebrania znaku nazywa się URXC. Piszesz: enable URCX enable interrupts on URCX nazawa_podpr nazawa_podpr: tu obsługa przerwania return Nie wiem czy dobrze słabo znam bascoma. Poszukaj jeszcze na forum i w helpie bascoma.
$regfile = "m8def.dat" $crystal = 1000000 Config Pinc.0 = Output Config Pinc.5 = Output Dioda1 Alias Portc.0 Dioda2 Alias Portc.5 Config Int1 = Low Level Config Rc5 = Pind.2 On Int1 Przzew0 Dim Komenda As Byte , Adres As Byte Dim Odebrano As Bit Enable Interrupts Enable Int1 Do If Odebrano = 1 Then If Adres = 0 Then 'pilot o adresie 0 toggle...
powinno byc cos takiego (to tylko fragment kodu) dim znaki(19) as byte dim licznik as byte licznik=0 enable interrupts enable urxc on urxc odbierz 'jak odbierze znak to przerwanie do:loop:end 'glowna petla tu robisz co chcesz odbierz: znaki(licznik)=inkey()'o... znak trafi do tej zmiennej incr licznik if licznik...
Ja bym dał Disable Interrupts i Enable Interrupts pomiędzy wszystkimi operacjami 1Wire: [syntax=basic4gl]Sub Inicjowanie_ds: Disable Interrupts 1wreset Enable Interrupts Disable Interrupts 1wwrite &HCC ' &H CC skip rom Enable Interrupts Disable Interrupts 1wwrite &H44 ' &H 44 convert T Enable Interrupts End Sub[/syntax]
(at) teedd nieznajomość asemblera się kłania... Niestety nie da się znać samego bascoma jak się chce wiedzieć co on robi... Jeśli jest sprzętowy skok do procedury przerwania to na końcu jest return (co jeśli piszesz w bascomie on tłumaczy jako RETI (o ile to jest procedura obsługi przerwania!) )... Czyli return 'n' enable interrupts;)
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...
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...
może kolejność i bez Nosave : [syntax=basic4gl] Config Int0 = Low Level On Int0 Przerwanie Enable Interrupts Enable Int0 [/syntax] jaki masz procesor ?
Udało się rozwiązać problem :) Zrobiłem to tak: [syntax=basic4gl]If Autoret > 0 Then Ust = 1 Decr Autoret If Autoret = 0 Then Gosub Zapis End If Else Ust = 0 End If[/syntax] [syntax=basic4gl]Zapis: Disable Interrupts Writeeeprom Tu , 35 Portd = &B11111111 Waitms 200 Enable Interrupts Return[/syntax]
dim urx_bufor(5) as byte dim urx_licznik as byte dim urx_odebrano as bit ... urx_licznik=1 'to jest potrzebne dla bascom'a bo tablice zaczynaja sie od 1 a nie 0 enable interrupts ... przerwanie_urx: if urx_licznik<5 then urx_bufor(urx_licznik)=udr incr urx_licznik end if if udr=13 then set urx_odebrano 'odebano ENTER if udr='T'...
Musisz w przerwaniu ponownie załączyć system przerwań komendą enable interrupts
A to kod z książki. Wyprubuj go, tak dla pewności czy nie ma tam błędu. 'Program odbierający kod standardu RC5 'w przerwaniu Int0 'Na LCD numer adresu i kod polecenia. $regfile = "m8def.dat" $crystal = 8000000 Config Int0 = Low Level Config Rc5 = Pind.2 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Pinc.2 , Db5 = Pinc.3 , Db6 = Pinb.2 ,...
Witam. A może tak prościej? 'Odbieranie kodu RC5 $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portd.0 , E = Portc.4 , Rs = Portc.5 Config Rc5 = portd.2 Dim Address As Byte , Command As Byte Enable Interrupts Do Getrc5(Address , Command) Command...
Potrafi obslugiwac przerywania-tak w ramach pelnej odpowiedzi (cyberdar) Z tym, ze napisalbym tak: On Timer0 Obsluga Enable Timer0 Enable Interrupts Load Timer0 , 50 Start Timer0 Pozdrawiam
Moim zdaniem jakoś dziwnie masz te przerwania sterowane. Po co w przerwaniu masz Enable Interrupts - włączasz raz na początku i nie wyłączasz. Disable Int0 w pętli głównej też raczej nie jest dobrym pomysłem. Przed Enable Int0 proponuję dopisać zerowanie flagi przerwania, a na końcu (pętli) idle - dzięki temu po przerwaniu pętla zacznie "iść" od początku.
W Bascomie można niby implementować nieco ASM, lecz nie wiem w jakim stopniu... Co do niwelowana drgań styku, to może zacznijmy najpierw od ustalenia, czy jest sens to robić. ;) Włączenie kondensatora równolegle do przycisku chyba nie zmieni za dużo, w każdym razie szukam najlepszego rozwiązania. Z kolei [url=http://www.qsl.net/pa3ckr/bascom%20...
marcinek.p - to gotowiec dla ciebie, nie mam jak go przetestować ale jestem pewien że zadziała jak trzeba. Masz tu przerwanie, miganie led i zliczanie migniec z incr Mozna to wszystko wkleic do przerwania ale dobra zasada nakazuje w przerwaniach umieszczać jak najmniej kodu. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 1000000 $hwstack = 32 $swstack...
Jak w temacie... zwieram pind.2 do masy i nic:( może powinienem przez jakiś opornik? oto kod w bascomie: Enable Interrupts Config Pind.2 = Output Set Pind.2 Config Int0 = Falling On Int0 Przerw Enable Int0 Cls Display On Cls End Przerw: Lcd "OK" Return
Config Timer0 = Timer , Prescale = 32 Enable Interrupts Enable Int0 On Int0 Przerwanie1 Nosave Cls 'tutaj wysyłasz impuls pierwszy start timer0 Do : Loop Przerwanie1: stop timer0 'tutaj co ci sie podoba lcd "odleglosc:" ; wynik 'co tam jeszcze chcesz 'wysyłasz impuls start timer0 return End
Żeby być pewnym na 100% to jak odczytać temperaturę z 2 czujników DS18B20? pierwszy czujnik: 1wreset 1wwrite &H55 1wverify ID pierwszego układu 1wwrite &HBE odczekać czas na pomiar temperatura1 = 1wread(2) drugi czujnik 1wreset 1wwrite &H55 1wverify ID drugiego układu 1wwrite &HBE odczekać czas na pomiar temperatura2 = 1wread(2) Czy coś jeszcze trzeba?...
Przeciez to banal. $regfile = "8535def.dat" $crystal = 4000000 $baud = 9600 Dim Wskaznik As Byte Dim Dane(4) As Byte On Urxc Odebranybajt Nosave Enable Interrupts Wskaznik = 0 Do If Wskaznik = 4 Then Wskaznik = 0 'a tu dalsze intrukcje 'jak juz masz wszystkie 4 bajty End If Loop Odebranybajt: Wskaznik = Wskaznik + 1 Dane(wskaznik)...
1 "Enable Interrupts" i "Enable Timer1" pisze się przed pętlą główną. a niby czemu? Można odblokowywać i blokować przerwania w dowolnym momencie.
Na początku procedury przetwornika dodałem Disable Interrupts, a na końcu Enable Interrupts jednak nic to nie zmienia dalej zegar się zatrzymuje.
A poprawiłeś tą linijkę z błędem o której mówiłem: [syntax=basic4gl]Karta = Buffer_in(1)(2)[/syntax] ? Po jej poprawieniu działa. I jeszcze trzeba zainicjalizować zmienną In_pos na 1. Bez tego też będzie działało ale zgubi pierwsza ramkę. [syntax=basic4gl]... Adres = 01 In_pos = 1 Enable URXC Enable Interrupts Do Loop ...[/syntax] A i trzeba się upewnić...
$crystal = 8000000 Config Lcd = 16 * 1a Config Int0 = Falling Config Timer0 = Timer , Prescale = 256 Config Watchdog = 2048 Config Pind.0 = Input Config Pind.1 = Input Config Pind.3 = Output Config Pind.4 = Output Config Pind.5 = Output Dim Regulation_counter As Byte Dim On_off_flag As Bit Dim Regulation_type_flag As Byte Dim Int_counter As Byte Dim...
Zresetować SUB?? Chodzi ci o wyjście z suba? On Urxc Getchar Enable Interrupts Enable Urxc dim x as byte dim znak as byte X = 52 petla_glowna: gosub Wykonaj goto petla_glowna end Wykonaj: Incr Koniec if koniec=x then goto petla_glowna end if return :getchar Znak = InKey() X:=Znak return
A nie zapomniałeś o Enable Interrupts ? O ile to jeszcze aktualne(nie spojrzałem na datę). Pozdrawiam!
Jak sobie z tym poradzić aby program nie czekał tej minuty na zmienną? Użyj funkcji Ischarwaiting() : nie bardzo działa bo tylko jedna zmienna Ts wygląda jak powinna a reszta jest z jakimiś śmieciami. W Bascomi'e jest możliwość zdefiniowanie bufora pierścieniowego dla przychodzących danych, do odbioru bajtów wykorzystane jest przerwanie USART. [syntax=basic4gl]Config...
$regfile = "m8def.dat" Config Pind.6 = Input Config Pinb.5 = Output Config Pinc.0 = Output Config Int0 = low level Config Int1 = low level Dim A As Byte A = 0 Declare Sub Lewo Declare Sub Prawo Declare Sub Zatrzymaj1 Declare Sub Zatrzymaj2 Radio Alias Pind.6 Enable Interrupts ' zezwolenie na obsługę przerwań Enable Int0 Enable Int1 On Int0...
Zastosuj bufor: Config Serialin = Buffered , Size = 100 enable interrupts A oczekiwanie na znak zrób: Bufor_flaga = Ischarwaiting() : If Bufor_flaga = 1 Then Gosub Odbierz_uart Następnie procedura odbioru danych: Odbierz_uart: Bufor = "" Do Bufor_znak = Inkey() Bufor = Bufor + Chr(bufor_znak) Bufor_flaga = Ischarwaiting()...
Całości kodu nie wstawiałem bo chodziło tylko o tą część którą napisałem, po prostu powinno działać zamiennie a nie działało.Problemem okazał się jak zwykle Bascom po aktualizacji do wersji 2.0.7.3 polecenie CONFIG TIMER działa poprawnie Dziękuje wszystkim za chęć pomocy Dodano po 52 Trochę się dokształciłem międzyczasie i sprawdziłem w starym Bascom'ie...
$regfile = "m8def.dat" $crystal = 8000000 Config Pind.0 = Output Portd.0 = 0 Config Pind.3 = Input Set Portd.3 Config Int1 = Low Level On Int1 Ir Enable Interrupts Enable Int1 Do Loop End Ir: Disable Int1 Toggle Portd.0 Enable Int1 Return Jeszcze najlepiej jakies opoznienie dodac. Zapraszam do czytania podstaw o odbiornikach i nadajnikach...
Ja wolę przerwania: Dim Sekunda as byte Config Timer1 = Timer , Prescale = 256 On Timer1 Odmierz_1s Enable Interrupts Enable Timer1 do loop end Odmierz_1s: Counter1 = Counter1 + 34286 Incr Sekunda Return Podałem ci "szkielet" programu do odmierzania 1 sekundy za pomocą timera1. Pamiętaj że procek musi go posiadać i musi być taktowany przez oscylator...
Enable Interrupts -trzeba bylo tak odrazu ;) Nadal nie do konca jednak rozumiem SPL=&HDF Co to dokladnie oznacza?
ok, tylko najpierw uporam się z przyciskami i nastawami :P Dodano po 28 $regfile = "m8def.dat" $crystal = 8000000 Config Portd = Output 'podłaczony wyświetlacz 'Config Pinb.0 = Output ' anoda 1 źle! nazwa pin służy do odczytu wartości 'Config Pinb.1 = Output 'anoda 2 źle! aby ustawić należy się posłużyć nazwą Portb.x 'Config Pinb.2 = Input...
tak na szybko ;) Config Timer1 = Timer , Prescale = 64 Enable Interrupts Enable Timer1 On Timer1 Zegar Zegar: Incr Sekunda Return
'Atmega8 $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 Clock = Soft Enable Interrupts Time$ = "00:00:00" Do Lcd Time$ Wait 1 Loop End 'i juz masz zegarek Dopisz do tego zmienne pomocnicze...
Ok już nie zawiesza, ale jeszcze nie dekoduje komend... Wystarczyło w obsłudze przerwania INT0 dodać [syntax=basic4gl]Enable Interrupts Enable Timer1[/syntax] [syntax=basic4gl]Get_rc5: Disable Int0 Enable Interrupts Enable Timer1 Getrc5(adress , Command) Received = 1 Return[/syntax]
Potrzebuję teraz, by ktoś kto dobrze opanował Bascoma by zamieścił dwie procedurki - do odbierania i nadawania danych i jak to zrobic, by dane były nadawane i w tym samym momencie komputer wiedział, że ma je odebrać i odwrotnie. Nie chcę cały czas przesyłac czegoś, tylko jak nacisnę klawisz na klawiaturze w kompie to on ma mi wysłać jakieś liczby do...
Kod jest już poprawiony. Ten działa w 100% Na pewno nie będzie działał brak zakończenia dwóch warunków w pętli Do -Loop oraz coś bardzo ciekawego : [syntax=basic4gl]Config Rc5 = Pind.2 If Command = 16 Then Portd.2 = 1 [/syntax] Najpierw deklarujesz jako RC5 a potem zmieniasz na nim stan ? . Coś mi się wydaje że za bardzo nie wiesz jak się do tego zabrać...
[syntax=basic4gl]$regfile = "m8def.dat" $crystal = 10000000 Config Timer0 = Timer , Prescale = 128 Load Timer0, 5 On Timer0 czas Enable Interrupts Enable Timer0 Do If Pinc.0 = 1 Then Start Timer0 end if If Pinc.0 = 0 Then reset portd.1 end if Loop czas: set portd.1 stop Timer0 return [/syntax] Tak na szybko,... nie testowany. Zrobić możesz wszystko,...
... tak naprawdę ma to być obrotomierz do motocykla . ... Priorytetem jest bardzo szybka reakcja wyniku .... Zastanów się czy nie warto wykorzystać w tym procesorze Timera pracującego w trybie Capture Mode: http://obrazki.elektroda.pl/4130623300_1... Znajdziesz w nim dodatkowo wbudowany układ redukujący szumy sygnału wejściowego oraz...
Trochę w tym programie brakuje. Porównaj sobie. $regfile = "m32def.dat" $crystal = 1000000 Config Int0 = Low Level On Int0 Przerwanie Enable Int0 Enable Interrupts Do Loop Przerwanie: Return
Enable interrupts enable serial on serial prog_przerwania: do {pentla główna} loop prog_przerwania {obsługa przerwania} return No, to tak w skrócie. Powodzenia.
Nie wiem tylko o co chodzi z tym CTC $regfile = "m8def.dat" $crystal = 1000000 Config PortB = Output Config Timer2 = Timer , Prescale = 8 , Compare = Toggle , Clear Timer = 1 Enable Interrupts Enable Timer2 Do Loop
15 może 20s. jeszcze dokładnie muszę zmierzyć Na początku konfiguracja timera [syntax=basic4gl]Config Timer0 = Timer , Prescale = 256 Enable Interrupts Enable Timer0[/syntax]
Witam! Z pewnością chcesz wykorzystać mechanizm "polling" :) jak to się ładnie nazywa w dokumentacjach. Po pierwsze w ATmega8 nie ma flagi Tirf.0, jest natomiast flaga Tifr.0 o którą zapewne Ci chodzi, dlatego pewnie nie do końca che działać. ;) Pozatym aby używać przerwań w ATmega8 musisz też odblokować globalny system przerwań, ponieważ po starcie...
Kompilator (BASCOM 8051 ver. 2.0.11 - DEMO) wykrzacza się na poleceniu GETRC5 (gdziekolwiek by nie było w programie zawsze jest błąd na końcu). Co ciekawsze kiedyś się to kompilowało. Sprawdzałem na różnych systemach i ciągle jest to samo. Dotyczy to również przykładów zawartych w kompilatorze. Może potrzebana jest jakaś dodatkowa biblioteka albo coś...
Witam ! Oto program napisany w Bascom AVR na ATtiny2313. Myślę zę sobie poradzisz ze zmianą na Megę8. Odczytuje on Adres i Rozkaz kodu Rc5 i wyświetla na wyświetlaczu LCD. $regfile = "attiny2313.dat" $crystal = 10000000 Config Lcdpin = Pin , Db7 = Pb.2 , Db6 = Pb.3 , Db5 = Pb.4 , Db4 = Pb.5 , E = Pb.6 , Rs = Pb.7 'Config Lcd = 16 * 1a Config...
Witam W sumie bardzo prosto. Trzeba to zrobić na timerze. Przykład. $crystal=4000000 Config Portb.0 = Output : Wy Alias Portb.0 Config Timer0 = Timer, Prescale = 1 Load Timer0, 66 On Timer0 Negacja Enable Timer0 Enable Interrupts Start Timer0 Do Loop Negacja: Load Timer0, 66 Wy= not Wy Return Wartość ładowana (66) do timera 0 decyduje o częstotliwości....
Na Enable Interrupts Enable Urxc On Urxc Odbierz ...... Odbierz: Znak = Inkey()
dlaczego nie działa pod bascom avr????? $crystal = 16000000 Config Timer0 = Timer , Prescale = 8 Load Timer0 5 On Ovf0 Przerwa Dim G As Integer Enable Timer0 Enable Interrupts Start Timer0 G = 0 Do Loop Przerwa: Load Timer0 5 Incr G Print "przerwa" Print G Return
Zrób to tak: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 4000000 Config Timer0 = Timer , Prescale = 256 'onfiguracja timera, przescaler 256 On Timer0 Odmierz_1s 'włączamy timer0 Dim Licz_8ms As Byte 'definiujemy zmienną pomocniczą Dim Sekundy As Byte Enable Interrupts 'włączamy zezwolenie na przerwanie Enable Timer0 Load Timer0 = 125 'ładujemy...
Jeżeli to ma nic nie robić tylko generować impulsy, to po prostu może użyj Waitms. A jeżeli nie, zmieniaj wartość porównania w zależności od dodatkowej zmiennej. Np: $regfile = "m16def.dat" $crystal = 16000000 Dim A As Word 'Zmienna zwiększana i porównywana. Dim B As Byte 'Zmienna decydująca z jaką wartością będzie porównywana zmienna A. Config...
Będę musiał sprubować z innymi pilotami, a opóźnienie mam nawet w tym programie z helpa : $crystal = 4000000 Config Portb = Output Config Portb = Intput Config Rc5 = Pind.2 Dim Address As Byte , Command As Byte Enable Interrupts Do Getrc5(address , Command) If Address = 0 Then Command = Command And &B01111111 Print Address ; " " ; Command End If Loop...
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...
Włącz przerwania " Enable Interrupts " i możesz sprawdzić zamienić "OCR1B = 100" na " PWM1B =100 " Z ciekawości sprawdzę na attiny85 jak wrócę.
Więc rozumie to tak: Nie wiem czy "Config ACI ..... " powinno być skoro komparator jest włączony i nie będę przechwytywał zawartości timera ani nie wykrywam zboczy. Chce tylko określić stan zrównania bądź większej wartości. p.s wyświetla błąd "Enable IntACI" twierdząc że nie ma takiego czegoś nie czasem tak?? Enable Interrupts Enable Aci On Aci Akcja
A dlaczego na próbę nie ustawisz tego Timeta0 na wartość np. 128? Czyli mniejszą niż 1023 jak i mniejszą niż 255. Żebyś miał prościej, gotowiec: [syntax=vbnet]Co_jakis_czas: 'definiujemy procedurę odmierzającą mniej więcej 4s 'i wywołującą odpowiednie funkcje Stop Timer0 'Disable Interrupts 'to ma byc zakomentowane bo i tak w tym miejscu nie ma sensu...
Również nie działa: I działać nie będzie :| Jak byś poczytał w Helpie DOKŁADNIE !!! , o buforowaniu UARTA , to byś dopisał Enable Interrupts i zapewne by zadziałało , a tak ... kiszka :D Piotrek
jak chcesz to moge ci podeslac w pelni dzialajacy program do analizatora RC5, ale zwroc uwage ze w twoim jest maly blad poniewaz nie zalaczyles przerwania int1, przed Enable Interrupts wpisz Enable int1 i sprobuj wtedy
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...
Przecież pisałem ci aby Getrc5 dać w przerwaniu, eeeh, no kolego - weź no użyj troszkę szukajki na elektrodzie chociażby. Int1_rc5: Disable Int1 Enable Interrupts If Ir_flag = 0 Then Getrc5(address , Command) Ir_flag = 1 End If Return a potem w pętli głównej: Do if Ir_flag = 1 then Ir_flag = 0 If Address < 255 then ..... tutaj dalej obrabiasz...
Nie znam się na języku BASCOM, ale w ASM trzeba zdefinować jeszcze wektory przerwań, czego u Ciebie nie widzę. Innaczej program zapętla się wykonując się od początku do miejsca przerwania. Flagę I w SREG masz ustawioną "Enable Interrupts", więc jedynie to przychodzi mi do głowy.
Musze zaprogramować w Bascomie AT89C2051 Jak to zrobic ? i czy da rade pod XP tego dokonac ? Config Timer1 = Timer, Gate = Interial, Mode = 1 Config Timer0 = Counter, Gate = External, Mode = 1 On Timer0 Frequency Enable Interrupts Enable Timer0 Enable Timer1 Start Timer0 Start Timer1 pzdr. A.
powerdown bascom interrupts systick interrupts system interrupts
poduszki zawieszenia versa podłączenie sygnalizatora wieża philips gramofon
uziemienie basenu łącznik krzywkowy podłączyć
Mercedes W211 sedan – światła przeciwmgielne świecą zamiast stopu po naciśnięciu hamulca Izolacja zasobnika CWU 140 l i rur – PUR, wełna, otuliny, normy WT 2021, minimalizacja strat