Zajrzałem do skompilowanego pliku i widzę że kompilator w ogóle nie używa tu R2 i R3 więc mi je zostawił ;) Od pewnego czasu w Bascom do rejestrów można się odwoływać prosto z kodu. Ciekawe którą wersję Bascom masz. Pewnie znowu schody... U mnie program się kompiluje na 96% [syntax=vbnet] $regfile = "attiny13.dat" $crystal = 9600000 $hwstack = 16 $swstack...
po mojemu powinieneś zmienić "Inc" na "Incr" Inc jest mnemonikiem asemblerowym i działa na bajcie Incr jest poleceniem Bascom i powinien działać na longu.
Nie ma potrzeby ustawiać adresów zmiennych "na sztywno". Ponieważ Bascom dla zmiennych wielobajtowych , stosuje zapis typu Little Endian to kod może wyglądać tak: Dim Zmienna As Word Dim Zmienna_lo As Byte At Zmienna Overlay Dim Zmienna_hi As Byte At Zmienna+1 Overlay I nie obchodzi nas pod jakim adresem znajduje się Zmienna , bo kompilator zadba o...
, przetłumacz poniższy kod z BASCOM AVR na Arduino Uno: $regfile = "attiny2313.dat" $crystal = 8000000 Dim A As Byte a=0 Config Pind.6 = Output led Alias Portd.6 led= 0 Config Pind.0 = Input Portd.0 = 1 Sw Alias Pind.0 do if a >1 then a=0 if sw=0 then bitwait sw, set incr a End If if a=1 then toggle led waitms 100 else led=0 end if loop end Przekształcanie...
Bascom zawsze używa metody obliczeniowej, która należy do zmiennej wynikowej. Oznacza, że w tym przypadku Bascom wykonuje obliczenia na bajtach. Wartość obliczeniowa2 jest typu Word. Czyli (1) = Liczba_ok / 100 zmienna Liczba_ok traktowana jest jako byte. Jedynym sposobem na konwersję jednego typu na inny jest po prostu przypisanie go w ten...
rezultat = HIGHW( zmienna )
[syntax=vbnet] Zmienna = Ileśtam Gosub Sub_przycisku Do .. Debounce Przycisk, 0, Sub_przycisku, Sub Loop End Sub_przycisku: Select Case Zmienna Case Ileśtam : Zrób to End Select Return[/syntax]
Wczoraj jakaś pomroczność mnie dopadła :D ..ale spróbujmy dzisiaj. Zobacz czy tak nie zadziała ;) Varptr to skrót od variable pointer Const Zmienna = Varptr(Dane(_base)) i potem LDS R1, {Zmienna}
Bascom ma symulator, w którym możesz sobie patrzeć jak ci się zmienna zwiększa. Języki nie przestrzegają ściśle reguł zapisu matematycznego.
Nie wiem dokładnie czy bascom dokonuje konwersji typu string na byte w tym może być problem. Spróbuj zmienna nm zadeklarować jako 'byte' może pomoże.
Zdefiniuj wszystkie zmienne na jakich robisz operacje dzielenia i modulo jako INT. Zmienna jednobajtowa się przekręca do zera po osiągnięciu wartości 256.
Integer to nie jest zmienna tekstowa. Sprawdź w helpie jaki zakres ma ten typ zmiennej.
Chwile mnie nie było :D Napisałbym to inaczej, ale wracając do pytania z pierwszego postu . Jeśli chcesz by procesor zawsze był tak samo zajęty to każ mu w tych innych Case`ach także nadawać Pulseout tylko na pin Reset. Bascom to przełknie bo ten pin może pracować jako normalny I/O ale jak jest resetem to nic mu się nie stanie jak napiszesz Pulseout...
Do komunikacji z układem można wykorzystać instrukcje I2csend i I2creceive , po wykonaniu w zmiennej Err jest kod błędu: [syntax=basic4gl]I2csend 112 , &B00010000 ' I2csend adres układu, wartość I2creceive 113 , Zmienna ' I2creceive adres układu, zmienna[/syntax]
(...) osobnym PinX i oczekuj na stan niski ADCx2 aż do spełnienia tego warunku. Jeśli na ADCx2 napięcia równe 0 mrugnij diodą Led1 jeden raz przez 300ms, wyłącz Przekaźnik1 na PinX Po czym wróć do góry procedury, do oczekiwania na napięcie na ADCx1 To właściwie tyle. Dziękuję za uwagę i wszelaką pomoc. Witam serdecznie na forum! Chętnie pomogę Ci przygotować...
Read Zmienna Portc.0 = Zmienna.0 Portc.1 = Zmienna.1 Portb.0 = Zmienna.2 Portb.7 = Zmienna.3 ...
Przeznaczenie: Formatuje tekst zawierający liczbę według podanego wzorca. Składnia: rezultat = FORMAT( zmienna , "maska" ) gdzie: rezultatzmienna tekstowa, w której umieszczony zostanie sformatowany tekst, zmiennazmienna tekstowa zawierająca formatowaną liczbę , maskawzorzec formatowania. Przeznaczenie: Zwraca tekstową reprezentacje podanej liczby....
Błąd w logice. Twój kod czytam tak -> Dopóki zmienna nie ma 5 to cały czas resetujemy pomiar i startujemy nowy (już Select Case byłoby lepsze). Potem próbujemy to czytać jak zmienna ma powyżej 100. No daj spokój. Są tu tego tony jak to obsługiwać. Mój/nie mój sposób to dwa suby. Jeden Startuje konwersję a drugi Czyta. Sprawa polega na tym by odwrócić...
Sądzę że prościej jest użyć INKEY() niż INPUT Dim pełnyciąg As String * 100 Dim zmienna As Byte do zmienna=inkey() pełnyciąg=pełnyciąg+zmienna incr a if a>100000 then a=0 exit do end if if zmienna>0 then a=0 loop until zmienna= 13
Mozliwe. Dodales rezystor? Jeszcze masz taka zmienna err w bascomie, poczytaj troche o niej.
Dokładnie, poza tym to wcale nie musi być zmienna w EEPROM, SRAM przecież przez WD nie jest ruszany. Więc o ile Bascom ma coś takiego jak nieinicjalizowane segementy pamięci to zmienną można trzymać w SRAM i inkrementować po odczytaniu statusu z MCUCSR.
Pomysłu na teraz nie mam jak to rozwiązać, ale problem zapewne leży w tym, że kiedy przekaźnik = 1 to zmienna jest zwiększana z każdym przejściem pętli..stąd 2 potem 7 itp. Po prostu przez czas trwania stanu 1 na zmiennej przekaźnik, liczba się powiększa. Ciebie interesuje jednokrotne powiększenie. Czyli Przekaźnik = 1 i tylko raz incr zmienna. Trzeba...
Można. Np. tak: Zmienna = Lookup(liczba,Tabela) Portb.0 = Zmienna.0 Portb.1 = Zmienna.1 Portb.3 = Zmienna.3 Portb.5 = Zmienna.5 Portb.6 = Zmienna.6 Portb.7 = Zmienna.7 Portb.2 i Portb.4 nie będą zmieniane.
Dim Zmienna As Eram Long Używasz tego jak zwykłej zmiennej.
Może sam spróbuj ;-) Tak w zarysie : w pętli głównej musisz dodać warunek: jeśli przycisk wciśnięty to zwiększ zmienną "czas" o 1 jeśli puszczony to zmienna "czas" =0 następnie: jeśli zmienna "czas" = 123 (dla przykładu, bo nie wiem jak szybko ta pętla przebiega) to : zmień tryb pracy (to masz strasznie napisane, więc trudno ogarnąć)...
mnie akurat nie chodziło o takty na konwersje potrzebne a raczej o niepotrzebnie zajmowane bajty Jak wiadomo bascom jest pamięciożerny a program pewnie ma coś więcej do zrobienia niż tylko odbiór jednej liczby Poza tym po poleceniu inputbin jakas_zmienna jest odbierane tylko tyle bajtów ile ta zmienna zajmuje Ponieważ nie trzeba robić dodatkowych zabiegów...
Aby wszystko było OK to obie wartości (TCNT1H i TCNT1L) muszą być użyte, przy czym należy najpierw wpisać TCNT1H. Tylko że BASCOM to robi samodzielnie więc nie w tym problem. Dodano po 2 Daj cały kod bo nie bardzo widzę w czym problem. A skąd w ogóle wiesz że zmienna jest zapisywana dwa razy?
Osobiście w przerwanie wrzucam zawsze tylko to co musze. wrzuc dodatkowa zmienna w petli np: obrczas. obrmin = 36 000 000/wynikczas Lcd obrmin pamietaj zeby zmienne nie przekraczaly zakresów.
To wiele wyjaśnia. Spróbuj tak ;) [syntax=vbnet]$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 64 $swstack = 16 $framesize = 64 $baud = 9600 Config Lcd = 16x2 Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.6 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5 Cursor Off : Cls Dim K1 As Byte Dim K2 As String * 20 Dim Id As String *...
Witam Z tego co pamietam to by cokolwiek zapisac i odczytac z epromu nalezy podac tez adres komorki pamieci . W BASCOMIE to wyglada chyba tak : Writeeprom Tekst ,adres a potem odczytujemy Readeeprom Tekst ,adres AT90S2313 ma 128 bajtow pamieci EEPROM, wiec jest 128 komorek jedno-bajtowych komorek pamieci. Stad adres : 0-127 Nie wiem jak wyglada sprawa...
Trzeba dopisać warunek co ma uC zrobić jak zmienna osiągnie "0". Mikroprocesorowi musisz wskazać jak się ma zachować w każdej z możliwych sytuacji bo on niestety nie chce myśleć za Ciebie.
A co to za kwiatek: Lcd Wynik2 = Wynik + Wynik1 Powinno być: Wynik2 = Wynik + Wynik1 Lcd Wynik2 A jeszcze zmienna Wynik2 jest niepotrzebna i może być: Wynik = Wynik + Wynik1 Lcd Wynik
zapoznaj sie z fusebitami. Czy ty chcesz dokladnie odmierzyc 500 milisekund czy okolo? Jak chcesz dokladnie otrzymac to kwarc zew. i timery. A masz zew. ram podlaczony? nie wiem jak chcesz jakas zmienna zdeklarowac poza pamiecia sram chyba ze chodzi ci o pamiec stala eeprom
Wyboru samego separatora dokonuje się w pliku Config_AVR_dos.bas zmieniając stałą "Const Cvariableseparator = 44 " Jednak w tym wypadku chyba musisz użyć podręcznej zmiennej tekstowej, połączyć to sobie i wysłać na końcu jako jedna zmienna bo w innym przypadku zawsze wstawi separator. [syntax=vbnet]Dim Helpstr As String * 10 , Word1 As Word , Word2...
Dlaczego pokazuje -1 na wyświetlaczu a nie np 255 jak jest dla zmiennej typu Byte. Bo Integer to zmienna ze znakiem, FFFF to właśnie -1. Byte jest zmienną bez znaku (zawsze dodatnią). Dwubajtowa zmienna bez znaku to w Baskomie "Word". Na wyświetlaczu po resecie będzie wówczas 65535. 2. Czy taki zapis eeprom będzie poprawny przy pierwszym sprawdzeniu...
:) Komenda mod to taka reszta z dzielenia czyli: zmienna = liczba mod 4 zmienna - miejsce gdzie zostanie wpisana reszta z dzielenia liczba - zmienna która jest dzielona przez 4 (w miejsce 4 możesz wstawić inną liczbę lub zmienna) Dodatkowo w Bascomie są dwa rodzaje dzielenia znak / i \ pierwszy (/) używamy do dzielenia z resztą (w przypadku zmiennej...
Zamiast Bitwait Pinc.3 , Set wpisz: Blad=0 Do If Timer0 > 200 Then Blad=1 Exit Do End If Loop Until Pinc.3=1 Wyskok z petli nastepuje kiedy warunek Pinc.3=1 albo kiedy Timer0 > 200. Wartosc 200 to oczywiscie przyklad :-) Drugie pytanie. Mozna dokladniej zmierzyc, choc to jest Timer0 8-bitowy. Robisz nastepujacy prosty trick: 1. deklarujesz zmienna...
Moze zmien algorytm tych obliczen. Wydaje mi ze ze jak po "Do" zrobisz od razu: [syntax=basic4gl]For Cykl = 1 To Y Z = ( Cykl * X ) \ Y Prc = ( 100* Cykl ) \ Y Call Oblicz Next Cykl[/syntax] to bedziesz mial co potrzebujesz i to bez uzywania single Nie znam dobrze Bascom, wiec jak nie mozna robic tylu operacji w jednej linii to dodaj zmienna pomocnicza...
Z elementarnej matematyki wynika ze: U(T) = 0,0139T + 2,5. No więc piszesz sobie (zakłądając ze U to zmienna odpowiadająca napieciu) T=U-2,5 T=T/0,0139 i tyle jeśłi chodzi o konwersje. Oczywiście musisz zadeklarowac odpowiednio zmienne U i T ja bym proponował jako inteagery. Pozdrawiam
Nie typ SINGLE a LONG ! Dodatkowo nie definiuj sztywno adresu bo to może być źródłem późniejszych problemów. Tak będzie poprawnie i najbardziej optymalnie ze wszystkich możliwych sposobów: Dim Zmienna As Long Dim Zm1 As Byte At Zmienna Overlay Dim Zm2 As Byte At Zmienna + 1 Overlay Dim Zm3 As Byte At Zmienna + 2 Overlay Który bajt to który i dlaczego...
Co rozumiesz pod pojeciem zmienna ? Jezeli chodzi Ci o komorke pamieci RAM to jest banal: mov zmienna,A Wczesniej oczywiscie musisz zadeklarowac zmienna np. zmienna equ 50h Od tej pory gdy kompilator napotka slowo zmienna to bedzie wiedzial ze to znaczy 50h. Instrukcja mov przepisze zawartosc akumulatora do komorki o adresie 50h. Jesli chcesz to od...
Po pierwsze jakie czasy chcesz obliczać i jakie przerwania po co ??? To jest bascom nie assembler, deklarujesz na wstępie programu prędkość kwarcu a kompilator troszczy się o resztę tj. dajesz deklarację $regfile = "m8def.dat" $crystal = 12000000 Po drugie, procedura obsługi wyświetlaczy LCD (mowa tu o alfanumerycznych HD44780) jest w BASCOM zaimplementowana...
Jak napisać menu (np. 4 poziomy x 4 funkcje) Np: możesz zrobić tak że 4x4 to jest 16 stanów (lub w zależności jak to prezentujesz więcej). Więc piszesz funkcje która jest wywoływana gdy wciśnie się to MENU, a w funkcji pętle gdzie masz 16 warunków oraz jedna zmienna która wskazuje który stan jest obsługiwany. Zamiast warunków można użyć switch ale...
Napisz tak: Dim Zmienna As Byte Zmienna = 0 Config Intx = Low Level | Rising | Falling [ | Change ] 'Konfiguracja reakcji na sygnał przerwania 'za x podstaw nr przerwania wybierz jeden ze sposobów pobudzenia kocówki uC Enable Interrupts 'Uruchomienie przerwań globalnych Enable Intx 'Uruchomienie przerwania INTx On Intx Obsluga_przerwania 'wskazanie...
W Bascomie jest do tego specjalna instrukcja Zaglądnij do Helpa na polecenie Pulsein zmienna - tu znajdzie się nasz wynik w mikrosekundach PIND - to port do jakiego się podłączymy 1 - pin portu do jakiego jesteśmy podłączeni 0 - wybieramy czy chcemy obliczać do czasu pojawienia się stanu niskiego, czyli 0 czy wysokiego czyli zapiszemy wtedy 1
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 =...
Taa, bo mialem tę linijke napisaną a potem się okazało, że zmienna Alarm już jest i tablicy z niej nie chciałem robić żeby nie było zamieszania. Stworzyłem więc Alarm_nr(5) (zamiast Alarm1,Alarm2,Alarm3..) a o tej linijce zapomniałem ;) Widzę czujność jest :D
Pomyśl..Cztery znaki chcesz upchać w trzyznakowym stringu.. Nie wiesz jak to działa. Kiedy deklarujesz String * 10 rezerwujesz 11 bajtów bo każdy string ma znak swojego końca. Nie musisz wykorzystać wszystkich bajtów. String może być krótszy i zaraz po znakach postawiony będzie znak końca..ale zarezerwowałeś 11 bajtów i tam program nigdy nic nie będzie...
Witam. Trochę to mętne , ale spróbuję ci jakoś pomóc. Każda zmienna jest przechowywana w pamięci w postaci dziesiętnej. Możesz ją zadeklarować jako kod szesnastkowy np. : zmienna= &HFF00 Ale i tak w pamięci zostanie zapisana jako konkretna wartość. Nie wiem do czego potrzebujesz, ale domyślam się że chcesz to wyświetlić jako wartość szesnastkową. Wartości...
Zamieniasz poszczególne znaki na ich liczbowe odpowiedniki za pomocą funkcji: ASC i XORujesz z poprzednią wartością, za pomocą funkcji XOR. O rozbijaniu stringa na poszczególne znaki było parę( dziesiąt) postów temu. A sam XOR to inaczej suma modulo 2: 0 xor 0 -> 0 1 xor 0 -> 1 0 xor 1- > 1 1 xor 1 -> 0 Oooo, znalazłem: http://www.elektroda.pl/rtvforum/topic15...
zmienna bascom zmienna stringi bascom bascom konwersja zmienna
satel symulacja motorola oryginalna bateria filament własny
FPT2 zamienniki – transoptory LTV-817B, PC817B, EL817B, SFH617A-B, TLP785(GB) Dlaczego pliki M3U z adresem MAC nie działają?