ТАУ. лаб3. Лабораторная работа 3 Исследование системы управления реостатным пуском дпт на базе atmega8
Скачать 423.75 Kb.
|
Министерство образования и науки Российской Федерации Федеральное государственное автономное учреждение высшего образования «Южно-Уральский государственный университет (национальный исследовательский университет)» Политехнический институт Механико-технологический факультет Кафедра «Машиностроение, автоматика и электроэнергетика» Лабораторная работа № 3Исследование системы управления реостатным пуском ДПТ на базе ATmega8
Челябинск 2017г. Цель работы:ознакомление с принципами программирования систем управления по времени на базе микропроцессорных контроллеров. Получение практических навыков в применении таймеров-счетчиков и системы прерываний. Содержание работы: Скомпилировать и отладить программный код системы управления реостатным пуском ДПТ, использующий функцию delayдля отсчетов времени; Скомпилировать и отладить программный код, использующий таймер-счетчик и прерывания; Сравнить два обозначенных выше подхода и сделать выводы; Оформить отчет в виде снимков экрана с работающей симуляцией, подписями к снимкам, выводами и ответами на дополнительные вопросы. /*ПО управления пуском ДПТ версия 0.2 файл pusk.c автор Марочкин С.А. для учебного контроллера на atmega8 */ #define F_CPU 4000000UL //указываем рабочую частоту 4МГц #include #include void main() { char t; //переменная, которая будет хранить время asm("cli"); //запретить прерывания DDRB=DDRC=0x3C; //настроить порты РВ2..5 и РС2..5 на вывод DDRD=0xF8; //PD3..PD7 на вывод while(1) { while ((PINB&1)!=0) {} //ждем нажатия кнопки "пуск" t=0; //начало отсчета времени PORTD|=(1< //включить K1 while (t<99) { //пока время не истекло _delay_ms (1000); //выполняем процедуру задержки в 1 секунду t++; //увеличиваем счетчик времени PORTB=(t/10)<<2; //кодируем значение в секундах в BCD PORTC=(t%10)<<2; //и выдаем на индикаторы switch (t) //функция множественного ветвления { case 20: PORTD|=(1< //прошло 20 сек -вкл. K2 break; case 40: PORTD|=(1< //прошло 40 сек -вкл. K3 break; case 60: PORTD|=(1< //прошло 60 сек -вкл. K4 break; case 80: PORTD|=(1< //прошло 80 сек -вкл. K5 break; } //выбор } //цикл пуска } //бесконечный цикл } Листинг 2. Программа управления пуском на языке Си, использующая таймер-счетчик и прерывания /*ПО управления пуском ДПТ версия 1.0 файл pusk.c автор Марочкин С.А. для учебного контроллера на atmega8 */ #include //используем библиотеку прерываний #include //в этот раз переменная t-глобальна спецификатор volatile говорит //компилятору о том, что данную переменную не нужно оптимизировать //без данного спецификатора она превратиться в константу volatile int t; //добавляем вектор прерывания по переполнению таймера ISR (TIMER0_OVF_vect) { t++; } void main() { cli(); //запрет всех прерываний DDRB=DDRC=0x3C; DDRD=0xF8; TCCR0=(0< sei(); //разрешаем прерывания while(1) { TIMSK=(0< while ((PINB&1)!=0) {} //ждем нажатия кнопки t=0; TIMSK=(1< PORTD=(1< while (t<99) { PORTB=(t/10)<<2; PORTC=(t%10)<<2; switch (t) { case 20: PORTD|=(1< break; case 40: PORTD|=(1< break; case 60: PORTD|=(1< break; case 80: PORTD|=(1< break; } } } } Вывод Ознакомились с принципами программирования систем управления по времени на базе микропроцессорных контроллеров. Научились применять таймеров-счетчиков и системы прерываний. |