 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Pon Okt 18, 2010 6:59 pm Naslov sporočila: Bascom spreminjanje spremenljivk |
|
|
Rad bi izdelal IR oddajnik, kateri bi z ukazom
Koda: |
Rc5send Togbit , Address , Command
|
poslal "address" in "command". Problem je v tem, da imam jaz spremenljivko long in bi rad poslal le spodnjih 10 bitov. Se pravi, da bi v command vpisal bite od bit0 do bit5 v address pa bite od bit6 do bit10.
Razmišljal sem, da bi long spremenil v binarni string ter vzel le določene bite ter jih spremenil v decimalno število (byte) in jo priredil v command in address v teoriji je enostavno v praksi pa nimam pojma kako bi to izvedel . _________________ Razsvetljujemo od leta 1920! |
|
Nazaj na vrh |
|
 |
Vlado Član

Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 563 Aktiv.: 2.38 Kraj: Ljubljana
|
Objavljeno: Pon Okt 18, 2010 9:52 pm Naslov sporočila: |
|
|
mogoče obstaja bolj elegantna rešitev od te:
comand.0=bit.0
comand.1=bit.1
.....
.....
adres.0=bit.6
adres.1=bit.7
itn.
LP
Vlado |
|
Nazaj na vrh |
|
 |
smatjaz Član


Pridružen-a: Pon 10 Nov 2003 16:33 Prispevkov: 846 Aktiv.: 3.57
|
Objavljeno: Tor Okt 19, 2010 7:04 am Naslov sporočila: |
|
|
Poskusi s shiftleft in shiftright.
Lp M. _________________ Električni aparati delujejo na dim ... ko dim iz njih uide ... ne delujejo več! |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Tor Okt 19, 2010 7:40 am Naslov sporočila: |
|
|
Koda: |
Dim Command As Byte , Address As Byte
Dim L As Long
' Damo v L nekaj:
L = &H44332211
' Binarno to izgleda 0100 0100 0011 0011 0010 0010 0001 0001
' za coomand in addres pridejo v poštev cc cccc
' aaa aa
' in izpišemo v hex obliki:
Print Hex(l)
' Definiramo polje 4-ih bajtov od X(1) do X(3) preko spremenljivke L
Dim Xx(4) As Byte At L Overlay
' In izpišemo bajt po bajt
Dim I As Byte
For I = 1 To 3
Print I ; " " ; Hex(xx(i))
Next
' Ugotovimo, kar morda tudi že vemo, da so v pomnilniku napisani
' najprej bajti nizke vrednosti in na koncu bajti višje vrednosti
' command vpisal bite od bit0 do bit5 v address pa bite od bit6 do bit10.
Command = Xx(1) And &H3F
Print Hex(command)
' Dobili smo v command nanižjih 6 bitov spremenljivke L
' sedaj naredimo premik bitov v spreneljivki L za 6 bitov
Shift L , Right , 6
' in ponovimo isto na spremenljivki address,a le za pet bitov
Address = Xx(1) And &H1F
Print Hex(address)
End
|
In to preverimo s simulatorjem |
|
Nazaj na vrh |
|
 |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Sre Okt 20, 2010 3:41 pm Naslov sporočila: |
|
|
Jaz sem sicer naredil malo po svoje in upam, da nisem kje pobrkljal? Za pretvorbo sem uporabljal stringe ter binarne pretvorbe in zadeva sicer deluje, ko pogledam na osciloskopu problem pa imam sedaj pri branju ter sestavljanju spremenljivk. Ne vem kako naj ujamem vseh 6 poslanih kod ter kako naj jih prevedem nazaj v eno spremenljivko? Kot pomoč sem uporabljal ukaz "mid" kateri naj bi zamenjal določen del v nekem stringu.
Koda: |
Dim Batts As Long
Dim Upovps As Word
Dim T As Word
Dim Stevec As Long
Dim Togbit As Byte
Dim Command(6) As Byte
Dim Address(6) As Byte
Dim Longstr As String * 32
Dim Wordstr As String * 16
Dim Commstr As String * 6
Dim Addstr As String * 5
Poslji:
Longstr = Bin(batts)
Addstr = Mid(longstr , 22 , 5)
Commstr = Right(longstr , 6)
Address(1) = Binval(addstr)
Command(1) = Binval(commstr)
Wordstr = Bin(upovps)
Addstr = Mid(wordstr , 6 , 5)
Commstr = Right(wordstr , 6)
Address(2) = Binval(addstr)
Command(2) = Binval(commstr)
Wordstr = Bin(t)
Addstr = Mid(wordstr , 6 , 5)
Commstr = Right(wordstr , 6)
Address(3) = Binval(addstr)
Command(3) = Binval(commstr)
Longstr = Bin(stevec)
Addstr = Left(longstr , 4)
Commstr = Mid(longstr , 5 , 6)
Address(4) = Binval(addstr)
Command(4) = Binval(commstr)
Addstr = Mid(longstr , 11 , 5)
Commstr = Mid(longstr , 16 , 6)
Address(5) = Binval(addstr)
Command(5) = Binval(commstr)
Addstr = Mid(longstr , 22 , 5)
Commstr = Right(longstr , 6)
Address(6) = Binval(addstr)
Command(6) = Binval(commstr)
Togbit = 1
For Posl = 1 To 6
Rc5send Togbit , Address(posl) , Command(posl)
Toggle Togbit
Waitms 10
Next
Return
|
_________________ Razsvetljujemo od leta 1920! |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sre Okt 20, 2010 4:55 pm Naslov sporočila: |
|
|
Nisem analiziral tvojega programa, le v spremnem tekstu sem opazil napako:
Ukaz Mid ni za spreminjanje nekih bajtov nekje v stringu, temveč za prenos izbranih bajtov iz velikega stringa nekam drugam, v manjši string.
Če si razumel ukaz mid, kot si napisal, ne more delati.
Posamezne bajte v velikem stringu lahko spreminjaš, če string redefiniraš kot polje bajtov
AVR Bascom:
Dim string xx as string * 32
dim x(33) as byte at xx overlay
sedaj lahko dobiš deseti bajt stringa kot bajt x(10) itd
in ga lahko delaš z njim kar hočeš |
|
Nazaj na vrh |
|
 |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Sre Okt 20, 2010 6:35 pm Naslov sporočila: |
|
|
Aha no jas sem razumel malo drugače TUKAJ piše da naj bi zamenjalo bom pa še poizkusil z overlay in shiftom. _________________ Razsvetljujemo od leta 1920! |
|
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: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|