1. W wyżej przedstawianym przykładzie mam zmienną A zdefiniowaną jako zmienna char. Czyli w zależności od stanu na pinie będzie ta zmienna przyjmowała wartość 0x00 (dla 0 na pinie) lub 0xFF (dla 1)?? Bo chyba dla 1 na pinie nie przyjmie ta zmienna wartości np. 0x3F?
No właśnie o to chodzi, że przyjmie taką wartość jak waga bitu w bajcie odczytanym z PINA. Dlatego jakbyś napisał if(A == 1) to nigdy taki warunek się nie spełni. Jednak if(A) się spełni, bo każda wartość A nie równa zero jest prawdą dla takiego warunku.
2. Do czego jest to bit_is_set?? to jest jakaś funkcja??
Funkcja sprawdzająca czy dany bit jest ustawiony. Jest jeszcze bliźniak bit_is_clear().
http://www.nongnu.org/avr-libc/user-man ... __sfr.html
Wejścia skonfigurowane wcześniej do pracy bez pull-up, teraz zostaną podciągnięte do VCC? Chyba trzeba uważać żeby nie zmienić tego ustawienia.
Jak najbardziej. Dlatego lepiej korzystać z operatorów |= (logiczna suma) &= (logiczny iloczyn) ^= (logiczna alternatywa) co pozwoli wybiórczo modyfikować bity.
możesz zastąpić
co skasuje to co potrzebujesz a zostawi te dwa wejścia w spokoju.
I na przyszłość. Naucz się korzystać z nazw bitów i takie rzeczy jak DDRD = 0b10011111 pisz:
Kod: Zaznacz cały
DDRD = (1<<PD7)|(1<<PD4)|(1<<PD3)|(1<<PD2)|(1<<PD1)|(1<<PD0);
Trochę się trza rozpisać, ale potem łatwiej coś zmieniać, odejmować, dodawać. Jakbyś jeszcze sobie zrobił definicje:
Kod: Zaznacz cały
#define WYJSCIA_KONFIG DDRD
#define PRZEKAZNIK1 (1<<PD7)
#define LED5 (1<<PD4)
#define LED4 (1<<PD3)
itd. To cała postać poprzednia wygląda tak:
Kod: Zaznacz cały
WYJŚCIA_KONFIG = PRZEKAZNIKI|LED5|LED4|LED3|LED2|LED1;
I jakoś tak lepiej się czyta.