|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
toncibalonci Član
Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.63 Kraj: Dravograd
|
Objavljeno: Sob Maj 26, 2012 9:20 pm Naslov sporočila: RS232 Bascom |
|
|
Prosim za malo pomoči. Z trminalom pošljem na mikrokontroler npr. 235 in dobim nazaj po en bayt 50 51 53 z uporabo "chr" pać dobim 2 3 5 bayt po bayt, kak pa naredim da bom lahko izpisoval 235?? Hvala
B = Ischarwaiting(#2)
If B = 1 Then
A = Inkey(#2)
Print #2 , A
End If |
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.27 Kraj: Ljubljana
|
Objavljeno: Sob Maj 26, 2012 10:06 pm Naslov sporočila: |
|
|
S terminalom pošlješ '2' '3' in '5'.
Vprašanje ni najbolj jasno.
Če bi kot rezultat rad vrednost 235, potem rabiš nekaj podobnega:
Koda: |
A=0
Vrednost_vnesena=0
zanka:
B = Ischarwaiting(#2)
If B = 1 Then
TMP_ZNAK = Inkey(#2)
if TMP_ZNAK = ZNAK_ZA_KONEC_PRENOSA then
goto izhod_iz_zanke
else
Vrednost_vnesena=1 ' opcija, da lahko ločiš '0','ZNAK_ZA_KONEC_PRENOSA' od 'ZNAK_ZA_KONEC_PRENOSA'
A= 10*A
A = A + (TMP_ZNAK - 48) ' 48 = '0' , tole bo treba napisat v več vrsticah, ker:
' bascom ne prežveči dveh operacij v isti vrstici in
' bascomu ne bodo všeč tipi spremenljivk. Po potrebi uporabi še kakšno spremenljivko, ter ASC in CHR
End if
End If
goto zanka
:izhod_iz_zanke
|
|
|
Nazaj na vrh |
|
|
toncibalonci Član
Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.63 Kraj: Dravograd
|
Objavljeno: Sob Maj 26, 2012 11:19 pm Naslov sporočila: |
|
|
S terminalom pošljem npr. 235 skupaj v mk pa dobim bayt po bajt. Gre za to da bi rad v mk vpisal neko vrednost. Ne znam pa teh bayto združit v eno spremenljivko. Upam da sem bolj razumljivo napisal. Hvala |
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.27 Kraj: Ljubljana
|
Objavljeno: Ned Maj 27, 2012 12:23 am Naslov sporočila: |
|
|
Če v terminal vtipkaš 235, si poslal (vsaj) tri znake ASC("2"), ASC("3") , ASC("5") + morebiti 13 in 10.
Če bi rad to pretvoril v število, upoštevaš, da je
ASC("0") = 48
x = ASC("x") - ASC("0") -> x = ASC("x") - 48 , kjer je x = [0 - 9] in "x" =["0" - "9"]
in
235 = 2*100 + 3*10 +5
Ker na splošno dolžina ni znana, lahko vtipkaš "2", "3", "5" , ENTER
ZNAK_ZA_KONEC_PRENOSA je v tem primeru 13 (ENTER = 13)
Če bi rad s terminalom poslal en byte, ki ima vrednost 235, vključi "num lock", pritisni in drži tipko Alt, na numerični tipkovnici odtipkaj 235, spusti tipko Alt.
Na ta način lahko pošlješ vrednosti, ki predstavljajo natisljive znake [32 -127]. V večini primerov delujejo tudi [128 - 255] (obvezno 8 bitna komunikacija).
Večina vrednosti manjših od 32 predstavlja kontrolne znake. Kaj se bo zgodilo, je odvisno od vrednosti (znaka) terminalskega programa in njegovih nastavitev.
Ta trik ne deluje s tipko Alt Gr. |
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.27 Kraj: Ljubljana
|
Objavljeno: Ned Maj 27, 2012 12:39 am Naslov sporočila: |
|
|
Ok, imaš še dve bolj enostavne možnosti:
Če si lahko privoščiš, da program čaka na vpis spremenljivke, uporabi INPUT.
V nasprotnem primeru prihajajoče znake vpiši v string, ter uporabi VAL. |
|
Nazaj na vrh |
|
|
toncibalonci Član
Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.63 Kraj: Dravograd
|
Objavljeno: Ned Maj 27, 2012 1:10 am Naslov sporočila: |
|
|
Mislim da razumem kaj misliš. Sam ne vem od kod poberem te tri bayte v mk da jih lahko pol pretvorim v neko spremenljivko??
Komunikacijo bi rad naredo z LabVIEW-em. Sem probal tudi INPUT (uporabil prekinitev) in z terminalom dela v LB mi pa program obstoji ko pošljem neko vrednost. Seveda pa nisem na koncu poslal CR,šele zdaj sem se spomnil in zato verjetno obstoji.
|
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.04 Kraj: Dragomer
|
Objavljeno: Ned Maj 27, 2012 11:21 am Naslov sporočila: |
|
|
Jaz berem rx pin mikroprocesorja vedno v interrupt rutini, ki ujamo bajt po bajt in jih lepo zlaga po vrsti v nek character array.
Posebno je občutljiva na znak CHR(H0D), takrat postavi bit 'prebrano', in glavni program potem, ko zazna da je ta bit postavljen, obdela informacijo
Koda: |
Si_rtn:
' Preberemo znak
Y(x) = Udr
If Y(x) = &H0D Then set Prebrano ' postavi bit Prebrano
If Y(x) = &H0A Then Decr X ' ignore cr
' sledeči znak naj zaključi niz: (niz mora biti zaključen z binarno ničlo)
Incr X
Y(x) = 0
Return |
_________________ Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati. |
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.27 Kraj: Ljubljana
|
Objavljeno: Ned Maj 27, 2012 11:44 am Naslov sporočila: |
|
|
toncibalonci je napisal/a: |
Sam ne vem od kod poberem te tri bayte v mk da jih lahko pol pretvorim v neko spremenljivko?? |
Koda: |
B = Ischarwaiting(#2)
If B = 1 Then
TMP_ZNAK = Inkey(#2) ' tukaj se izvede branje znaka |
ja, INPUT potrebuje ENTER na koncu.
INPUT v prekinitveni rutini je slaba ideja, ker program v prekinitvi čaka na (ostale) znake. |
|
Nazaj na vrh |
|
|
toncibalonci Član
Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.63 Kraj: Dravograd
|
Objavljeno: Ned Maj 27, 2012 11:56 am Naslov sporočila: |
|
|
Ja ja saj vem kje se izvede branje znaka,sam jih je potrebno nekam zložit (v array tak kot vilko pravi) in jih pol prebrat. To mi ni glih jasno. |
|
Nazaj na vrh |
|
|
besoft Član
Pridružen-a: Ned 01 Apr 2012 10:22 Prispevkov: 585 Aktiv.: 3.99 Kraj: Žižki - Prekmurje
|
Objavljeno: Ned Maj 27, 2012 12:04 pm Naslov sporočila: |
|
|
int47 je napisal/a: |
toncibalonci je napisal/a: |
Sam ne vem od kod poberem te tri bayte v mk da jih lahko pol pretvorim v neko spremenljivko?? |
Koda: |
B = Ischarwaiting(#2)
If B = 1 Then
TMP_ZNAK = Inkey(#2) ' tukaj se izvede branje znaka |
ja, INPUT potrebuje ENTER na koncu.
INPUT v prekinitveni rutini je slaba ideja, ker program v prekinitvi čaka na (ostale) znake. |
poskusi takole:
TMP_ZNAK =TMP_ZNAK + Inkey(#2) |
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.27 Kraj: Ljubljana
|
Objavljeno: Ned Maj 27, 2012 12:21 pm Naslov sporočila: |
|
|
besoft je napisal/a: |
poskusi takole:
TMP_ZNAK =TMP_ZNAK + Inkey(#2) |
Po sprejemu "235" bo TMP_ZNAK = 50 + 51 +52 = 153 , oz -103 pri uporabi predznačene spremenljivke. |
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.04 Kraj: Dragomer
|
Objavljeno: Ned Maj 27, 2012 3:50 pm Naslov sporočila: |
|
|
toncibalonci je napisal/a: |
Sam ne vem od kod poberem te tri bayte v mk da jih lahko pol pretvorim v neko spremenljivko?? |
Seveda samo ugibam, kaj bi ti rad.
Če števila 51, 52 in 53. vsebine treh bajtov, kadar le ti predstavljajo znake 3,4 in 5
in bi rad število 345 dal v neko spremenljivko, je najprej potrebno da v četrti bajt, ki sledi bajtu z vsebino 53 vpisati ničlo, ki markira konec niza znakov.
Potem je potrebno definirati string spremenljivko preko teh štith bajtov
potem lahko z funkcijo val (glej help in primere) kjer je argument ta nova string spremenljivka dobiš vsebino 345 v variabli, ki je na levi strani funkcije.
Seveda pa samo ugibam, kje imaš tiste tri bajte, in kako si jih poimenoval. _________________ Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati. |
|
Nazaj na vrh |
|
|
toncibalonci Član
Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.63 Kraj: Dravograd
|
Objavljeno: Pon Maj 28, 2012 6:52 pm Naslov sporočila: |
|
|
Hvala za odgovore. Kak bo čas bom to probal. Javim rezultate oz. bolj verjetno postavim novo vprašanje
Lp |
|
Nazaj na vrh |
|
|
pirpy Član
Pridružen-a: Ned 30 Maj 2004 21:57 Prispevkov: 772 Aktiv.: 3.47 Kraj: Topolšica
|
Objavljeno: Sob Sep 07, 2013 5:51 am Naslov sporočila: |
|
|
Lp
Da ne odpiram nove teme bom kar tule vprašal
rad bi poslal znak preko rs232 brez da uporabim ukaz print saj ukaz print čaka dokler se byte ne pošlje in če je baudrate počasen cel procesor stoju in čaka na konec pošiljanja šele potem nadaljuje z programom
nikakor ne najdem primera kako to narediti z prekinitvami in z pisanjem byta ki ga hočem oddati direkt v register
prekinitev je utxc
register za oddajanje pa bi naj bil ucr1a kot je opisano tule
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=20767
vendar se mučim že nekaj časa a zadeva ne deluje kot tu piše ??
prosim za pomoč
B |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 69 dni
Powered by phpBB © 2001, 2005 phpBB Group
|