Перейти к содержанию

slavon_02

Members
  • Постов

    1
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Алабама

Электроника

  • Стаж в электронике
    1-2 года

Достижения slavon_02

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. # define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/io.h> #include <avr/interrupt.h> volatile unsigned int s=0; unsigned int ADCdata=0; volatile unsigned int t=0; ISR (TIM0_COMPA_vect) { if (s>30) s=0; if (t>30) t=0; s++; t++; } void volt (void) { ADCdata = 0; ADCSRA|=(1<<ADSC); while ((ADCSRA&_BV(ADIF))==0x00); ADCdata=(ADCL|ADCH<<8); } void day (void); void night (void) { s=0; t=0; s=30; while (1) { volt (); if (s == 5) PORTB &= ~_BV(PB3); if (s == 30 ) PORTB |= _BV(PB3); if (s > 30) s=0; if (ADCdata >= 200 ) t=0; if (ADCdata < 200 && t>=30) day(); if (t > 30) t=0; if (ADCdata >= 200 ) PORTB &= ~_BV(PB0); if (ADCdata < 200 ) PORTB |= _BV(PB0); } } void day (void) { t=0; s=1; PORTB &= ~_BV(PB3); while (1) { volt(); if (s > 1) s=0; if (ADCdata < 200 ) t=0; if (ADCdata >=200 && t>=30) night(); if (t > 30) t=0; if (ADCdata >= 200 ) PORTB &= ~_BV(PB0); if (ADCdata < 200 ) PORTB |= _BV(PB0); } } int main(void) { ADCSRA=(1<<ADEN)|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS2)|(1<<ADSC); ADMUX=(0<<REFS0)|(0<<ADLAR)|(1<<MUX1)|(0<<MUX0); ADCSRB=(0<<ADTS2)|(1<<ADTS1)|(1<<ADTS0); TCCR0A = (1 << WGM01)|(0 << WGM00); // прерывание по совпадению TCCR0B = (0 << WGM02)|(1 << CS02)|(0 << CS01)|(1 << CS00); //делитель на 1024 TIMSK0 =(1<<OCIE0A); // устанавливаем бит разрешения прерывания счетчика по совпадению с OCR0A OCR0A = 110; // запись в регистр число для сравнения 1 = приблизительно 1 мс DDRB = 0b101111; sei(); PORTB |= _BV(PB3); _delay_ms(3000); volt(); if(ADCdata >= 200) night(); if(ADCdata < 200) day(); Добрый день. может кто подскажет, что с кодом не так. при переходе с функции day на функцию night и обратно после двенадцатого перехода мк зависает. вроде бы все правильно... (мк attiny 13)
×
×
  • Создать...