#include <avr/io.h> // Õîòèì èñïîëüçîâàòü ïîðòû ââîäà/âûâîäà
#include <util/delay.h> // Õîòèì èñïîëüçîâàòü ôóíêöèè çàäåðæåê
int main()
{
// Ðåãèñòð DDRB îòâå÷àåò çà íàïðàâëåíèå
// ëèíèé ïîðòà. Åñëè êàêîé ëèáî áèò ðàâåí
// ëîã. 1, ñîîòâåòñòâóþùàÿ ëèíèÿ ïîðòà
// èñïîëüçóåòñÿ äëÿ âûâîäà äàííûõ. Èíà÷å äëÿ ââîäà.
// Ìû óêàçûâàåì, ÷òî ñîáèðàåìñÿ èñïîëüçîâàòü
// ëèíèþ 0 äëÿ âûâîäà äàííûõ (óñòàíàâëèâàåì áèò 0
// â ëîã. 1).
DDRA = 0xFF;
DDRB = 0x01;
// Íà÷èíàåì âå÷íûé öèêë.
for (; 
{
// Èíèöèàëèçèðóåì ïåðåìåííóþ, õàðàêòåðèçóþùóþ
// âðåìÿ çàäåðæêè â ìèëëèñåêóíäàõ äëÿ çàìêíóòûõ êîíòàêòîâ.
int SleepTime = 10;
// Åñëè áèò 1 ïîðòà B óñòàíîâëåí â ëîã. 1, (êîíòàêòû ðàçîìêíóòû 
// óâåëè÷èâàåì âäâîå âðåìÿ çàäåðæêè.
if (PINB & _BV(PB1)) goto label1;
else PORTB | = _BV(PB0);
// Óñòàíàâëèâàåì áèò 0 ïîðòà A â ëîã. 1.
// (çàæèãàåì ñâåòîäèîä
.
PORTA | = _BV(PA0);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 1 ïîðòà A â ëîã. 1.
// (çàæèãàåì ñâåòîäèîä
.
PORTA | = _BV(PA1);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 2 ïîðòà A â ëîã. 1.
// (çàæèãàåì ñâåòîäèîä
.
PORTA | = _BV(PA2);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 0 ïîðòà A â ëîã. 0.
// (ãàñèì ñâåòîäèîä
.
PORTA &= ~_BV(PA0);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 3 ïîðòà A â ëîã. 1.
// (çàæèãàåì ñâåòîäèîä
.
PORTA | = _BV(PA3);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 1 ïîðòà A â ëîã. 0.
// (ãàñèì ñâåòîäèîä
.
PORTA &= ~_BV(PA1);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 4 ïîðòà A â ëîã. 1.
// (çàæèãàåì ñâåòîäèîä
.
PORTA | = _BV(PA4);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 1 ïîðòà A â ëîã. 0.
// (ãàñèì ñâåòîäèîä
.
PORTA &= ~_BV(PA2);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 5 ïîðòà A â ëîã. 1.
// (çàæèãàåì ñâåòîäèîä
.
PORTA | = _BV(PA5);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 3 ïîðòà A â ëîã. 0.
// (ãàñèì ñâåòîäèîä
.
PORTA &= ~_BV(PA3);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 6 ïîðòà A â ëîã. 1.
// (çàæèãàåì ñâåòîäèîä
.
PORTA | = _BV(PA6);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 4 ïîðòà A â ëîã. 0.
// (ãàñèì ñâåòîäèîä
.
PORTA &= ~_BV(PA4);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 7 ïîðòà A â ëîã. 1.
// (çàæèãàåì ñâåòîäèîä
.
PORTA | = _BV(PA7);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 6 ïîðòà A â ëîã. 0.
// (ãàñèì ñâåòîäèîä
.
PORTA &= ~_BV(PA6);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 5 ïîðòà A â ëîã. 0.
// (ãàñèì ñâåòîäèîä
.
PORTA &= ~_BV(PA5);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
// Óñòàíàâëèâàåì áèò 7 ïîðòà A â ëîã. 0.
// (ãàñèì ñâåòîäèîä
.
PORTA &= ~_BV(PA7);
// Æäåì óêàçàííîå âðåìÿ.
_delay_ms(SleepTime);
_delay_ms(000);
}
{label1:
PORTB &= ~_BV(PB0);
SleepTime = SleepTime*5;
}
return;
return 0;
}
AVR studio пишет:
../main.c:153:3: error: 'SleepTime' undeclared (first use in this function)
А так не хватает вот тут, объявления SleepTime
int main()
{
unsigned long SleepTime=100; //Хотя бь со 100мс начать.
...
...
Что _BV делает?
ps.
ммм, SleepTime объявлен локально, не сразу заметил, в блоке цикла for, за его пределами, после :
}
{label1:
эта переменная уже не определена.
Объявление в цикле for удалить, и добавить в начало программы, куда я указал.
quote:
Originally posted by rk:
Что _BV делает?
#define bit_set(var,bitno) ((var) | = 1 << (bitno))
#define OUT_PORT PORTB
void main(void)
{
unsigned int S=0;
INIT();
while (1)
{
OUT_PORT=0;
bit_set(OUT_PORT,S);
S++;
if (S>7) S=0;
}
}
quote:
Originally posted by Aleksey_N:
OUT_PORT=0;
там накладывается в bit_set.quote:
увидел там накладывается в bit_set.

quote:
if (PINB & _BV(PB1)) goto label1;else PORTB | = _BV(PB0);
это вот не красиво
если уже так хочется "связываться" с IF
то тогда уж так сделайте
if (PINB & _BV(PB1))
{
PORTB &= ~_BV(PB0);
SleepTime = SleepTime*5;
}
else PORTB | = _BV(PB0);
