www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Obračaje spremenljivke

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.27
Kraj: Ljubljana

PrispevekObjavljeno: Tor Okt 11, 2011 1:30 pm    Naslov sporočila:  Obračaje spremenljivke Odgovori s citatom

Iskal sem a nisem našel logično funkcijo, ki bi obrnila bite v bytu.

Imam spremenljivko npr. 10011110 jaz pa bi jo rad obrnil se pravi da bi dobil 01111001 .

V bascomu nisem našel nobenega ukaza ki bi to naredil, nimam pa ideje katera logična funkcija bi pomagala Doubt .

_________________
Razsvetljujemo od leta 1920!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1234
Aktiv.: 5.67
Kraj: KOPER

PrispevekObjavljeno: Tor Okt 11, 2011 1:55 pm    Naslov sporočila:   Odgovori s citatom

Tako naredi:

Koda:
Dim A As Byte
Dim B As Byte
Dim I As Byte
Dim X As Byte


A = &B10011110
X = 7


For I = 0 To 7
    If A.i = 1 Then Set B.x Else Reset B.x
    Decr X
Next I

_________________
Lep pozdrav iz Kopra Rudi


Nazadnje urejal/a rudiP Tor Okt 11, 2011 2:09 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.27
Kraj: Ljubljana

PrispevekObjavljeno: Tor Okt 11, 2011 2:00 pm    Naslov sporočila:   Odgovori s citatom

Ukaz B = NOT A invertira bite, jaz pa bi rad zamenjal vrednosti prvega in osmega bita, drugega in sedmega itd. Tako bi obrnil vrstni red X=ABCD / Y=DCBA.
_________________
Razsvetljujemo od leta 1920!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Tor Okt 11, 2011 2:04 pm    Naslov sporočila:   Odgovori s citatom

assemblerski "swap" v registru menja zgornje bite s spodnimi. Verjetno bo v bascomu kak podoben ukaz.
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.27
Kraj: Ljubljana

PrispevekObjavljeno: Tor Okt 11, 2011 2:24 pm    Naslov sporočila:   Odgovori s citatom

Ne poznam assemblerja ... lahko pa v bascom vključim asm kodo. Ali bi nekaj takega delovalo?

Koda:

Dim A As Byte

Loadadr A , X

$asm

Swap X

$end Asm


@Rudi ... rešitev je res enostavna vendar časovno malo požrešna. Tudi sam sem razmišljal o tem da bi vsak bit posebej uporabil. Če ne bom našel boljše rešitve pa uporabim to Smile

_________________
Razsvetljujemo od leta 1920!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Tor Okt 11, 2011 2:30 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Član
Član



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 563
Aktiv.: 2.38
Kraj: Ljubljana

PrispevekObjavljeno: Tor Okt 11, 2011 2:33 pm    Naslov sporočila:   Odgovori s citatom

Poskusi SHIFT, ali ROTATE
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
S53DZ
Član
Član



Pridružen-a: Čet 28 Apr 2011 9:27
Prispevkov: 951
Aktiv.: 5.52
Kraj: Ljubljana

PrispevekObjavljeno: Tor Okt 11, 2011 3:50 pm    Naslov sporočila:   Odgovori s citatom

V ARM asemblerju bi bila lahko rešitev s shiftom taka (na hitro spisana in ne preizkušena koda):

Koda:
; vhod r0=x
; izhod r0=y
   mov r1, #0
   mov r2, #0x80; maska in index
   mov r0, r0, LSL #7
loop:
   and r3, r0, r2
   orr r1, r1, r3
   mov r0, r0, LSR #2
   movs r2, r2, LSR #1
   bne loop
   mov r0, r1; vrne obrnjen byte v r0

EDIT: koda je preizkušena in deluje


Nazadnje urejal/a S53DZ Čet Okt 13, 2011 10:54 am; skupaj popravljeno 1 krat
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Tor Okt 11, 2011 4:56 pm    Naslov sporočila:   Odgovori s citatom

Šele sedaj sem videl, da ne menjaš bite 7-3,6-2,5-1,4-0 ampak 7-0,6-1,5-2,4-3

V assemblerju bi potem 8x shiftnil en register v eno drugega pa v drugo stran.


Vrednost v R16 bo po tej kodi "zrcalna"
Primer :
Koda:
   ldi r17,1
Zanka:
   lsr   r16
   rol r17
   brcc Zanka
   mov r16,r17


Kako to "vtaknit" v Bascom kodo pa ne vem. (če prevajalnik dopusti direkten dostop do registrov potem ne bi smelo biti problema)

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Tor Okt 11, 2011 6:56 pm    Naslov sporočila:   Odgovori s citatom

To je najlažje direktno s preverjanjem in nastavljanjem posameznih bitov narediti, pa naj se prevajalnik potem ukvarja s kodo. Pri tako enostavnih "if" pogojih je verjetno .hex kode vsega 15 vrstic.
Koda:

spr2=0 // najprej je nova spremenljivka 0
if spr1.0=1 then // če je bit 0 v spr1 enak 1
  spr2.7 = 1  // se tudi bit 7 v spr2 postavi na 1
endif
if spr1.1=1 then
  spr2.6 = 1
endif
if spr1.2=1 then
  spr2.5 = 1
endif
if spr1.3=1 then
  spr2.4 = 1
endif
if spr1.4=1 then
  spr2.3 = 1
endif
if spr1.5=1 then
  spr2.2 = 1
endif
if spr1.6=1 then
  spr2.1 = 1
endif
if spr1.7=1 then
  spr2.0 = 1
endif

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 494 dni


Powered by phpBB © 2001, 2005 phpBB Group