Skocz do zawartości

Kurs C od ABXYZ


Pomocna odpowiedź

Witam

Odnośnie schematu z pierwszego postu, przyznam się szczerze, że nadal nie rozumiem schematu mimo udzielenia wyjaśnienia przez autora kursu. Czy mógłby ktoś inny niż autor kursu wytłumaczyć jak to rozumie na swój sposób? może wtedy uda się nam to zrozumieć.

Pozdrawiam.

Jeśli port jest ustawiony jako wejście, to odczytujemy stan linii. Stan ten może być wymuszony, np. przełącznikiem lub innym układem. Jeśli zostawimy go w powietrzu to może być losowy - działa trochę jak antena.

Celem autora, jak się domyślam, kursu było uczulenie, wszystkich na to, że niepodłączone wejścia nie muszą dawać odczytu 0.

Jako ciekawostkę polecam napisać program, który będzie zapalał diodę, gdy odczyta 1 z niepodłączonego pinu, gasił gdy 0. Wtedy wystarczy dotknąć palcem procesor, aby zapalić diodę - ładunek z palca wystarczy aby zmienić stan linii. To bardzo typowy błąd - zostawić niepodłączone wejścia procesora i zakładać, że odczyty dadzą zero.

  • Lubię! 1
  • 6 miesiące później...

Witam, potrzebuję aby wytłumaczyć mi zasadę obsługi przycisku zadania Rys.1

Rys.1 wciśnięcie przycisku zapala diodę, zwolnienie przycisku powoduje że dioda gaśnie.

https://www.forbot.pl/forum/upload_img/obrazki/IMG_4c075c9eb3a408456.jpg

Rys.1:

#include

int main (void)

{

DDRB= 0xFF; //ustawienie linii portu B jako wyjście

DDRD= 0x00;//ustawienie linii portu D jako wejście

PORTB &= ~(_BV(0));//wyzerowanie linii portu B dioda zgaszona komentarz 1

PORTD |= _BV(0);//ustawienie linii PD0 komentarz 2

for(;😉

{

if(bit_is_clear(PIND,0))//komentarz 3

{

PORTB|= _BV(0);//zapal diodę

}

else

{

PORTB &= ~(_BV(0));//zgaś diodę

}

}

return 0;

}

komentarz 1

PortB bit 0 ustawiony normalnie w stan wysoki 1

PORTB= 00000001 po dokonaniu wyzerowania PORTB= 00000000

komentarz 2

normalnie linia PORTD ustawiona w stan niski 0,wiedząc że przycisk S1 gdy jest rozwarty znajduje się w stanie wysokim 1 a zatem musimy nasz PORTD bit 0 również ustawić w stan wysoki 1.

komentarz 3

jest to makrodefinicja która zwraca wartość 1, jeśli bit o numerze 0 w rejestrze funkcyjnym PIND jest wyzerowany właśnie tego zapisu nie rozumie (gdzie ta jedynka zostanie zwrócona?).

Nie rozumie funkcji rejestru PIN, jakie ona ma do spełnienia zadanie?

Czy może rejestr PINx pojawia się kiedy mamy do czynienia z urządzeniem wejściowym czyli np. przyciskiem (przycisk może mieć dwa stany 0 załączony-niski oraz 1 wyłączony-wysoki) podłączonym do któregoś z PORTx, jeżeli PORTx ustawimy na stan niski 0 to jaki jest stan na PINx oraz na odwrót PORTx na stan wysoki 1 to jaki jest stan PINx?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...