<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=23653&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-03-09T10:11:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23653&amp;mode</id>
<entry>
<author><name><![CDATA[fofex]]></name></author>
<updated>2021-03-09T10:11:14+01:00</updated>
<published>2021-03-09T10:11:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231372#p231372</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231372#p231372"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231372#p231372"><![CDATA[
<div class="quotetitle">adamma25 napisał(a):</div><div class="quotecontent"><br />Dlaczego w strukturze zmienne typu int?<br /></div><br />Powinno być raczej unsigned. Możesz wstawić unsigned char albo uint8_t, jeśli wolisz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21072">fofex</a> — 9 mar 2021, o 10:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamma25]]></name></author>
<updated>2021-03-09T09:31:43+01:00</updated>
<published>2021-03-09T09:31:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231370#p231370</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231370#p231370"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231370#p231370"><![CDATA[
Wyjścia = (0b00001111 &amp; wyjścia) | 0b1010xxxx; jeśli dobrze zrozumiałem to tak można<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21692">adamma25</a> — 9 mar 2021, o 09:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarosław J]]></name></author>
<updated>2021-03-09T09:21:34+01:00</updated>
<published>2021-03-09T09:21:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231369#p231369</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231369#p231369"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231369#p231369"><![CDATA[
Zgadza się, ale  jeszcze raz.   Chcę do  zmiennej  wyjścia przypisać cztery  pierwsze bity  jako  0b1010xxxx  nie ruszając  bitów młodszych Nie chcę robić tego  w ten sposób <br />wyjscia |= (0b1010xxxx)  a potem <br />wyjścia &amp;= ~(0b0101xxxx)  <br />ponieważ mam  już  przygotowaną  wcześniej  przez inną funkcję  połówkę bajtu  która  wygląda tak <br />0b1010xxxx<br /><br />nie mogę tego zrobić  w  ten sposób <br />wyjścia = (0b1010xxxx)   ponieważ zmienić muszę  wtedy  też  drugą młodszą część bajtu.<br /><br /><br />I  tak  jak  w tytule  posta  nie  wiem czy  lepiej  maskować  pół bajtu  ( w jaki sposób)   czy   przesuwać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=786">Jarosław J</a> — 9 mar 2021, o 09:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamma25]]></name></author>
<updated>2021-03-09T09:12:26+01:00</updated>
<published>2021-03-09T09:12:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231368#p231368</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231368#p231368"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231368#p231368"><![CDATA[
Kolego wszystko możesz zrobić, przed wysłaniem do rejestru. Przecież dopóki nie wyślesz to nic się nie zmieni. Użyj AND lub OR tak jak pisałem czy inaczej. Możesz przed wysłaniem odrazu wpisać bajt który ci odpowiada.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21692">adamma25</a> — 9 mar 2021, o 09:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarosław J]]></name></author>
<updated>2021-03-09T09:02:40+01:00</updated>
<published>2021-03-09T09:02:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231367#p231367</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231367#p231367"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231367#p231367"><![CDATA[
Trochę moje pytanie się rozjechało, więc jeśli pozwolicie  wyjaśnię jeszcze raz o  co  mi chodzi:<br /><br />Mam  bajt o nazwie &quot;wyjscia&quot;  i  steruje  on dwoma zestawami przekaźników  (po 4) .  W różnych  momentach  programu   na tych  czterech  przekaźnikach  mają się  pojawiać  różne kombinacje  załączonych  i   wyłączonych  przekaźników  I tak  <br /><br />pierwsza cześć   bajtu  ( pierwsze  cztery  przekaźniki)  mają mieć  stany  1010  a  druga część  bajtu  ma mieć stan 0011. <br />W pewnym momencie  zmienia się stan tylko  czterech  pierwszych  przekaźników  na  zupełnie inny   niektóre jego  bity są wygaszane, niektóre zapalane  a niektóre  bez  zmian.   nie mogę tego  zrobić  za pomocą  opertaora =  ponieważ  zapiszę cały  bajt   a nie chcę  ruszać  jego  drugiej  części.   Nie mogę zrobić za pomocą |=  ponieważ tylko zapalę  bajty  a nie wygaszę.   Kiedy  zrobię &amp;=  tylko wygaszę  a  nie pozapalam. <br /><br />Wcześniejsze moje  pomysły  nie działają.  Jaką prostą operacją można zapisać (zamaskować)  jedną połowę bajtu  nie ruszając  jednocześnie  drugiej  a potem  drugą połowę, nie zmieniając  nic  w pierwszej przy pomocy  najlepiej   innej  zmiennej  dosłownej   tzn 0b0101xxxx  lub 0bxxxx0011  ?<br /><br />Nie chcę pojedynczo  zapalać i  gasić bitów  tak  jak  podpowiedziano  wcześniej,  ponieważ  mam już  ustalone różne  stany  tych  przekaźników (półbajtów)   i  nie wiem  z jakiego  stanu   będą  zmieniane   Na jaki  wiem ale  warunki  typu  if  skomplikowałyby  program mocno.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=786">Jarosław J</a> — 9 mar 2021, o 09:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamma25]]></name></author>
<updated>2021-03-09T08:57:44+01:00</updated>
<published>2021-03-09T08:57:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231366#p231366</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231366#p231366"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231366#p231366"><![CDATA[
Przy sumowaniu OR, tam gdzie była jedynka wcześniej, to zostanie jedynka. Jeśli chcesz skasować te jedynki to musisz użyć najpierw AND czyli: <br />wyjście &amp;= ~(0b00001111), a następnie użyć sumy OR tak jak wcześniej pisałem lub odrazu można : <br />Wyjście =( (wyjście &amp;(~(0b00001111))) | pol_bajtu )). Chyba tak. Wybacz jeśli coś pomyliłem z nawiasami. Wydaje mi się że w ten sposób, ale mogę się mylić<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21692">adamma25</a> — 9 mar 2021, o 08:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarosław J]]></name></author>
<updated>2021-03-09T08:33:06+01:00</updated>
<published>2021-03-09T08:33:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231365#p231365</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231365#p231365"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231365#p231365"><![CDATA[
<div class="quotetitle">adamma25 napisał(a):</div><div class="quotecontent"><br />wyjście |= pol_bajtu ; (wyjście = wyjście | pol_bajtu)<br />Tak ustawisz młodsze pół bajtu bez ingerencji w starsze.<br /></div><br /> Tak jak powiedziałeś  ustawię  ale  tylko ustawię, bo używamy operatora |  Ja chciałem również wyzerować te bity  według  wcześniej przegotowanego schematu. <br /><br />Np kiedy zmienna  &quot;wyjścia&quot;  będzie  miała wartość 1010   i  dopiszę  w ten sposób&quot; wyjście |= 0b0101&quot;  to otrzymam  1111, czy tak jak chciałem 0101?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=786">Jarosław J</a> — 9 mar 2021, o 08:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamma25]]></name></author>
<updated>2021-03-09T08:30:16+01:00</updated>
<published>2021-03-09T08:30:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231364#p231364</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231364#p231364"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231364#p231364"><![CDATA[
Kasowanie poszczególnych bitów bez ingerencji w pozostałe:<br />wyjście &amp;= ~(1&lt;&lt;nr_bitu);<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21692">adamma25</a> — 9 mar 2021, o 08:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2021-03-09T08:15:14+01:00</updated>
<published>2021-03-09T08:15:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231363#p231363</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231363#p231363"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231363#p231363"><![CDATA[
Maskowanie to AND a nie żaden XOR. Sumowanie to OR.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 9 mar 2021, o 08:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamma25]]></name></author>
<updated>2021-03-09T08:14:04+01:00</updated>
<published>2021-03-09T08:14:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231362#p231362</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231362#p231362"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231362#p231362"><![CDATA[
pol_bajtu = 0b0000xxxx;<br />wyjście |= pol_bajtu ; (wyjście = wyjście | pol_bajtu)<br />Tak ustawisz młodsze pół bajtu bez ingerencji w starsze.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21692">adamma25</a> — 9 mar 2021, o 08:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarosław J]]></name></author>
<updated>2021-03-09T08:04:37+01:00</updated>
<published>2021-03-09T08:04:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231361#p231361</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231361#p231361"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231361#p231361"><![CDATA[
czyli  operator XOR.  Jeśli  bit zostanie zamaskowany wartością 0  nie zostanie zmieniony. A  takie użycie  będzie  poprawne?<br /><br />[syntax=c]wyjscia =  0b11110000 ^ 0b10010000;  // maska to 4 jedynki  w pierwszym wyrażeniu  a do bajtu zostanie  wpisana wartość 1001  na pierwszych czterech  bitach  najstarszych - pozostałe cztery bity bajtu wejścia  nie zostaną zmienione jakiekolwiek by one były[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=786">Jarosław J</a> — 9 mar 2021, o 08:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2021-03-09T08:14:26+01:00</updated>
<published>2021-03-09T07:53:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231360#p231360</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231360#p231360"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231360#p231360"><![CDATA[
Maskowanie i sumowanie bitów<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 9 mar 2021, o 07:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarosław J]]></name></author>
<updated>2021-03-09T07:39:28+01:00</updated>
<published>2021-03-09T07:39:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231359#p231359</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231359#p231359"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231359#p231359"><![CDATA[
A jeśli  te połówki mam już wcześniej zdefiniowane  w postaci stałej - słowa 4 bitowego  np: <br /><br /> w zależności co się dzieje  w programie wystawiam połówkę bajtu <br />1111<br />0111<br />1011<br />1101<br />0101<br />0001<br /><br />Jak taką połówkę wstawić  jako  taką wartość binarną nie zmieniając  jednocześnie drugiej połówki ?<br />Moimi sposobami powyżej to poustawiam tylko bity,  a nie wyzeruję, lub wyzeruję a nie ustawię  albo też  zmienię cały  bajt  przypisaniem  &quot;= &quot; <br /><br />Jeśli bym chciał zamaskować drugą połówkę bajtu  musiałbym ją  chwilowo  zapisać do jakiejś innej  zmiennej  a potem  poprzez  |=  dopisać  tę drugą część .  Ale tutaj też  albo  bity poustawiam, albo wyzeruję  albo zapiszę cały  bajt  - czego  też nie chcę   i  znów  jestem w punkcie  wyjścia  <br />Można by też użyć przesunięcia  bitowego  np wyjscia = (0b1101&lt;&lt;4) ale to też poprzesuwa mi  pozostałe  bity bajtu. <br /><br />Czy jest jakiś sposób aby  zmienić  połówkę bajtu  bez ingerencji  w drugą jej część?   jestem pewny  że język C  umożliwia takie operacje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=786">Jarosław J</a> — 9 mar 2021, o 07:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamma25]]></name></author>
<updated>2021-03-09T06:42:13+01:00</updated>
<published>2021-03-09T06:42:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231358#p231358</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231358#p231358"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231358#p231358"><![CDATA[
Forex. Dlaczego w strukturze zmienne typu int?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />Fofex miało być ☺️<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21692">adamma25</a> — 9 mar 2021, o 06:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fofex]]></name></author>
<updated>2021-03-08T23:51:42+01:00</updated>
<published>2021-03-08T23:51:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231356#p231356</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231356#p231356"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231356#p231356"><![CDATA[
[syntax=c]#include &lt;stdint.h&gt;<br /><br />union {<br />    struct {<br />        int relay0:1;<br />        int relay1:1;<br />        int relay2:1;<br />        int relay3:1;<br />        int led0:1;<br />        int led1:1;<br />        int led2:1;<br />        int led3:1;<br />    };<br />    uint8_t dump;<br />} wyjscia;<br /><br />main()<br />{<br /><br />    //ustawianie<br />    wyjscia.relay0 = 1;<br />    wyjscia.led0 = 1;<br />    <br />    //kasowanie<br />    wyjscia.relay1 = 0;<br />    wyjscia.led0 = 0;<br /><br />    //zrzut na SPI<br />   SPDR = wyjscia.dump;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21072">fofex</a> — 8 mar 2021, o 23:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[auers]]></name></author>
<updated>2021-03-08T22:33:13+01:00</updated>
<published>2021-03-08T22:33:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231354#p231354</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231354#p231354"/>
<title type="html"><![CDATA[Re: Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231354#p231354"><![CDATA[
Twój sposób jest całkiem poprawny i powinien działać. <br />Co do elegancji to oczywiście można to zrobić inaczej, kwestia co się komu podoba i czemu ma to służyć.<br />Pytanie tylko jak to chcesz wywoływać w programie?<br />Bo jeżeli masz ustawione wcześniej wszystkie zmienne led i prk to możesz to załatwić np. jedną linią:<br />[syntax=c]wyjscia=(led1&lt;&lt;7)|(led2&lt;&lt;6)|(led3&lt;&lt;5)|(led4&lt;&lt;4)|(prk1&lt;&lt;3)|(prk2&lt;&lt;2)|(prk3&lt;&lt;1)|(prk4&lt;&lt;0);[/syntax]<br />jeżeli chcesz zmienić tylko jeden bit to musisz to maskować np. tak: <br />[syntax=c]wyjscia=(wyjscia&amp;(~(1&lt;&lt;7)))|(led1&lt;&lt;7);[/syntax]<br />Oczywiście zamiast posługiwać się stałymi dosłownymi możesz je wcześniej zdefiniować i posługiwać się makrami.<br />[syntax=c]#define LED1_POS 7<br />wyjscia=(wyjscia&amp;(~(1&lt;&lt;LED1_POS)))|(led1&lt;&lt;LED1_POS);[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br />Może trochę się pośpieszyłem z tym, że twój sposób jest dobry.<br />Przesuwasz całe wyjścia, powinno być:<br />[syntax=c]if (prk1) wyjscia |= (1&lt;&lt;1);<br />else wyjscia &amp;= ~(1&lt;&lt;1);<br />....<br />if (led3) wyjscia |= (1&lt;&lt;7);<br />else wyjscia &amp;= ~(1&lt;&lt;7);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7806">auers</a> — 8 mar 2021, o 22:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarosław J]]></name></author>
<updated>2021-03-08T21:55:26+01:00</updated>
<published>2021-03-08T21:55:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231352#p231352</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231352#p231352"/>
<title type="html"><![CDATA[Przesunięcia bitowe czy maskowanie bitów??]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23653&amp;p=231352#p231352"><![CDATA[
Hej.  Mam taki dylemat.  Mam zmienną o  nazwie &quot;uint8_t  wyjscia&quot; Dla rozjaśnienia dodam, że  będzie ona wysyłana  na rejestr 74HC595 funkcją spi_xmit_byte ();<br /><br />problem stanowi to, że pierwsza część bajtu (najstarsze cztery bity ) sterują przypuśćmy ledami,  a druga część bajtu (najmłodsze cztery bity)  sterują przekaźnikami.<br /><br />Sterowanie mógłbym zrobić poprzez maskowanie  czyli  [syntax=c]wyjscia |= 0b10010000;[/syntax] ale wpisując takie coś  to ustawię bity  W taki sposób [syntax=c]wyjscia &amp;= ~(0b10010000);[/syntax]  wyzeruję.  Jednocześnie jeśli chciałbym zapisać całą połówkę    [syntax=c]wyjscia = 0b10010000;[/syntax]   poprzestawiam drugą połówkę bitu, której  nie chcę ruszać. <br /><br />Ustawianie i kasowanie każdego  bitu  niezależnie  mógłbym zrealizować tak:<br />[syntax=c]if (prk1) wyjscia |= (wyjscia&lt;&lt;1);<br />else wyjscia &amp;= ~(wyjscia&lt;&lt;1);<br />.....<br />if (prk3) wyjscia |= (wyjscia&lt;&lt;3);<br />else wyjscia &amp;= ~(wyjscia&lt;&lt;3);<br />......<br />if (led1) wyjscia |= (wyjscia&lt;&lt;5);<br />else wyjscia &amp;= ~(wyjscia&lt;&lt;5);<br />.....<br />if (led3) wyjscia |= (wyjscia&lt;&lt;7);<br />else wyjscia &amp;= ~(wyjscia&lt;&lt;7);[/syntax]<br /><br /><br />Coś mi jednak  mówi  że  nie jest to  dobry, poprawny  czy też elegancki  sposób.<br /><br />Czy istnieje jakieś inne bardziej eleganckie rozwiązanie takiego sterowania?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=786">Jarosław J</a> — 8 mar 2021, o 21:55</p><hr />
]]></content>
</entry>
</feed>