Pomoc pri programovaní

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12412
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Pomoc pri programovaní

Príspevok od používateľa boraicho » 28 Nov 2017, 07:28

Ano toto maskovanie je super, škoda že ja vobec neviem použivať tie logicke veci.
nechapem trošku tomu čo si napisal
Účel je vymaskovať (vynulovať) nezaujímavé bity portu (7 až 2). Výsledok je potom jedna z nasledujúcich hodnôt (0, 1, 2, 3)
dobre si to napsial? 7 až 2 a vysledok je 0,1,2,3 ? nie nahodou len 0,1 ?
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Pomoc pri programovaní

Príspevok od používateľa alidedko » 28 Nov 2017, 07:50

00=0
01=1
10=2
11=3
;)
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

Používateľov profilový obrázok
budvar10
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1029
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Pomoc pri programovaní

Príspevok od používateľa budvar10 » 28 Nov 2017, 08:04

Ešte by som dodal, že bity sú číslované od 0 po 7 (bitov je 8 ), t.j. ak maskovaním vynulujem bity 2-7, ostanú len hodnoty bitov 0 a 1. Tie potom môžu nadobúdať hodnoty prezentované vyššie (0-3).
0

Používateľov profilový obrázok
lh
Pokročilý člen
Pokročilý člen
Príspevky: 715
Dátum registrácie: 23 Mar 2013, 14:02
Bydlisko: z južnej strany Poľany
Vek: 46

Re: Pomoc pri programovaní

Príspevok od používateľa lh » 28 Nov 2017, 08:28

0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Pomoc pri programovaní

Príspevok od používateľa peterple » 28 Nov 2017, 20:53

odpovedáné bolo ale ešte skúsim aj ja niečo. Port je osem bitový. Každý jeden bit môže byť 0 alebo 1.
Teda by to vyzeralo nejako takto:

Kód: Vybrať všetko

76543210
00000000    0    0x0
00000001    1    0x1
00000010    2    0x2
00000011    3    0x3
00000100    4    0x4

....
10100010  162   0xA2

11111110  254   0xFE
11111111  255   0xFF
Ak sa na celý port pozrieme ako na číslo v pozičnej číselnej sústave so základom 2, tak v prostrednom stĺpci máme tomu zodpovedajúcu desiatkovú hodnotu a v poslednom stĺpci zase pre zmenu tomu zodpovedajúcu hexadecimálnu hodnotu (to je číslo v číselnej sústave so základom 16).
Kedže požiadavka bola testovať iba bity 0 a 1 tak som ich bitovým AND s maskou odrezal. Tá maska bola 3 preto lebo som robil masku tak že kde ma to nezaujíma som rachol nulu a kde ma to zaujíma som rachol jednotku.

Kód: Vybrať všetko

PORTD  XXXXXX01
MASKA &00000011
      =00000001
Teraz som písmenom X označil bity 7-2 ktoré ma nezaujímajú a ich hodnota môže byť 0 alebo 1. Posledné dva nech majú napríklad hodnotu 0 a 1. Ak ich teraz bitovo vynásobím s maskou 3 tak operacia AND sa robí bit po bite a matematicky je to na úrovni prvej triedy ZDŠ. Takže tam kde je v maske 0 tak bude na 100 péro nula aj vo výsledku. Tam kde je v maske 1 tak vo výsledku bude hodnota bitu portu D.
Inak sú to také známe pravidlá z boolovej algebry ako
0×A=0
1×A=A
Stačí si teraz vyskúšat všetky 4 kombinácie najspodnejších dvoch bitov a je jasné že hodnota celého osembitového čísla bude 0,1,2, alebo 3. Kedže v C sa nedá normálne použiť binárna konštanta tak preto som tam napísal 3. Lebo každý čo bežne robí s bitmi vie že 3 je 00000011.
Ešte je niečo nejasné?
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12412
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Pomoc pri programovaní

Príspevok od používateľa boraicho » 28 Nov 2017, 21:19

Uff, chlape ty si Borec! :thumbup: Vdaka.
Veľka škoda že niesi moj sused. Viem že rozpisane jak pre debilov (naozaj nič v zlom) ale pre mna to je jak sladky kolač a pochopil som každe slovo :thanks:
to si zapišem a budem sa snažiť ten zapis použivať. Ja sa k programovaniu dostavam raz za pol roka, takže fakt zabudnem čo som sa naučil pred rokom a viac, stále si musim otvarať stare programy v ktorych som použival kde jake veci, UART, atd...
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok