Спойлер
Код: Выделить всё
#include <util/delay.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
char mod = 0;
int FixTime = 5400;
volatile uint8_t i;
volatile uint8_t Sec;
int tp = 0; // time pain - âðåìÿ ñêîëüêî áüåò òîêîì.
ISR(TIM0_OVF_vect)
{
if (!(++i%4)) //period 1s
{ PORTB ^= (1<<PB0);
Sec++;
}
}
int main(void) {
sei ();
int RandTime = 3600 + random()%3600;
DDRB |=(1<<2); //òðàíçèñòîð
DDRB |=(1<<3); //câåòîäèîä Ç
DDRB |=(1<<4); //câåòîäèîä Ê
DDRB &=~(1<<1); //êíîïêà
while (1)
{
if (mod==0) //åñëè ïåðâûé ðåæèì âêëþ÷åí, òî êîãäà ïðîøåäøåå âðåìÿ ðàâíî RandTime - ïîäàåì íàïðÿæåíèå íà íîæêó.
{
if (Sec >= 10)
{
PORTB &=~(1<<2);
_delay_ms(2000);
PORTB |= (1<<2);
_delay_ms(1);
PORTB &=~(1<<2);
_delay_ms(4000);
PORTB |= (1<<2);
_delay_ms(1);
Sec = 0;
}
}
else //åñëè âòîðîé ðåæèì âêëþ÷åí, òî êîãäà ïðîøåäøåå âðåìÿ ðàâíî FixTime - ïîäàåì íàïðÿæåíèå íà íîæêó.
{
if (Sec >= 5)
{
PORTB &=~(1<<2);
_delay_ms(1000);
PORTB |= (1<<2);
_delay_ms(1);
Sec = 0;
}
}
if (PINB & (1<<1)) //Åñëè íà íîæêå åñòü íàïðÿæåíèå òî:
{
if (mod==0) //Åñëè âêëþ÷åí ðåæèì 0, ìåíÿåì åãî íà 1
{
mod = 1;
Sec = 0; //îáíóëÿåì âðåìÿ
PORTB |= (1<<3);
_delay_ms(100);
PORTB &=~(1<<3);
_delay_ms(1000);
}
else //Åñëè âêëþ÷åí 1 ðåæèì, ìåíÿåì åãî íà 0
{
mod = 0;
Sec = 0; //îáíóëÿåì âðåìÿ
PORTB |= (1<<3);
_delay_ms(100);
PORTB &=~(1<<3);
_delay_ms(500);
PORTB |= (1<<3);
_delay_ms(100);
PORTB &=~(1<<3);
_delay_ms(1000);
}
}
}
}
Не подскажите, в чем ошибка?



