ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
619212 Топик полностью
IBAH (12.09.2015 22:02 - 13.09.2015 21:29, просмотров: 604) ответил Скрипач на С газировкой или с презервативами.
Спешиал фо конференшен volatile char timer_st; //системный таймер struct ton { unsigned char en; //запуск таймера unsigned char q; //выход таймера unsigned short pt; //порог таймера unsigned short et; //счетчик таймера unsigned char timer_st0; //хначение системного таймера при пошлом входе } ; //класс таймер void timer(struct ton*); //метод таймера main() { //инициализация TCCR1A=0; TCCR1B=(1<<WGM12)|(1<<CS10); TCCR1C=0; TIMSK1=1<<OCIE1A; OCR1A=16384; _SEI(); while(1)//главный цикл { //Задача номер 1, мультвибратор с периодом 2 секунды скважность 2 { static struct ton t1,t2; t1.pt=1000;//иницилизация таймеров t2.pt=1000; timer(&t1);//вызов экземпляра timer(&t2); t2.en=t1.q; t1.en=!t2.q;//обратная связь } //Задача номер 2, генератор строба с периодом 100мС { static struct ton t3; t3.pt=100; timer(&t3); t3.en=!t3.q; } } } //системный таймер, с периодом 1мС #pragma vector=TIMER1_COMPA_vect __interrupt void ton_i(void) { timer_st++; return; } //метод таймера void timer(struct ton* t) { _CLI(); if (t->en!=0)// разрешение есть { if(t->et != 0xFFFF)// и таймер не переполнен { t->et =(t->et)+(timer_st-(t->timer_st0));//инкремент таймера } if((t->et)>=(t->pt)) t->q=!0; //если таймер вызод в 1 } else //разрешение нет -> выход в 0 { t->q=0; } t->timer_st0=timer_st; _SEI(); }