Operácie

AVR Bit Magic: Rozdiel medzi revíziami

Z SensorWiki

Riadok 1: Riadok 1:
 
 
V assembleri existuje pre manipuláciu s bitmi dostatok inštrukcií. V prvom cvičení sme napríklad na test stlačenia
 
V assembleri existuje pre manipuláciu s bitmi dostatok inštrukcií. V prvom cvičení sme napríklad na test stlačenia
 
tlačidla mohli použiť inštrukciu
 
tlačidla mohli použiť inštrukciu
Riadok 10: Riadok 9:
  
 
Príslušná konštrukcia v C potom bude
 
Príslušná konštrukcia v C potom bude
  if ( PIND & 0x04) ...
+
  if ( PIND & 0x08)         // PIND & 0000 1000
 +
 
 +
To, že chceme pracovať s tretím bitom sa dá okrem priameho zápisu 0x08 zapísať aj takto:
 +
(0x01<<3)
 +
 
 +
Príslušná konštrukcia v C potom bude
 +
if ( PIND & (0x01<<3))          // PIND & 0000 1000
 +
 
 +
Pričom je užitočné zadefinovať si na tento účel makro (v skutočnosti už také makro s názvom _BV(x) existuje)
 +
#define BIT(x) (0x01<<(x))
 +
 
 +
Podobne sú zadefinované aj tieto dve užitočné makrá
 +
 +
 
 +
 
 +
 
  
  

Verzia zo dňa a času 06:26, 1. október 2010

V assembleri existuje pre manipuláciu s bitmi dostatok inštrukcií. V prvom cvičení sme napríklad na test stlačenia tlačidla mohli použiť inštrukciu

 sbis PIND,3		; sbis = Skip if Bit Is Set,  preskoc ak je PIND.3 nastaveny (=1)

V jazyku C ale typ bit neexistuje (hoci niektoré kompilátory takýto typ zaviedli), preto môžeme pracovať len s bajtmi, a musíme si nejako vypomôcť. Pri rozumnom zápise však kompilátor rozpozná, že chceme pracovať s bitom a preloží našu konštrukciu správne.

Ak chceme testovať stav jedného bitu v bajte, musíme ostatné zakryť, zamaskovať. To sa robí tzv. maskou:

MMP Cvicenie2 Input.png

Príslušná konštrukcia v C potom bude

if ( PIND & 0x08)          // PIND & 0000 1000

To, že chceme pracovať s tretím bitom sa dá okrem priameho zápisu 0x08 zapísať aj takto:

(0x01<<3)

Príslušná konštrukcia v C potom bude

if ( PIND & (0x01<<3))          // PIND & 0000 1000

Pričom je užitočné zadefinovať si na tento účel makro (v skutočnosti už také makro s názvom _BV(x) existuje)

#define BIT(x) (0x01<<(x))

Podobne sú zadefinované aj tieto dve užitočné makrá




MMP Cvicenie2 Output.png


Further reading