рефераты рефераты
Главная страница > Дипломная работа: Разработка устройства автоматического регулирования света на микроконтроллере  
Дипломная работа: Разработка устройства автоматического регулирования света на микроконтроллере
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Дипломная работа: Разработка устройства автоматического регулирования света на микроконтроллере

                   }

         return;

         }

//нажатие "+"

if(on_old && off_old && !on_new && off_new)

         {

         enable_count=1;

        

if(++press_plus>7)

                   {

                   mode=5;//режим запоминания посылки ДУ "+"

                   goto l1;

                   }

         return;

         }

//нажатие "-"

if(on_old && off_old && on_new && !off_new)

         {

         enable_count=1;

         if(++press_minus>7)

                   {

                   mode=6;//режим запоминания посылки ДУ "-"

l1:

                   clock=0;

                   }

         return;

         }

//

if(enable_count) ++press_key;

if(press_key>press_time*2)

         {

         enable_count=0;

         press_key=0;

         press_plus=0;

         press_minus=0;

         }

//если при медленном изменении яркости ничего не нажато, то остановить изменение яркости.

if(mode==1 || mode==2) mode=7;

//обнуляем счетчик

zader=0;

}

#include "faza.c"

//==========================================================

//обработка прерывания от положительного перепада полуволны.

//==========================================================

#pragma savereg-

interrupt [EXT_INT0] void ext_int0_isr(void)

{

s_reg=SREG;

#asm

         PUSH         R30

#endasm

second_half_period=0;//предустановка на двойную обработку прерывания timer1.

TCNT1H=0xFF;//выдержка timer1

TCNT1L=ofa;

TIMSK=0x82;//разрешение прерывания по переполнению timer1.

#asm

         POP  R30

#endasm

SREG=s_reg;

}

#pragma savereg+

#include "timer0.c"

//==========================================================

//обработка прерывания таймера0.

//==========================================================

#pragma savereg-

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{

if(closed) #asm("RETI");

//сохраняем используемые регистры

#asm

         PUSH         R24

         PUSH         R25

         PUSH         R26

         PUSH         R27

         PUSH         R28

         PUSH         R29

         PUSH         R30

         PUSH         R31

         IN     R30,SREG

         ORI   R30,0x80

         PUSH         R30

#endasm

//опросим пульт ДУ

infra_old=infra;

infra=PINB.0;

if(ir_plus_old && !ir_plus && !in_home && (mode!=1) && (mode!=2)) ir_p_otp=1;

if(ir_minus_old && !ir_minus && !in_home && (mode!=1) && (mode!=2)) ir_m_otp=1;

ir_plus_old=ir_plus;

ir_minus_old=ir_minus;

//разрешаем прерывания

#asm("SEI");

//обработаем пульт ДУ

infrared();

//опрашиваем кнопки

keyboard();

if(++tic>=7813)//ждем 0,5сек

         {

         tic=0;

         clock++;//0 to 4294967295

         second=~second;

         }

//восстанавливаем использованные регистры и возвращаемся.

#asm

         POP  R30

         OUT SREG,R30

         POP  R31

         POP  R30

         POP  R29

         POP  R28

         POP  R27

         POP  R26

         POP  R25

         POP  R24

#endasm

closed=0;

#asm

         RET

#endasm

}

#pragma savereg+

#include "timer1.c"

//==========================================================

//обработка прерывания таймера1 (включение симистора).

//==========================================================

#pragma savereg-

interrupt [TIM1_OVF] void timer1_ovf_isr(void)

{

//сохраняем регистры

s_reg=SREG;

#asm

         PUSH         R30

#endasm

//формируем импульс зажигания.

PORTB=0x00;

//delay_us(7);

#asm

         LDI R30,9

__DELAY:

         DEC R30

         BRNE __DELAY

#endasm

PORTB=0b00011110;

//выдержка 10мсек для второго прохода.

TCNT1H=0xFF;

TCNT1L=0x64;

if(second_half_period) TIMSK=0x02;//запрещаем прерывания таймера1.

second_half_period=1;

//восстанавливаем регистры

#asm

         POP  R30

#endasm

SREG=s_reg;

}

#pragma savereg+

void main(void)

{

begin:

#asm("cli");

#include "init.c"

// Input/Output Ports initialization

// Port B initialization

// Func0=In Func1=Out Func2=Out Func3=Out Func4=Out Func5=In Func6=In Func7=In

// State0=T State1=1 State2=1 State3=1 State4=1 State5=T State6=T State7=T

DDRB =0b00011110;

PORTB=0b00011110;

// Port D initialization

// Func0=In Func1=In Func2=In Func3=In Func4=Out Func5=Out Func6=In

// State0=P State1=T State2=T State3=T State4=0 State5=1 State6=P

DDRD =0b00110000;

PORTD=0b01000001;

// Timer/Counter 0 initialization

// Clock source: System Clock

TCCR0=0x01;

TCNT0=0x02;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x02;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: 125,000 kHz

// Mode: Normal top=FFFFh

// OC1 output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

TCCR1B=0x04;

TCCR1A=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

OCR1H=0x00;

OCR1L=0x00;

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Rising Edge

// INT1: Off

GIMSK=0x00;

MCUCR=0x03;

GIFR=0x40;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

// Analog Comparator Output: Off

ACSR=0x80;

//подготовка данных

second_half_period=closed=0;

on_old=off_old=infra=infra_old=in_home=1;

mode=0;

ofa=ofa_min;

#asm("sei");

while (1)

         {

         switch(mode)

                   {

                   case 0: #include "mode_0.c";//хозяин дома

//хозяин дома

red=second;//моргаем красным и зеленым светодиодами

green=second;

//4 часа

if(clock==28800) mode=4;//быстро включить

//еще полчаса

if(clock>32400)

         {

         mode=3;//быстро погасить

         clock=0;

         }

                            break;

                   case 1: #include "mode_1.c";//медленно снижать яркость

//медленно снижать яркость

if(GIMSK==0x00)

         {

         mode=7;

         break;

         }

if(++timer_ofa>7500)

         {

         timer_ofa=0;

         if(ofa>ofa_min) ofa--;

         else GIMSK=0x00;

         }

                            break;

                   case 2: #include "mode_2.c";//медленно повышать яркость

//медленно повышать яркость

if(GIMSK==0x00)

         {

         ofa=ofa_min;

         GIMSK=0x40;

         timer_ofa=0;

         }

if(++timer_ofa>7500)

         {

         timer_ofa=0;

         if(ofa<ofa_max) ofa++;

         else mode=7;

         }

                            break;

                   case 3: #include "mode_3.c";//быстро погасить

//быстро погасить

if(GIMSK==0x00)

         {

         if(in_home) mode=0;

         else mode=7;

         break;

         }

if(++timer_ofa>21000)

         {

         timer_ofa=0;

         if(ofa>ofa_min) ofa--;

         else GIMSK=0x00;

         }

                            break;

                   case 4: #include "mode_4.c";//быстро включить

//быстро включить

if(GIMSK==0x00)

         {

         ofa=ofa_min;

         GIMSK=0x40;

         timer_ofa=0;

         }

if(++timer_ofa>330)

         {

         timer_ofa=0;

         if(ofa<ofa_max) ofa++;

         else

                   {

                   if(in_home) mode=0;

                   else mode=7;

                   }

         }

                            break;

                   case 5: #include "mode_5.c";//запомнить ДУ "+"

//запомнить ДУ "+"

red=0;

green=second;

//если за 10 сек не приняли сигнал программирования, то выход из программирования

if(clock>20) mode=7;

                            break;

                   case 6: #include "mode_6.c";//запомнить ДУ "-"

//запомнить ДУ "-"

green=0;

red=second;

//если за 10 сек не приняли сигнал программирования, то выход из программирования

if(clock>20) mode=7;

                            break;

                   case 7: #include "mode_7.c";//просто ждем

//просто ждем

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25

рефераты
Новости