Własnie tego jeszcze do końca nie rozgryzłem - raz to działa raz nie - nie wiem o co chodzi.
W takim razie napewno pomoże ci wpis w głównym pliku programu (lcd.c) na samej górze
#define F_CPU 16000000
Sprawdzam pracę domową z postu#4 kolegi SQ6IYY. Zadanie brzmiało:
Kto bardziej kumaty - niech spróbuje zrobic tak aby dioda i przycisk działały na tym samym Porcie np. na Porcie A dioda niech zostanie na A0 a przycisk dajcie na A7.
Chyba byłem pijany bo wcześniej nie zakumałem że on pokazał mi efekty swojej pracy. Do rzeczy ... to kod napisany przez SQ6IYY
Kod:
#include <avr/io.h> // czyli tu dla kompilatora jest cała zawartość pliku io.h (nie wnikajcie teraz gdzie jest ten plik
#include <util/delay.h> // tu podobna historia do powyższej
int main(void)
{
DDRA = 0b00000001;
PORTA= 0b10000000;
while(1)
{
if(bit_is_clear(PINA, 0))
PORTA=PORTA^0b00000001;
_delay_ms(160);
}
}
Dobrze kombinował ale to raczej poprawnie nie zadziała, poniżej kod z komentarzami do błędów Michała (nie ma tam linii z "#include...." bo szkoda miejsca - oczywiście są one potrzebne do działania
Kod:
int main(void)
{
DDRA = 0b00000001;
PORTA= 0b10000000;
while(1)
{
if(bit_is_clear(PINA, 7)) /* przycisk na A7 - Michał miał na A0, a tam jest dioda */
{ /* nie było nawiasu "otwierającego" zawartość instrukcji "if" */
PORTA=PORTA^0b00000001;
_delay_ms(160);
}
}
} /* brakowało mawiasu "zamykającego" funkcje główną(main) */
ogólnie z tymi nawiasami jest tak że liczba nawiasow " { " powinna być równa liczbie nawiasów " } " bo każda funcja ma postać :
Kod:
jakas_funkcja_lub_instrukcja(jakis_warunek_lub_arrgument)
{ // nawias "otwierający"
jakies_polecenia;
} // nawias "zamykający"
Nie ważne czy w liście poleceń funkcji/instrukcji są inne funkcje/instrukcje - trzeba ZAWSZE trzymać się tej zasady
Chyba czas opisać teraz zasadę działania kilku instrukcji z których juz korzystalismy:
Instrukcja <b>for</b>
Kod:
for(wyrażenie)
{ ciąg poleceń które wykonają się jesli wyrażenie jest spełnione(prawdziwe) }
Instrukcja <b>if</b>
Kod:
if(wyrażenie)
{ instrukcje wykonywane jeśli wyrażenie jest prawdziwe }
else
{ instrukcje wykonywane jeśli wyrażenie nie jest prawdziwe }
"else" nie musi występować jesli nie jest potrzebne.
Instrukcja <b>while</b>
Kod:
while(wyrażenie)
{ instrukcje wykonywane "w kółko" aż do momentu kiedy wyrażenie przestanie być prawdziwe }
Uwaga na nawiasy ! Ja umieszczałem { i } w jednej linii ale żeby sie nie pomylić który nawias jest do której instrukcji/funkcji stosujcie zasadę: "zamykajacy" nawias funkcji/instrukcji x stawiajcie zawsze pod nawiasem tejże funkcji, przykład wyjasniający poniżej:
Kod:
funcja_x(wyrażenie)
{ // <-- to jest nawias "otwierający" zawartość funkcji_x
jakieś_polecenia;
instrukcja_y(wyrażenie)
{ // <-- nawias "otwierający" zawartość instrukcji_y
jakieś_polecenia;
instrukcja_z(wyrażenie)
{ // <-- nawias "otwierający" zawartość instrukcji_z
jakieś_polecenia;
} // <-- nawias "zamykający" zawartość instrukcji_z
znowu_jakieś_polecenia;
} // <-- nawias "zamykający" zawartość instrukcji_y
} // <-- nawias "zamykający" zawartość funkcji_x
Czy to jest zrozumiałe ???