Skocz do zawartości

Kurs C od ABXYZ


bundz

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.

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.