AVR Bit Magic: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace  | 
				Bez shrnutí editace  | 
				||
| 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 &   |   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 z 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:

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á
