Главная страница
Навигация по странице:

  • Цель работы

  • Содержание работы

  • Листинг 2. Программа управления пуском на языке Си, использующая таймер-счетчик и прерывания

  • ТАУ. лаб3. Лабораторная работа 3 Исследование системы управления реостатным пуском дпт на базе atmega8


    Скачать 423.75 Kb.
    НазваниеЛабораторная работа 3 Исследование системы управления реостатным пуском дпт на базе atmega8
    Дата26.02.2021
    Размер423.75 Kb.
    Формат файлаdocx
    Имя файлалаб3.docx
    ТипЛабораторная работа
    #179886


    Министерство образования и науки Российской Федерации

    Федеральное государственное автономное учреждение высшего образования

    «Южно-Уральский государственный университет

    (национальный исследовательский университет)»

    Политехнический институт

    Механико-технологический факультет

    Кафедра «Машиностроение, автоматика и электроэнергетика»

    Лабораторная работа № 3

    Исследование системы управления реостатным пуском ДПТ на базе ATmega8





































































    Челябинск

    2017г.

    Цель работы:ознакомление с принципами программирования систем управления по времени на базе микропроцессорных контроллеров. Получение практических навыков в применении таймеров-счетчиков и системы прерываний.

    Содержание работы:

    1. Скомпилировать и отладить программный код системы управления реостатным пуском ДПТ, использующий функцию delayдля отсчетов времени;

    2. Скомпилировать и отладить программный код, использующий таймер-счетчик и прерывания;

    3. Сравнить два обозначенных выше подхода и сделать выводы;

    4. Оформить отчет в виде снимков экрана с работающей симуляцией, подписями к снимкам, выводами и ответами на дополнительные вопросы.



    1. /*ПО управления пуском ДПТ

    2. версия 0.2

    3. файл pusk.c

    4. автор Марочкин С.А.

    5. для учебного контроллера на atmega8

    6. */

    7. #define F_CPU 4000000UL //указываем рабочую частоту 4МГц

    8. #include

    9. #include //подключаем подпрограммы задержки

    10. void main()

    11. {

    12. char t; //переменная, которая будет хранить время

    13. asm("cli"); //запретить прерывания

    14. DDRB=DDRC=0x3C; //настроить порты РВ2..5 и РС2..5 на вывод

    15. DDRD=0xF8; //PD3..PD7 на вывод

    16. while(1)

    17. {

    18. while ((PINB&1)!=0) {} //ждем нажатия кнопки "пуск"

    19. t=0; //начало отсчета времени

    20. PORTD|=(1<
      //включить K1


    21. while (t<99)

    22. { //пока время не истекло

    23. _delay_ms (1000); //выполняем процедуру задержки в 1 секунду

    24. t++; //увеличиваем счетчик времени

    25. PORTB=(t/10)<<2; //кодируем значение в секундах в BCD

    26. PORTC=(t%10)<<2; //и выдаем на индикаторы

    27. switch (t) //функция множественного ветвления

    28. {

    29. case 20: PORTD|=(1<
      //прошло 20 сек -вкл. K2


    30. break;

    31. case 40: PORTD|=(1<
      //прошло 40 сек -вкл. K3

    32. break;

    33. case 60: PORTD|=(1<
      //прошло 60 сек -вкл. K4

    34. break;

    35. case 80: PORTD|=(1<
      //прошло 80 сек -вкл. K5

    36. break;

    37. } //выбор

    38. } //цикл пуска

    39. } //бесконечный цикл

    40. }

    Листинг 2. Программа управления пуском на языке Си, использующая таймер-счетчик и прерывания




    1. /*ПО управления пуском ДПТ

    2. версия 1.0

    3. файл pusk.c

    4. автор Марочкин С.А.

    5. для учебного контроллера на atmega8

    6. */

    7. #include

    8. //используем библиотеку прерываний

    9. #include

    10.  

    11. //в этот раз переменная t-глобальна спецификатор volatile говорит

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

    13. //без данного спецификатора она превратиться в константу

    14. volatile int t;

    15.  

    16. //добавляем вектор прерывания по переполнению таймера

    17. ISR (TIMER0_OVF_vect)

    18. {

    19. t++;

    20. }

    21.  

    22. void main()

    23. {

    24. cli(); //запрет всех прерываний

    25. DDRB=DDRC=0x3C;

    26. DDRD=0xF8;

    27. TCCR0=(0<//предделитель тактовой частоты 1/64

    28. sei(); //разрешаем прерывания

    29. while(1)

    30. {

    31. TIMSK=(0<//выключаем прерывания по переполнению таймера Т0

    32. while ((PINB&1)!=0) {} //ждем нажатия кнопки

    33. t=0;

    34. TIMSK=(1<//запускаем прерывания таймера

    35. PORTD=(1<

    36. while (t<99)

    37. {

    38. PORTB=(t/10)<<2;

    39. PORTC=(t%10)<<2;

    40. switch (t)

    41. {

    42. case 20: PORTD|=(1<

    43. break;

    44. case 40: PORTD|=(1<

    45. break;

    46. case 60: PORTD|=(1<

    47. break;

    48. case 80: PORTD|=(1<

    49. break;

    50. }

    51. }

    52. }

    53. }

    Вывод

    Ознакомились с принципами программирования систем управления по времени на базе микропроцессорных контроллеров. Научились применять таймеров-счетчиков и системы прерываний.


    написать администратору сайта