<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bit Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/bit/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/bit/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Mon, 12 Oct 2015 18:25:10 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>Bit Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/bit/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Operatori per spostare i bit (bitwise)</title>
		<link>https://logicaprogrammabile.it/operatori-spostare-bit/</link>
					<comments>https://logicaprogrammabile.it/operatori-spostare-bit/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 06 Feb 2012 22:22:19 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Bit]]></category>
		<category><![CDATA[Bitwise]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2440</guid>

					<description><![CDATA[<p>Usare Arduino per spostare i bit di una variabile Oltre alle funzioni viste nel precedente articolo, Arduino è capace di eseguirne altre ed in particolare lo spostamento a destra o a sinistra bit a bit. L&#8217;operatore per lo spostamento a destra si esprime con questo...</p>
<p>The post <a href="https://logicaprogrammabile.it/operatori-spostare-bit/">Operatori per spostare i bit (bitwise)</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Usare Arduino per spostare i bit di una variabile</h3>
<p>Oltre alle funzioni viste <a title="Arduino, lavorare con i bit" href="https://logicaprogrammabile.it/arduino-lavorare-con-bit/">nel precedente articolo</a>, Arduino è capace di eseguirne altre ed in particolare lo spostamento a destra o a sinistra bit a bit. L&#8217;operatore per lo spostamento a destra si esprime con questo operatore<strong> &gt;&gt;</strong> mentre per lo spostamento a sinistra viene usato questo operatore <strong>&lt;&lt;</strong>.<br />
Per capire meglio cosa avviene utilizziamo delle immagini che semplificano la spiegazione. In questo caso ho una variabile di tipo byte (8 bit) il cui valore è 255. All&#8217;interno del chip atmega328 viene allocata, nella memoria ram, uno spazio di 8 bit i cui valori sono settati a 1</p>
<p><img decoding="async" class="aligncenter size-full wp-image-2492" title="Var255" src="https://logicaprogrammabile.it/wp-content/uploads/2012/02/Var2551.gif" alt="" width="382" height="79" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/02/Var2551.gif 382w, https://logicaprogrammabile.it/wp-content/uploads/2012/02/Var2551-300x62.gif 300w" sizes="(max-width: 382px) 100vw, 382px" /></p>
<p><span id="more-2440"></span>Eseguendo uno spostamento a sinistra &lt;&lt;, tutti i bit si spostano di una posizione verso sinistra e nel bit meno significativo (LSB) viene scritto uno zero:</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-2493" title="VarSpostamento" src="https://logicaprogrammabile.it/wp-content/uploads/2012/02/VarSpostamento.gif" alt="Spostamento a sinistra di bit" width="471" height="234" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/02/VarSpostamento.gif 471w, https://logicaprogrammabile.it/wp-content/uploads/2012/02/VarSpostamento-300x149.gif 300w" sizes="(max-width: 471px) 100vw, 471px" /></p>
<p>Quindi il valore della variabile passa da <strong>255</strong> (in binario 11111111) a <strong>254</strong> (in binario 11111110).</p>
<p>Continuando ad eseguire uno spostamento a sinistra, di una posizione, otteniamo i seguenti valori</p>
<table>
<tbody>
<tr>
<td><strong>252  </strong></td>
<td><strong>11111100</strong></td>
</tr>
<tr>
<td><strong>248</strong></td>
<td><strong><strong>11111000</strong></strong></td>
</tr>
<tr>
<td><strong>240</strong></td>
<td><strong><strong>11110000</strong></strong></td>
</tr>
<tr>
<td><strong>224</strong></td>
<td><strong><strong>11100000</strong></strong></td>
</tr>
<tr>
<td><strong>192</strong></td>
<td><strong>11000000</strong></td>
</tr>
<tr>
<td><strong>128</strong></td>
<td><strong>10000000</strong></td>
</tr>
<tr>
<td><strong>0</strong></td>
<td><strong>00000000</strong></td>
</tr>
</tbody>
</table>
<p>Il codice che esegue quanto detto è il seguente</p>
<p>[c]<br />
//Variabile di tipo byte<br />
byte MiaVar;</p>
<p>void setup()<br />
{<br />
 //init seriale<br />
 Serial.begin(9600);<br />
 //init variabile 11111111<br />
 MiaVar= 255;<br />
}</p>
<p>void loop()<br />
{<br />
 //eseguo uno spostamento a sinistra di 1 posizione<br />
 //memorizzo il valore nella stessa variabile<br />
 MiaVar = MiaVar &lt;&lt; 1;</p>
<p> //invio il dato al serial monitor<br />
 Serial.println(MiaVar);</p>
<p> //1 secondo di pausa tra una operazione e l&#8217;altra<br />
 delay (1000);</p>
<p>}</p>
<p>[/c]</p>
<p>Allo stesso modo lo spostamento a destra <strong>&gt;&gt;</strong> esegue un movimento dei bit dal più significativo al meno significativo:</p>
<p><img decoding="async" class="aligncenter" title="VarSpostamentoDX" src="https://logicaprogrammabile.it/wp-content/uploads/2012/02/VarSpostamentoDX.gif" alt="" width="470" height="236" /></p>
<p>in questo modo otteniamo i seguenti valori:</p>
<table>
<tbody>
<tr>
<td><strong>127</strong></td>
<td><strong><strong>01111111</strong></strong></td>
</tr>
<tr>
<td><strong>63 </strong></td>
<td><strong><strong>00111111</strong></strong></td>
</tr>
<tr>
<td><strong>31</strong></td>
<td><strong><strong><strong>00011111</strong></strong></strong></td>
</tr>
<tr>
<td><strong>15</strong></td>
<td><strong><strong><strong>00001111</strong></strong></strong></td>
</tr>
<tr>
<td><strong>7</strong></td>
<td><strong><strong><strong>00000111</strong></strong></strong></td>
</tr>
<tr>
<td><strong>3</strong></td>
<td><strong><strong>00000011</strong></strong></td>
</tr>
<tr>
<td><strong>1</strong></td>
<td><strong><strong>00000001</strong></strong></td>
</tr>
<tr>
<td><strong>0</strong></td>
<td><strong>00000000</strong></td>
</tr>
</tbody>
</table>
<p>Gli operatori &gt;&gt; e &lt;&lt; possono spostare i bit anche di diverse posizioni a seconda di come gestiamo l&#8217;operatore, ad esempio se voglio spostare i bit di quattro posizioni a sinistra dovrò scrivere:</p>
<p>[c]<br />
    MiaVar = MiaVar &lt;&lt; 4;<br />
[/c]</p>
<p>in questo modo la variabile <strong>MiaVar</strong> passerà dal valore 255 al 240.</p>
<p>Generalmente le operazioni bit a bit vengono usate perché sono eseguite molto velocemente da Arduino. Possono anche essere usate per semplici calcoli matematici, ad esempio moltiplicare o dividere un numero, come di seguito:</p>
<p>[c]<br />
   //Moltiplica * 2<br />
   Risultato = Miavar &lt;&lt; 1;<br />
   //Moltiplica * 4<br />
   Risultato = Miavar &lt;&lt; 2;<br />
   //Moltiplica * 8<br />
   Risultato = Miavar &lt;&lt; 3;<br />
   //divide / 2<br />
   Risultato = Miavar &gt;&gt; 1;<br />
   //divide / 4<br />
   Risultato = Miavar &gt;&gt; 2;<br />
   //divide / 8<br />
   Risultato = Miavar &gt;&gt; 3;<br />
[/c]</p>
<p>Questo metodo non è molto intuitivo ma quando ci troviamo ad ottimizzare il nostro codice per essere eseguito nel minor tempo possibile, lavorare con i bit è sempre una risorsa.</p>
<p>The post <a href="https://logicaprogrammabile.it/operatori-spostare-bit/">Operatori per spostare i bit (bitwise)</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/operatori-spostare-bit/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino, lavorare con i bit</title>
		<link>https://logicaprogrammabile.it/arduino-lavorare-con-bit/</link>
					<comments>https://logicaprogrammabile.it/arduino-lavorare-con-bit/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Tue, 10 Jan 2012 13:46:41 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Bit]]></category>
		<category><![CDATA[Bitwise]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2410</guid>

					<description><![CDATA[<p>Come usare gli operatori per manipolare i bit Lavorare con i microcontrollori, incluso Arduino, è divenuto abbastanza semplice grazie all&#8217;impiego di linguaggi ad alto livello che permettono di imparare in modo semplice e veloce la programmazione di questi device. Nonostante l&#8217;uso di funzioni che gestiscono...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-lavorare-con-bit/">Arduino, lavorare con i bit</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come usare gli operatori per manipolare i bit</h3>
<p>Lavorare con i microcontrollori, incluso Arduino, è divenuto abbastanza semplice grazie all&#8217;impiego di <a href="http://it.wikipedia.org/wiki/Linguaggio_di_programmazione_ad_alto_livello" target="_blank">linguaggi ad alto livello</a> che permettono di imparare in modo semplice e veloce la programmazione di questi device. Nonostante l&#8217;uso di funzioni che gestiscono variabili complesse, molte volte si ha la necessità di gestire i singoli bit. Arduino implementa dei metodi per accedere direttamente ai bit di una variabile  e di poterne leggerne e cambiare il valore.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2429" title="bitwise" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/bitwise.jpg" alt="operatori bitwise lavorare con i bit" width="200" height="200" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/bitwise.jpg 200w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/bitwise-150x150.jpg 150w" sizes="auto, (max-width: 200px) 100vw, 200px" /></p>
<p><span id="more-2410"></span>I bit è l&#8217;unità più piccola capace di esprimere un informazione (valori 1 e 0). L&#8217;unione di più bit forma altre unità come il byte (composto da 8 bit). Il byte è stato il primo sistema per codificare un carattere ed è capace di esprimere 256 valori (2^8 = 256).<br />
Per accedere ai singoli bit che compongono il byte possiamo usare le funzioni seguenti:</p>
<h3><strong>Leggere un singolo bit</strong></h3>
<p>Per leggere il valore di un singoli bit usiamo la funzione <strong>bitRead(Val, Posizione);</strong> dove Val è il valore della variabile e Posizione è il numero del bit da leggere, con indice zero. Eccovi alcuni esempi di utilizzo</p>
<p>[c]</p>
<p>byte Data = 0;</p>
<p>void setup()<br />
{<br />
    Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{<br />
 Data = 0; //in binario 00000000</p>
<p> Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
 Serial.print(Data);<br />
 Serial.println(&#8220;):&#8221;);</p>
<p> Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
 Serial.print(bitRead(Data, 1));<br />
 Serial.print(bitRead(Data, 2));<br />
 Serial.print(bitRead(Data, 3));<br />
 Serial.print(bitRead(Data, 4));<br />
 Serial.print(bitRead(Data, 5));<br />
 Serial.print(bitRead(Data, 6));<br />
 Serial.print(bitRead(Data, 7)); //bit più significativo<br />
 Serial.println();<br />
 delay(1000);</p>
<p> Data = 255; //in binario 11111111</p>
<p> Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
 Serial.print(Data);<br />
 Serial.println(&#8220;):&#8221;);</p>
<p> Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
 Serial.print(bitRead(Data, 1));<br />
 Serial.print(bitRead(Data, 2));<br />
 Serial.print(bitRead(Data, 3));<br />
 Serial.print(bitRead(Data, 4));<br />
 Serial.print(bitRead(Data, 5));<br />
 Serial.print(bitRead(Data, 6));<br />
 Serial.print(bitRead(Data, 7)); //bit più significativo<br />
 Serial.println();<br />
 delay(1000);</p>
<p> Data = 127; //in binario 11111110</p>
<p> Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
 Serial.print(Data);<br />
 Serial.println(&#8220;):&#8221;);</p>
<p> Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
 Serial.print(bitRead(Data, 1));<br />
 Serial.print(bitRead(Data, 2));<br />
 Serial.print(bitRead(Data, 3));<br />
 Serial.print(bitRead(Data, 4));<br />
 Serial.print(bitRead(Data, 5));<br />
 Serial.print(bitRead(Data, 6));<br />
 Serial.print(bitRead(Data, 7)); //bit più significativo<br />
 Serial.println();<br />
 delay(1000);<br />
}<br />
[/c]</p>
<h3>Settare un bit</h3>
<p>La funzione che permette di mettere a 1 un singolo bit è la seguente <strong>bitSet(Val, Posizione);</strong> dove Val esprime il valore del byte e Posizione è l&#8217;indice del bit da settare.</p>
<p>[c]</p>
<p>byte Data = 0;</p>
<p>void setup()<br />
{<br />
 Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{<br />
 Data = 0; //in binario 00000000</p>
<p> Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
 Serial.print(Data);<br />
 Serial.println(&#8220;):&#8221;);</p>
<p> Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
 Serial.print(bitRead(Data, 1));<br />
 Serial.print(bitRead(Data, 2));<br />
 Serial.print(bitRead(Data, 3));<br />
 Serial.print(bitRead(Data, 4));<br />
 Serial.print(bitRead(Data, 5));<br />
 Serial.print(bitRead(Data, 6));<br />
 Serial.print(bitRead(Data, 7)); //bit più significativo<br />
 Serial.println();<br />
 delay(2000);</p>
<p> //setta il bit 0<br />
 bitSet(Data, 0);</p>
<p> //visualizza il valore di Data<br />
 Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
 Serial.print(Data);<br />
 Serial.println(&#8220;):&#8221;);</p>
<p> Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
 Serial.print(bitRead(Data, 1));<br />
 Serial.print(bitRead(Data, 2));<br />
 Serial.print(bitRead(Data, 3));<br />
 Serial.print(bitRead(Data, 4));<br />
 Serial.print(bitRead(Data, 5));<br />
 Serial.print(bitRead(Data, 6));<br />
 Serial.print(bitRead(Data, 7)); //bit più significativo<br />
 Serial.println();<br />
 delay(2000);</p>
<p> //setta il bit 7<br />
 bitSet(Data, 7);</p>
<p> //visualizza il valore di Data<br />
 Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
 Serial.print(Data);<br />
 Serial.println(&#8220;):&#8221;);</p>
<p> Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
 Serial.print(bitRead(Data, 1));<br />
 Serial.print(bitRead(Data, 2));<br />
 Serial.print(bitRead(Data, 3));<br />
 Serial.print(bitRead(Data, 4));<br />
 Serial.print(bitRead(Data, 5));<br />
 Serial.print(bitRead(Data, 6));<br />
 Serial.print(bitRead(Data, 7)); //bit più significativo<br />
 Serial.println();<br />
 delay(2000);<br />
}<br />
[/c]</p>
<h3><strong>Resettare un bit</strong></h3>
<p>la funzione che invece permette di mettere a zero un singolo bit è la seguente <strong>bitClear(Val, Posizione);</strong> dove Val è il solito valore in byte e Posizione rappresenta l&#8217;indice del bit da settare a 0.</p>
<p>[c]<br />
byte Data = 0;</p>
<p>void setup()<br />
{<br />
 Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{<br />
 Data = 255; //in binario 11111111</p>
<p> Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
 Serial.print(Data);<br />
 Serial.println(&#8220;):&#8221;);</p>
<p> Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
 Serial.print(bitRead(Data, 1));<br />
 Serial.print(bitRead(Data, 2));<br />
 Serial.print(bitRead(Data, 3));<br />
 Serial.print(bitRead(Data, 4));<br />
 Serial.print(bitRead(Data, 5));<br />
 Serial.print(bitRead(Data, 6));<br />
 Serial.print(bitRead(Data, 7)); //bit più significativo<br />
 Serial.println();<br />
 delay(2000);</p>
<p> //resetta il bit 0<br />
 bitClear(Data, 0);</p>
<p> //visualizza il valore di Data<br />
 Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
 Serial.print(Data);<br />
 Serial.println(&#8220;):&#8221;);</p>
<p> Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
 Serial.print(bitRead(Data, 1));<br />
 Serial.print(bitRead(Data, 2));<br />
 Serial.print(bitRead(Data, 3));<br />
 Serial.print(bitRead(Data, 4));<br />
 Serial.print(bitRead(Data, 5));<br />
 Serial.print(bitRead(Data, 6));<br />
 Serial.print(bitRead(Data, 7)); //bit più significativo<br />
 Serial.println();<br />
 delay(2000);</p>
<p> //resetta il bit 5<br />
 bitClear(Data, 5);</p>
<p> //visualizza il valore di Data<br />
 Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
 Serial.print(Data);<br />
 Serial.println(&#8220;):&#8221;);</p>
<p> Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
 Serial.print(bitRead(Data, 1));<br />
 Serial.print(bitRead(Data, 2));<br />
 Serial.print(bitRead(Data, 3));<br />
 Serial.print(bitRead(Data, 4));<br />
 Serial.print(bitRead(Data, 5));<br />
 Serial.print(bitRead(Data, 6));<br />
 Serial.print(bitRead(Data, 7)); //bit più significativo<br />
 Serial.println();<br />
 delay(2000);<br />
}<br />
[/c]</p>
<h3><strong>Settare o resettare con la stessa funzione</strong></h3>
<p>Esiste una funzione capace di eseguire sia le operazione di settaggio dei bit sia le operazioni di reset, il suo prototipo è <strong>bitWrite(Val, Posizione, ValBit);</strong> dove Val è il byte che vogliamo modificare, Posizioe rappresenta l&#8217;indice del bit da modificare e ValBit è il valore del bit (1 0 0)</p>
<p>[c]<br />
byte Data = 0;</p>
<p>void setup()<br />
{<br />
Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{<br />
Data = 255; //in binario 11111111</p>
<p>Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
Serial.print(Data);<br />
Serial.println(&#8220;):&#8221;);</p>
<p>Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
Serial.print(bitRead(Data, 1));<br />
Serial.print(bitRead(Data, 2));<br />
Serial.print(bitRead(Data, 3));<br />
Serial.print(bitRead(Data, 4));<br />
Serial.print(bitRead(Data, 5));<br />
Serial.print(bitRead(Data, 6));<br />
Serial.print(bitRead(Data, 7)); //bit più significativo<br />
Serial.println();<br />
delay(2000);</p>
<p>//resetta il bit 0<br />
bitWrite(Data, 0, 0);<br />
//resetta il bit 3<br />
bitWrite(Data, 2, 0);</p>
<p>//visualizza il valore di Data<br />
Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
Serial.print(Data);<br />
Serial.println(&#8220;):&#8221;);</p>
<p>Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
Serial.print(bitRead(Data, 1));<br />
Serial.print(bitRead(Data, 2));<br />
Serial.print(bitRead(Data, 3));<br />
Serial.print(bitRead(Data, 4));<br />
Serial.print(bitRead(Data, 5));<br />
Serial.print(bitRead(Data, 6));<br />
Serial.print(bitRead(Data, 7)); //bit più significativo<br />
Serial.println();<br />
delay(2000);</p>
<p>//setta il bit 1<br />
bitWrite(Data, 0, 0);<br />
//setta il bit 3<br />
bitWrite(Data, 2, 1);<br />
//resetta il bit 5<br />
bitWrite(Data, 4, 0);</p>
<p>//visualizza il valore di Data<br />
Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
Serial.print(Data);<br />
Serial.println(&#8220;):&#8221;);</p>
<p>Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
Serial.print(bitRead(Data, 1));<br />
Serial.print(bitRead(Data, 2));<br />
Serial.print(bitRead(Data, 3));<br />
Serial.print(bitRead(Data, 4));<br />
Serial.print(bitRead(Data, 5));<br />
Serial.print(bitRead(Data, 6));<br />
Serial.print(bitRead(Data, 7)); //bit più significativo<br />
Serial.println();<br />
delay(2000);<br />
}<br />
[/c]</p>
<h3><strong>La funzione bit();</strong></h3>
<p>La funzione <strong>bit(x);</strong> ci permette di calcolare il valore decimale del bit specificato, l&#8217;esempio chiarisce meglio il concetto</p>
<p>[c]</p>
<p>void setup()<br />
{<br />
Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{<br />
//valori decimali dei singoli bit<br />
Serial.println(bit(0)); 2^0 = 1<br />
Serial.println(bit(1)); 2^1 = 2<br />
Serial.println(bit(2)); 2^2 = 4<br />
Serial.println(bit(3)); 2^3 = 8<br />
Serial.println(bit(4)); 2^4 = 16<br />
Serial.println(bit(5)); 2^5 = 32<br />
Serial.println(bit(6)); 2^6 = 64<br />
Serial.println(bit(7)); 2^7 = 128</p>
<p>Serial.println();<br />
delay(2000);</p>
<p>}<br />
[/c]</p>
<p>Negli esempi è stato analizzato il singolo byte ma è possibile lavorare anche con gli altri tipi. Ad esempio possiamo effettuare delle operazioni su una variabile unsigned int (composta da 16 bit (2^16)-1 da 0 a 65535)</p>
<p>[c]<br />
unsigned int Data = 65535;</p>
<p>void setup()<br />
{<br />
Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{</p>
<p>//valore decimale del bit 12<br />
Serial.print(&#8220;valore decimale del bit 12 &#8220;);<br />
Serial.print(bit(12)); // 2^12 = 4096<br />
Serial.println();</p>
<p>Data = 65535;</p>
<p>//visualizza il valore di Data<br />
Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
Serial.print(Data);<br />
Serial.println(&#8220;):&#8221;);</p>
<p>Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
Serial.print(bitRead(Data, 1));<br />
Serial.print(bitRead(Data, 2));<br />
Serial.print(bitRead(Data, 3));<br />
Serial.print(bitRead(Data, 4));<br />
Serial.print(bitRead(Data, 5));<br />
Serial.print(bitRead(Data, 6));<br />
Serial.print(bitRead(Data, 7));<br />
Serial.print(bitRead(Data, 8));<br />
Serial.print(bitRead(Data, 9));<br />
Serial.print(bitRead(Data, 10));<br />
Serial.print(bitRead(Data, 11));<br />
Serial.print(bitRead(Data, 12));<br />
Serial.print(bitRead(Data, 13));<br />
Serial.print(bitRead(Data, 14));<br />
Serial.print(bitRead(Data, 15)); //bit più significativo<br />
Serial.println();<br />
delay(2000);</p>
<p>//setta il bit 1<br />
bitWrite(Data, 0, 0);<br />
//resetta il bit 3<br />
bitWrite(Data, 10, 0);<br />
//resetta il bit 5<br />
bitWrite(Data, 15, 0);</p>
<p>//visualizza il valore di Data<br />
Serial.print(&#8220;Valore in bit della variabile Data(&#8220;);<br />
Serial.print(Data);<br />
Serial.println(&#8220;):&#8221;);</p>
<p>Serial.print(bitRead(Data, 0)); //bit meno significativo<br />
Serial.print(bitRead(Data, 1));<br />
Serial.print(bitRead(Data, 2));<br />
Serial.print(bitRead(Data, 3));<br />
Serial.print(bitRead(Data, 4));<br />
Serial.print(bitRead(Data, 5));<br />
Serial.print(bitRead(Data, 6));<br />
Serial.print(bitRead(Data, 7));<br />
Serial.print(bitRead(Data, 8));<br />
Serial.print(bitRead(Data, 9));<br />
Serial.print(bitRead(Data, 10));<br />
Serial.print(bitRead(Data, 11));<br />
Serial.print(bitRead(Data, 12));<br />
Serial.print(bitRead(Data, 13));<br />
Serial.print(bitRead(Data, 14));<br />
Serial.print(bitRead(Data, 15)); //bit più significativo<br />
Serial.println();<br />
delay(2000);</p>
<p>}<br />
[/c]</p>
<p>Manipolare i bit sembra macchinoso ma il vantaggio è che Arduino esegue molto velocemente questo tipo di operazioni, vedremmo successivamente come sia possibile eseguire semplici operazioni lavorando con i singoli bit.</p>
<p>[facebook_ilike]</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-lavorare-con-bit/">Arduino, lavorare con i bit</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-lavorare-con-bit/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
