Po prostu nie możesz korzystać z instrukcji Input tylko z instrukcji np. Inkey i odbierać 128 bajtów o dowolnej zawartości (nawet bajtów zerowych) Po odebraniu 128 bajtów sprawdzić sumę kontrolną, tak jak pisał kolega mirekk36. Jeśli odebrałeś wysłasz ack spowrotem np. z sumą crc ramki Instrukcja Input się nie nadaje do tego celu. Tylko odbieranie za...
dodatkowy problem w tym że sterownik do którego pisze program musi posiadać możliwość konfiguracji portu rs i chyba bascom nie był najlepszym wyborem do tego typu aplikacji
Jak w BASCOM-AVR zbudować pełny string z INKEY/INKEY$, obsłużyć echo, BACKSPACE, buforowanie i przerwania UART? Interesuje mnie praktyczny algorytm i zabezpieczenia.
Dzięki za podpowiedzi, wykorzystałem polecenie inkey() i to wystarczyło w zupełności. Kodu nie podaję, gdyż wystarczy wpisać w helpie inkey i wszystko jasne jak na dłoni :)
Komunikacja działa prawidłowo jednak odebrane dane chcę mieć w formie BYTE lub WORD Kod Bascom dim a as byte a = inkey print a Gdy z terminala wysyłam 2 to procek zwraca mi 50 gdy 1 to 49 gdy 3 to 51 itd Pewnie gdyby a była single to by było O.K. Co zrobić by wysłane 2 z terminala = 2 w procku /zmienna BYTE/??
Możesz użyć Inkey. Tylko funkcja ta ma taką cechę że nawet jak nic nie ma w UDR to zwraca 0. Także najlepiej zrób to w ten sposób że najpierw sprawdzasz czy jest znak (Ischarwaiting) a potem jeśli jest, to odbierasz Inkeyem. Można też zrobić to w przerwaniu. Jeśli początek odbieranego tekstu masz stały to można też zrobić pętlę w któej ciągle pytasz...
Długo by tłumaczyć. Przede wszystkim przerwanie przychodzi po pierwszym znaku, a Inkey odbiera cały ciąg znaków Z tego powodu Inkey nie nadaje się do użycia w przerwaniu. Ty użyłeś go w przerwaniu i tym samym blokujesz przerwania. Bo przerwanie przychodzi po pierwszym odebranym znaku, ale zostaje tam aż nie przyjdą kolejne znaki. Poza tym użyłeś Inkey...
Już chyba wiem. Nie możesz porównywać zmiennej tekstowej B do Chr (0), bo zmienna tekstowa kończy się takim znakiem. Czytaj przez Inkey do zmiennej typu Byte a następnie buduj string tak: A= A + Chr (B) Czyli zmień zmienną B na typ Byte
U mnie poszło coś takiego: $regfile "m16def.dat" Config Lcd = 16 * 2 $crystal = 1000000 $baud = 9600 Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portb.1 , Rs = Portb.0 Config Serialin = Buffered , Size = 12 Dim X As Integer , Y As Integer Config Pind.1 = Output Enable Interrupts ' Musisz włączyć...
Mień Inkey na Waitkey, zmień definicje zmiennych i wklej kod po modyfikacjach. Program nie może "wrócić na chwilę" do procedury... Upewnij się jeszcze na sto procent, czy wysyłasz jeden znak po UART.
Po wczorajszym, (zamknięcie tematu, i itp) Postanowiłem że postaram się coś samodzielnie wyklecić w bascomie (w końcu to mój projekt) narazie to tylko przykładowy kod, w którym chodzi tylko o wyjaśnienie zagadnienia, i ewentualne poprawki. MASTER : $regfile = "attiny2313.dat" $crystal = 4000000 Config Serialin = Buffered , Size = 15 Const...
Wiem, że InKey zwraca 0 gdy nic nie dostał. Inaczej nie pytałbym o IsCharWaiting... Jak zatem rozwiązać ten problem? Od razu mówię, że pisanie w C lub asemblerze to dla mnie za wysokie progi. Sprzętowy UART w atmelach (jeszcze w miarę rozsądnych cenowo) dochodzi do dwóch linii uart... czyli wciąż za mało.
Zrób sobie 6 element tablicy który będzie np znakiem ENTER (żeby rozpoznawać koniec tablicy) natomiast w Bascomie możesz wtedy użyć nawet polecenia INPUT, które po otrzymaniu znaku ENTER wpisze ci twoich 5 elementów tablicy do stringa (też jakby tablicy) - a ze stringa możesz to przełożyć do normalnej tablicy bascomowej - zrobić z tym co ci się żywnie...
mylisz się. Samo inkey zwraca jeden znak ale tam jest wazna cała pętla a nie pojedyńcza komenda. Masz dołączyć całe to od s="" do loop. s="" ' wyzerowanie bufora do 'rozpoczęcie pętli która będzie aż do loop lob exit do a=inkey 'oczekuje na znak przychodzący if a=0 then exit do 'jezeli przyjdzie tzw znak zero to opuszczana jest petla s=s+chr(a) ' dodaje...
433 lub 868 różnią się długością antenki :) 433 teoretycznie jest też bardziej zajęta. W TME mają stan magazynowy 0, więc nie wiadomo kiedy je dostaniesz, w Seguro mają od reki - wersja SMD jest IMHO lepsza, bo mniejsza, a lutuje się ją banalnie - rozstaw metalizowanych wcięć do lutowania to 2,54mm, czyli standardowo tak jak DIL. Soft producenta oczywiście...
miałem podobny problem. Przerwanie od UART powodowało że program wpadał w przerwanie i nie chciał wyjść. Zrezygnowałem z przerwania i w pętli głównej wstawiłem Zmienna = inkey ; if zmienna = ??? then ???. to rozwiązanie nie powoduje przerwania ale trzeba czekać aż program w pętli dojdzie do tego punktu. Wszystko zależy czy ma natychmiast reagować na...
... Powiedz , dlaczego musisz Waitkey() , a nie np. Inkey ?? Dla tego, że Inkey nie działa tak jak bym chciał. Program rysuje mi na konsoli w trybie znakowym okienka i poruszam się po nich za pomocą strzałek kursora. kod strzałek kursora w terminalu jest następujący: strzałka w górę to znak klawisza "ESC"+"[" + "A" strzałka w dół to znak klawisza "ESC"+"["...
$regfile = "m128def.dat" $crystal = 16000000 $baud1 = 38400 Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Dim Znak As String * 5 Open "com2:" For Binary As #2 Print #2 , "start" Wait 1 Pg: Input #2 , Znak Waitms 500 Print #2 , "Odebrano znak : " ;...
Witam mam taki problem potrzebuję wysyłać przez port com danie w taki sposób, aby były one traktowane jako znaki ASCII bo tylko takie mogę poprawnie odebrać mikroprocesorem. Z tego co zauważyłem jedynym działającym w przerwaniu od UARTa poleceniem odbioru, w bascom AVR jest inkey a to odbiera tylko znaki ASCII :/ No i tu pojawia się problem bo o ile...
BlueDraco - owszem, łatwiej jeden uC. Ale jako że siedzę w avrach i bascomie, to raczej nie mam zamiaru wyrzucać kolejnych pieniędzy, płytek które wytrawiłem i zlutowałem po to żeby babrać się w inną rodzinę procesorów. Poza tym zanim nauczyłbym się nowego języka i nowych uC minęło by sporo czasu, który raczej muszę przełożyć na inne cele (matura +...
Manual BASCOM-a, w opisie instrukcji SERIALIN mówi że bufor danych wejściowych przechowywany jest w wewnętrznej tablicy bajtów _RS232INBUF0 . Oprócz tego są dwa wskaźniki, na początek tych danych oraz na ich rozmiar. 'Using the CONFIG SERIAL=BUFFERED, SIZE = 10 for example will 'use some SRAM memory 'The following internal variables will be generated...
Przysiada zasilanie telefonu lub twojego uP - albo co gorsza zasilasz je z wspólnie z LM7805 a telefony modemy GSM pobierają ok 1000mA przy 12-10V No i oczywiście stos pamiętaj że funkcja inkey też zajmuje stos i może go przepełniać jeśli jeszcze masz jakiś timer i przerwania a wszystko obsługujesz przez LCD to można go zapchać w bascomie - spróbuj...
ok panowie - poradziłem sobie nieoczekiwanie w nieoczekiwany , sprawny, szybki i łatwy sposób, przynajmniej jeśli chodzi o odczyt z układu mojego SLAVE i to bez żadnego softI2C itp... ... jak ? jesli to kogoś zainteresuje .... Bascom to jednak fajne "zwierzątko" otóż w kilku linijkach po obu stronach zorganizowałem softwarowy RS232 na dowolnie wybranym...
INKEY i INPUT stricte nie czyszczą bufora. Od tego jest CLEAR SERIALIN. Jednak korzystanie z INKEY i INPUT pobierają dane z bufora i przesuwają wskaźniki, co także powoduje, że bufor jest "opróżniany" - choć dane w pamięci dalej są.
A ja dodam jeszcze że kontrolery muszą być traktowane z odpowiednich kwarców w zależności od prędkości transmisji. Zobacz Sobie tabelę błędów Uart w zależności od zastosowanego kwarcu. Nie ma takiej potrzeby, wystarczy, że taktowanie będzie praktycznie identyczne i nastawy USART takie same. Do niczego nie jest w takim wypadku potrzebne precyzyjne ustalanie...
Co będzie jak jednym z kodów przesłanych do mikrokontrolera będzie znak o kodzie 0? Odp: Nie zostanie zauważony. Dlatego INKEY() powinno się poprzedzać operacją sprawdzenia zajętości bufora UDR.
W telegraficznym skrócie - w "nadajniku" wysyłasz znaki komendą PRINT, np "A" dla pierwszego LEDa i "B" dla drugiego. W odbiorniku odbierasz dane z UARTu (inkey) i jeśli jest "A" to zapalasz jedną diodę, jak doszło "B" drugą.
Taj jak napisałem wyżej. WAITKEY będzie czekało do czasu, aż coś odbierze. Jeśli w tym czasie wystąpi jakieś przerwanie to się ono wykona i wróci do programu wykonywanego wcześniej, czyli do WAITKEY (chyba, że WAITKEY będzie w jakimś podprogramie przerwania - wtedy kolejne przerwanie się nie wykona (wykona się po skończeniu aktualnego), chyba że na...
To zamiast Inputbin użyj Inkey.
1) Brak deklaracji CONFIG COM w obu programach 2) W odbiorniku wyrzuć TOGGLE i wstaw RESET bo za chwilę napiszesz czemu led się ciągle świeci ale przyciemniony 3) W odbiorniku wykorzystaj ISCHARWAITING i INKEY. Odbierasz tylko A i na podstawie czy jest =10 czy =15 wykonujesz ifa do świecenia ledem
Problemem okazał się kabelek używany jako przedłużacz. Na oko normalny żeńsko/męski szeregowy db9, ma po sprawdzeniu takie połączenia: 2--3 3--1 5--9 Ciekawe do czego służy taki wynalazek... Zlutowałem nowy kabel i śmiga. Można zamknąć problem.
Dim B as byte ..... [program] B =waitkey() .......[program] If B = 121 then ..... W sumie wystarczy samo B = waitkey() lub B = inkey() a to if to już chyba wiesz do czego nie?? SZUKAJ!! wszystko jest w helpie bascomu!!
Witam Inkey odbiera tylko jeden znak (bajt) przesłanej informacji. Użyj lepiej funkcji – input /zapoznaj się z pomocą Bascoma. Do przesyłania informacji na duże odległości używaj jak najmniejszej szybkoś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
czy nie potrzebna jest tutaj instrukcja INKEY() ? swojego czasu zrobiłem taki układ , że dwa procki atmega8535 przesyłały między sobą zmienną. program zajął dosłownie 3,4 linijki w odbiorczym użyłem instrukcji inkey() tzn , jeżeli było coś w buforze(różne od 0 ) to wyświetlało daną. oczywiście czasy w realizacji pętli były takie same oraz kwarce również...
Ja robiłem podobnie do twojego tyle że zamiast "waitkey" używałem "inkey" w przerwaniu . Odbior: B = Ischarwaiting() If B = 1 Then C = Inkey() If C = "Q" Then Inputbin Aa(1) , Aa(2) , Aa(3) , Aa(4) , Aa(5) , Aa(6) End If End If Return Czyli Q robi u mnie za bajt startu a resztę danych przypisuję zmiennym . W programie głównym obrabiam te zmienne. ps:...
SERIN i SEROUT to nie jest do RS232. Do tego jest Print/Printbin i Input/Inputbin. Jest jeszcze Inkey.
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
Może nawet więcej niż dwa, chodziło mi o tą konkretną. Kolego janbernat zmodyfikuj program wg. mojej pierwszej propozycji. Dodano po 4 Już wiem, zmienna Err jest tworzona automatycznie przez kompilator, można ją wykorzystać np. w funkcji Inkey(). Nie wiem czy działa też w przypadku Getatkbd(), ale w przykładowych programach z dokumentacji nie ma takiego...
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()...
Skorzystaj z Inkey() i IsCharWaiting().
U mnie działa. Dodano po 2 Bo powinno być: K6 = Inkey(#1) ;)
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...
Witam, zanim zabierzesz się za pisanie własnej obsługi przerwań do RS232 w Bascomie, to może najpierw spróbuj zrobić to w oparciu o dobrodziejstwa jakie daje ci Bascom. nie znasz poleceń INPUT , INKEY czy PRINT ???? do tego jeszcze może Config Serialin bo w powyższym kodzie odstawiasz niezły "miszmasz" i nie ma co się dziwić, że ci nie działa. Oczywiście...
moze powinieneś skorzystać z instrukcji inkey() , zobacz w helpie jej zastosowanie.
A może bardziej sensowne byłoby: [syntax=basic4gl] If S = 0 And PIND.7 = 0 Then port = portc End If [/syntax] e marcus
1) Warunek jest taki że string zawsze musi mieć taka samą długość 2) Użyj funkcji MID aby powycinać ze stringa kawałki z poszczególnymi temp 3) I tutaj uwaga - konwersje string->liczby są pamięciożerne. Jeśli nie wykonujesz żadnych obliczeń temperatury itp to odebrany string wyświetl na lcd jako string a nie jako bajty. Poprostu funkcją MID porozcinaj...
Zrezygnuj z funkcji Input, znacznie lepsza jest Inkey w pętli. Wtedy masz nad wszystkim kontrolę.
To nie jest dobry sposób na odczyt bufora. [syntax=basic4gl] '------------------------Odczyt UART w przerwaniu------------------------------... Serial0charmatch: Enter = 1 If Ignoracja = 0 Then Input Todczyt Noecho End [/syntax] Zawsze miałem kłopoty ze skompletowaniem linii oraz pojawiało się dużo przekłamań jak używałem Input. Lepszym sposobem jest...
Nie pisałem nic na Rs485 ale mam kilka uwag do programu. Zacznij najpierw od poczytania w helpie bascoma, co robi dokładnie instrukcja Inkey() a dowiesz się że odbiera 1 bajt (jeden znak) z bufora. Sprawdzanie więc warunku B = "zaswiec" nie ma najmniejszego sensu. Nie wiem też po co przełączasz tyle razy układ w nadajnik <>odbiornik: ...... Reset...
To możesz zrobić tak: [syntax=basic4gl] Odczytaj_sprzetowy_uart: Dane = "" Do 'Odbierz znak po znaku Kod = Inkey() Dane = Dane + Chr(kod) 'Zapisz w Dane If Dane = "Obroty1" Then Obroty = 1 If Dane = "Obroty2" Then Obroty = 2 If Dane = "Obroty3" Then Obroty = 3 Bufor = Ischarwaiting() 'Zakoncz jeśli brak znaku Loop Until Bufor = 0 Return [/syntax] i...
A jak zrobić w drugą stronę czyli mam już 4 bajty i chce teraz zamienić na Long dim B1 as byte, B2 as Byte, B3 as Byte, B4 as Byte dim Liczba as Long B1 = Inkey() B2 = Inkey() B3 = Inkey() B4 = Inkey() Liczba= ??????????
A po co wogóle kol. Stepel pisze sobie bufor we własnym zakresie, skoro jest coś takiego jak CONFIG SERIALIN, działający na przerwaniach. Potem trzeba tylko umiejętnie wykorzystać INKEY() i ISCHARWAITING().
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"...
Na Enable Interrupts Enable Urxc On Urxc Odbierz ...... Odbierz: Znak = Inkey()
(at)grala1Ten Twój kod jest trochę za prosty i z czasem zgubi synchro niemniej jak wrzucisz ten poprawiony na symulator, albo nawet uruchomisz na żywca z tym co Tobie tam nadaje to na chwile powinien podziałać ;) Lepiej byś odbierał znaki w przerwaniu do bufora. Procesor na nic by nie czekał i miał czas na inne sprawy. Do tego synchro, jakis timeout...
Witam. Mam programik napisany w bascomie który potrzebuje do działania danych z RS232 (komenda inkey). Da się to zasymulować w BASCOM 8051? Jest tu jakiś terminal, ale coś nie za bardzo działa.
Tych znaków jest trochę więc proponuję bufor wejściowy. Wyświetlacz przyjąłem 16*2: $crystal = 4000000 $baud =4800 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.6 , E = Portc.2 , Rs = Portd.6 Config Serialin = Buffered , Size = 32 Dim Znak As Byte Dim I As Byte Cls Enable Interrupts I = 1 Do Do...
Nie lepiej odczytywać UART za pomocą Inkey() ? Najlepiej jeszcze w przerwaniu. Zamiast Input wykorzystać buforowanie i Bytematch=13
Pozbądź się RS'owej transmisji buforowej i innych komend typu Ischarwaiting(), Inkey() na rzecz przerwania od URXCx i wtedy sprawdź działanie programu.
Komenda Input czeka na znak entera. Jeśli chcesz odbierać pojedyńcze znaki zastosuj Inkey lub Waitkey. Po resztę informacji odsyłam do Helpa Bascoma
Napotkanie Inkey() powoduje zatrzymanie pracy programu aż do odczytu znaku z bufora UART.
witam i dziękuję za pomoc. Jednak temat już załatwiłem zastępując instrukcję print zamieniając na inkey działa poprawnie na wszystkich portach poprawnie. Dziękuję.
A może zamiast input użyjesz inkey ?? Co ci sie na wyświetlaczu wyświetla ?
A do czego Tobie jeszcze potrzebny ten INKEY ? W helpie Bascoma Masz wszystko dokładnie opisane wraz z działającymi przykładami.Wystarczy zajrzeć.
No dobra. Wywal wszystko na linii Tx telefonu do Rx procesora. Ma być połączenie bezpośrednie. Na drugim kierunku zostaw tak jak masz. Poniżej kod do testów. Powinien działać. [syntax=basic4gl]$regfile = "m32def.dat" $crystal = 16000000 $baud = 19200 Config Lcd = 16 * 2 Config Serialin = Buffered , Size = 100 Enable Interrupts 'Declare Sub Oproznij_bufor...
Config Serialin = Buffered , Size = 80 Enable Interrupts Dim _Flaga_1s as Bit _Flaga_1s = 0 Config Timer1 = Timer , Prescale = 64 Enable Timer1 : On Timer1 Co1s Cls Do If Ischarwaiting() = 1 Then Znak = Inkey() Print Chr(znak) ; End If if _Flaga_1s = 1 then ' ------> a tutaj wyświetlaj już sobie spokojnie co chcesz co...
Czy INKEY() nie zwraca przypadkiem tylko jednego znaku , zamiast całego ciągu ?
[syntax=basic4gl]Dim Znak as byte '... Do '... Znak = Inkey() If Znak > 0 Then '... End If '... Loop[/syntax]
witam. A może by tak więcej danych na temat: w czym piszesz, a przy okazji może tak warto zajżeć do pliku pomocy........... i jeśli to bascom to sprawdź o czym mowa w poleceniach input, inkey(), waitkey().......... pozdro.
Niestety Jak dam instrukcję ustawienia bufora to już nic nie odbiera (nadawać nadaje). A włączyłeś przerwania :?: Bez bufora(przerwanie RX) , ciężko dogadać się z fonem :( Właśnie zauważyłem że jak zepnę RX z TX uP (wywale printa z głównej pętli i dam wait na 5sek. ) to odbiór też jest na 3 znaki :/ Czy wiesz jak wygląda transmisja asynchroniczna ,...
Ten czytnik wysyła poza znakiem końca linii o kodzie 13 kod następnego wiersza o numerze 10 Dane dalej pobieram za pomocą funkcji input, ale po niej w buforze zostaje znak 10, następnego wiersza, który pobieram za pomocą inkey :D Teraz jest już wszystko OK
za pomocą Inkey() a wtedy bufor automatyczny konfigurujesz tak: Config Serialin = Buffered , Size = 10 , Bytematch = All
Masz tu prosty, sprawdzony, działający program do sterowania portami. $regfile = "m16def.dat" $crystal = 1000000 ' przelicz u siebie te zera :) Dim B As Byte Config Portb = Output Portb = &HFF Waitms 100 Open "comd.1:9600,8,n,1" For Output As #1 Open "comd.0:9600,8,n,1" For Input As #2 Do B = Inkey(#2)...
Błąd - przeczytaj w helpie co zwraca komenda inkey. Zwracam honor, rozpędziłem się. W innych basic-ach jest to znak, w bascom-ie kod ASCII pierwszego znaku. Pozdrawiam
Jak pisałem Ci wyżej Inkey nie działa na porcie wirtualnym. Przynajmniej na Atmedze8. Chyba jakiś błąd. Użyj funkcji Inputbin. Będzie hulać.
może jakoś tak baud= ..... Config Pin_klawisza = Input Dim N As Byte Dim I As Byte Dim Temp As Byte Dim Znak As String * 2 N = 1 Do Debounce Pin_klawisza , Stan , Generuj , Sub Temp = Inkey() If Temp <> 0 Then Znak = Chr(temp) If Znak = "+" Then Incr N If Znak = "-" Then Decr N Loop Generuj: For I = 1 To...
Echo wyłączyłem ; nic nie pomogło. Wykorzystuję takie coś: Xdane: Odb_txt = "" 'wyczyść odb_txt While Bufspace(1) < 254 'dopóki jest coś w buforze Bajt = Inkey() 'pobierz znak If Bajt <> 13 And Bajt <> 10 Then 'jeżeli nie jest to znak CR lub LF Odb_txt = Odb_txt + Chr(bajt) 'dodaj znak do Odb_txt Else 'w przeciwnym wypadku Odb_txt = Odb_txt...
Z koleji Inkey() i Waitkey() jako brak odebranego znaku zwracają #0 i chyba nie będą działać jak w przesyłanej informacji będzie #0
Skorzystaj z instrukcji INKEY( ), WAITKEY , ISCHARWAITING. Do 'jakaś pętelka A = Inkey() 'odczytujemy znak If A > 0 Then 'czy był jakiś (> 0)? Print A 'jeśli tak to piszemy End If Loop 'to będzie pętelka nieskończona 'Powyższy przykład dotyczy SPRZĘTOWEGO układu UART! 'Program zapisany jako OPEN.BAS zawiera przykład użycia INKEY()...
To można rozwiązać na wiele sposobów. Jeśli tylko cześć ramki jest stała a zależy Ci na wartościach odebranych to można użyć bufora kołowego i kiedy wykryjesz koniec ramki to wciągasz z bufora poprzednie siedem bajtów. Tutaj jednak sprawa jest prostsza. Poniższy mikroprogram powinien sprawdzać po kolei nadchodzące bajty. Jeśli się zgadzają to wskaźnik...
Mam taki jeden dziewiczy nigdy nie używany, kiedyś kupiony na zapas. Podłączyłem go do przejściówki USB. Przed włączeniem zasilania modułu podłączyłem wejście "KEY" do 5V Musisz uważać - mój moduł ma już w sobie układy dopasowujące i działa z TX RX 5V - nie wiem jak Twój. Kiedy podczas podłaczania zasilania masz KEY w stanie wysokim to prędkość komunikacji...
W nadajniku użyj polecenia Print "jakiś znak" A w odbiorniku użyj : Jakas_zmienna = Inkey() I już. Albo zobacz do helpa Bascomowego, chyba go masz :D
Witam. Uart-em poprzez nadajnik FM lub AM bedzie prościej. Puszczasz np : PRINT 48 Po drugiej stronie dajesz INKEY():D i lcd chr(zmienna). I masz "0" na lcd. Pozdrawiam.
Witam. Mam mały problem z przepisaniem wartości z DANE do zmiennej CZAS. Potrzebuję by po odczycie z UART wartość CZAS=DANE. Oczywiście żle to robię bo BASCOM pokazuje błąd. [syntax=vbnet] Config Serialin = Buffered , Size = 4 Enable Interrupts Declare Sub Kas_bufor Dim Uart As String * 1 Dim Buf As Word Dim Dane As String * 4 Dim Czas As Word Cls Locate...
Łap bo jak zaczniesz z tym Multimaster to się nigdy z tego nie wygrzebiesz a odkrywasz tu koło na nowo :D Po pierwsze nie zauważyłem wcześniej, że już skonfigurowałeś Serial in 0. Błędem natomiast jest jest używanie Serial out 0 a potem zamiast to wrzucić do bufora to wycinasz po jednej literce ze stringa i nadajesz pojedynczo... Po prostu napisz Print...
$regfile = "m8def.dat" $crystal = 8000000 Open "comc.2:4800,8,n,1" For Input As #1 Open "comc.3:19200,8,n,1" For Output As #2 Dim A As Byte Dim S As String * 160 Do Do A = Inkey(#1) S = S + Chr(a) Loop Until A = 13 Print #2 , S Loop End
Próbowałem jeszcze waitkey - efekt ten sam tyle że waitkey jak gsm już nie nadaje wiesza program... INPUT nigdy nie używałem. Wstawiłem teraz na szybko INPUT znak (w miejsce znak =inkey() ) Efekt jest taki że nie czyta nic. Cisza. Zmykam do pracy, może po południu coś jeszcze pogrzebie przed weekendem... Pozdro :)
rozumiem że zmiany dokonałeś tutaj Loop Until Ischarwaiting() = 1 ' czeka na następny znak Dana = Inkey() Tekst = Tekst + dana Znajduje więc ramke jak poprzednio, a potem wywala krzaki z ASCII, rzadko jakąś litere z alfabetu.
Proponuję zrobić taki eksperyment: Kod: Print "a" Print Chr(97) Print Chr(&H61) Print Chr(&B1100001) to zawsze zostanie wysłany kod ASCI - 97... Acha, czyli jak w procesorze, którym odbieram dane zrobię tak: zmienna_byte = inkey() to w zmiennej będę miał kod ASCII odpowiadający danemu znakowi. Natomiast jak zrobię tak: zmienna_typu_string =...
Czy młodszy brat/siostra , skasował Ci baskomowego Help-a Jestem jedynakiem :D Tylko polecenie Input czeka tak długo aż czegoś się mu nie wyśle, dlatego zastosowałem Inkey(). I caly czas myślę, jak zrobić, aby Pojedyńcze znaki złożyć w cały "ciąg znaków" bo zmienna jest string. Pzdr.
Witam, Mam pytanie, czy jak w procesorze, którym odbieram dane wysyłane przez inny procesor przez układ UART, zrobię tak: zmienna_byte = inkey() to w zmiennej będę miał kod ASCII odpowiadający danemu znakowi? Np. wyślę przez RS232 znak a to będzie w zmiennej liczba 97 zmienna_typu_string = inkey() to mi program zamieni automatycznie...
Nadal nie odpowiedziales jasno czy wyswietla tobie znaki z terminala na lcd. Dawno sie nie bawilem uartem. Ten kod powinien dzialc. Dim X As Byte Dim Znak As String * 1 Echo On Do X = Ischarwaiting() If X = 1 Then Znak = Inkey() Lcd Znak End If Loop End
No tak nie zauważyłem w gąszczu innych rzeczy tego PK1=UDR:) (Szkoda, że elka nie koloruje składni:/) 1)Jeśli nic nie wysyłam to od czasu wyskakuje kod 84(T) i potem wraca do 10 A jak odepniesz COM od PCta to też się losuje coś?:> Przyjrzyj się kolego może funkcji CHR ( w połączeniu z LCD:) i tym, że sam te znaczki przeliczasz a niepotrzebnie) Oprócz...
witam programuje w bascomie i nie wiem jak uruchomić drugi UART w Atmega162 zrobiłem to tak jak pisało w helpie, pierwszy uart działa bez problemu natomiast drugi nie $regfile = "m162def.dat" $crystal = 14745000 $baud = 9600 $baud1 = 19200 . . (konfiguracja wyświetlacza i deklaracja zmiennych) . . do A = Ischarwaiting() If A = 1 Then I = Inkey() Locate...
Witam mam 2 kody czytające uart. Problem jest taki ze jeden działa a drugi nie i nie wiem co jest powodem. Kawałki kodu pracują na Atmega8L. Z góry dzięki za pomoc. - nie działający Odczytaj_sprzetowy_uart: Uart_txt = "" Do Kod = Inkey() Uart_txt = Uart_txt + Chr(kod) Bufor = Ischarwaiting() Loop Until Bufor = 0...
Witam, Mam pewien problem, wysyłam z programu windowsowego cos takiego: "S" oraz ciąg znaków "12345" uP odbiera lecz wyświetla mi na lcd tylko 34 Co może być powodem: Przesyłam kod: Dane_uart1 = Inkey() If Dane_uart1 = "S" Then Waitus 5 Do Dane_uart1 = Inkey() Dysk_c_2 = Dysk_c_2 + Dane_uart1 If Dane_uart1 = Chr(13)...
Ilosc kB nie ma znaczenia bo jest to zmienne i moze miec nawet xMB czas jest proporcjonalny do ilosci danych, lecz mam problem pomiedzy poprawna komunikacja miedzy DELPHI a BASCOM w wymianie tych danych teraz robie tak: #27 0..255 0 - nie będzie kolejnego bajta #13 1 - bedzie kolejny bajt START | DANA | BEDZIE NASTEPNA | KONIEC do if Ischarwaiting()...
Takie rozważania: Mam zamiar używać sprzętowego uart do połączenia z PC (czyli PD0 jako RxD i PD1 jako TxD). Jednocześnie pozostałe piny portu D chcę użyć do innych rzeczy - część jako wejścia a część jako wyjścia. I teraz pytanie: Czy muszę starannie omijać dwa najmłodsze bity konfigurując kierunki, pullup'y i zapisując wartości? Czy też nawet jak...
Zrobiłem tak jak kolega mówił lecz też nie działa.Kable oczywiście mam podłączone na krzyż. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Config Portc = Input set Portc Do If Pinc.6 = 0 Then Print "a" End If Loop End [/syntax] [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Config Portb = Output Set...
Witam Mam problem z komunikacją pomiędzy dwoma mikrokontrolerami Atmega8. Chciałbym między nimi przesyłać dane a dokładnie jedną zmienną pochodzącą z mojego dalmierza ultradzwiękowego do mikroprocesora obsługującego sterowanie robotem. Byłbym wdzięczny jesli otrzymałbym propozycję działającego programu nadawania i odbioru. Moje próby niepowiodły się...
inkey bascom inkey odbiór rs485 inkey
antena peugeot partner blokady telefonu samsung przetop metalu
honda accord radio honda accord radio
Zamazane strony sportowe na WP - jak naprawić? Same Explorer 2 - Podnośnik nie działa, przyczyny i rozwiązania