/*
V minulém programu se nám poda?ilo rozblikat ?adu LED diod pomocí cyklu,
?ekání a dvou konstant (STAV1 a STAV2) které nám ur?ovaly, jaké ledky mají
svítit. Problém je v tom, že po napsání první konstanty musíme vytvo?it tu
druhou p?esn? opa?n? (kde byly jedni?ky, budou nuly, a naopak), protože jinak
by nám n?které ledky bu?to v?bec nesvítily, nebo by svítily stále. Nyní se
proto pokusíme vytvo?it podobný program jako minule, který ale bude pot?ebovat
nadefinovat pouze jeden stav a druhý si vypo?te sám.
K tomuto ú?elu se p?esn? hodí takzvaný bitový komplement. bitový komplement je
operace, p?i níž se z jedni?ek stanou nuly, a naopak.
*/
/*
Te? ješt? v?d?t, jak takovou operaci zapsat.
Na tomto míst? se hodí uvést tabulku operátor? jazyka C, mezi které pat?í
i náš bitový komplement.
*/
/*
Operátory v C:
+ s?ítání
- od?ítání
* násobení
/ d?lení
% modulus (zbytek po celo?íselném d?lení)
++ inkrementace (zv?tšení o 1)
-- dekrementace (zmenšení o 1)
= p?i?azení
== porovnání ( if(A==B)...
~ bitový komplement ( 0b11110000 -> 0b00001111)
! not
!= není rovno
< menší než
> v?tší než
<= menší nebo rovno
>= v?tší nebo rovno
& bitové AND (také adresa prom?nné)
&& logické AND
| bitové OR
|| logické OR
^ bitové exclusive OR
? podmínkový operátor
<< bitový posun doleva (A = B << 2 posun bit? o dv? místa doleva,
zprava dopl?uje nuly)
>> bitový posun doprava
+= A += B totéž co A = A + B
-= A -= B totéž co A = A - B
/= podobn?...
%=
&=
*=
^=
|=
>>=
<<=
*/
/*
Nyní se tedy pokusíme napsat program:
*/
#define F_CPU 1000000UL // 1 MHz (základní frekvence)
#include <avr/io.h> //Knihovna vstup? a výstup? (PORT, DDR)
#include <util/delay.h> //Knihovna ?ekacích funkcí
#define CEKANI 500 //kolik milisekund budou ledky svítit
#define STAV1 0b01010101//které ledky se budou st?ídat
intmain(void)
{
DDRB=0b11111111;
PORTB=STAV1;
for(;;)
{
PORTB=~PORTB;//Zapíšeme na portB bitový komplement p?vodní hodnoty
//Vym?níme ledky - ty které svítily zhasnou, a naopak
_delay_ms(CEKANI);//?ekání
}
}
/*
Pozorní si jist? všimli, že se konstrukce programu zjednodušila.
Po nahrání programu do p?ípravku "ATmega8 - LED panel" budou st?ídav? blikat
LED diody tak, jak je to definováno v konstant? STAV1, rychlostí ur?enou
v konstant? CEKANI. Tyto konstanty lze libovoln? m?nit...
*/
//Pro radioklub OK1KVK naspal Vašek Král