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 SQ6IYYDobrze 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
ogólnie z tymi nawiasami jest tak że liczba nawiasow " { " powinna być równa liczbie nawiasów " } " bo każda funcja ma postać :
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>Instrukcja <b>if</b>"else" nie musi występować jesli nie jest potrzebne.
Instrukcja <b>while</b>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:
Czy to jest zrozumiałe ???
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);
}
}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) */Kod:
jakas_funkcja_lub_instrukcja(jakis_warunek_lub_arrgument)
{ // nawias "otwierający"
jakies_polecenia;
} // nawias "zamykający"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) }Kod:
if(wyrażenie)
{ instrukcje wykonywane jeśli wyrażenie jest prawdziwe }
else
{ instrukcje wykonywane jeśli wyrażenie nie jest prawdziwe }Instrukcja <b>while</b>
Kod:
while(wyrażenie)
{ instrukcje wykonywane "w kółko" aż do momentu kiedy wyrażenie przestanie być prawdziwe }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
