Zdravím vás,
chěl bych vás poprosit o pomoc. Jsem začátečník a dostal jsem za úkol udělat program.
Zadání: Napište program pro “bežící světlo”. Svítit bude vždy jedna LED 400ms. Po spuštění programu světlo “poběží” vpravo. Po každém stisknutí tlačítka se směr změní v opačný. Časový interval realizujte časovačem.
Zkoušel jsme tento program vytvářet, ale vůbec nevím jak tam dát časovač a tlačítko. Prosím poraďte
Zde je program co jsem zatím udělal
#define F_CPU 2000000UL //20 MHz - základní frekvence #include <avr/io.h> //vloží knihovnu vstupů a výstupů (PORT, DDR) #define PORT PORTB #define DDR DDRB
int main(void)
{
DDR = 0xFF; //nastaveni brany jako vystupni
PORT = 0xFF; //zhasnuti diod
char i;
while(1)
{
for (i = 0; i <= 7; i++)
{
PORT &= ~(1 << i); //dioda sviti
_delay_ms(500); //POZOR !!! nastavit jako C/T
PORT |= (1 << i); //dioda nesviti
_delay_ms(500); //POZOR !!! nastavit jako C/T
}
}
while(1)
{
for (i = 0; i <= 0; i--)
{
PORT &= ~(1 >> i); //dioda sviti
_delay_ms(500); //POZOR !!! nastavit jako C/T
PORT |= (1 >> i); //dioda nesviti
_delay_ms(500); //POZOR !!! nastavit jako C/T
}
}
}
Předem děkuji za vaše odpovědi a rady.
administrator: přejmenováno z "ATtiny2313 C/T a Tlačítko"
casovac znamena ze pouzijes niektory timer procesora na odcitanie casu. timer nastavis niekde za nastavenim portu (za tvoje DDR = 0xFF; PORT = 0xFF;). Nastavis ho tak aby napocita do tych 400ms, a potom vyvolal prerusenie. V preruseni budes potom posuvat tu rozsvietenu LEDku. Prerusenie od timera musis povolit, a tiez musis povolit globalne prerusenie, aby ti fungovalo prerusenie od timera. To sa povoluje sei();. Vykonanie prerusenia bude niekde mimo hlavnej slucky, akoby ina funkcia. v hlavnej slucke mozes potom kontrolovat stav tlacitka.