КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Теоретичні відомості. Створення програмної затримки часу за допомогою циклів
Створення програмної затримки часу за допомогою циклів Лабораторна робота № 22 Мета роботи: засвоїти метод створення затримок часу з використанням вкладених циклів
Алгоритми управління і контролю, як правило, потребують створення затримок часу. Для цього при програмуванні мікроконтролерів використовують два способи: 1) програмну затримку за рахунок багатократного повторення команд з використанням вкладених циклів; 2) використання таймерів, вбудованих у мікросхему контролера. При програмній затримці команди у вкладеному (внутрішньому) циклі повторюються стільки разів, скільки передбачено в його лічильнику. За цей час лічильник зовнішнього циклу змінюється тільки на одиницю. Тому для оцінки загального часу затримки треба множити час виконання внутрішнього циклу на число, занесене у лічильник зовнішнього циклу. У пропонованій нижче програмі для затримки часу використовується три цикли, вкладених один в інший.
ПОРЯДОК ВИКОНАННЯ ЛАБОРАТОРНОЇ РОБОТИ 1. У середовищі MPLAB створити у папці D:\ 1Work новий проект з іменем 22ГБ (Г – номер групи, Б – номер бригади), обравши у меню Project-New Project. 2. У вікні Edit Project додати новий файл на асемблері 22ГБ.asm (Add Node – додати вузол). Після повернення до вікна Edit Project нижче hex-файла з'явиться файл з розширенням.asm. Після появи вікна середовища MPLAB IDE створити цей текстовий файл з розширенням.asm (File – New), записавши його у папку 1Work (File - Save As …). 3. Зарисувати алгоритм (рис. 22.1) і ввести текст програми на асемблері. 4.
5. Виконати компіляцію програми (Project – Make Project або крайня права піктограма у вигляді зеленої лійки). Після цього на екрані з'являється вікно результатів компіляції (Build Results). 6. Якщо з'явилось повідомлення про помилки (error), слід, ознайомившись з поясненням змісту помилки, виконати мишкою подвійний клік на цьому рядку вікна Build Results. MPLAB зробить активним той рядок у тексті програми, де, ймовірно, зроблено помилку. Слід виправити її і далі так само й інші помилки. Потім повернутись до п. 5, поки не буде видано повідомлення "Build completed successfully" (компіляцію завершено успішно). При цьому створюється файл з тим же ім'ям і розширенням.hex. 7. Створити вікно спостереження (Window – Watch Windows – New Watch Window …), включивши до нього регістри PORTB, HI, MID, LO. 8. Встановити у програмі точку зупинки на команді call SEC. Для цього, навівши курсор на рядок цієї команди, натиснути праву клавішу мишки та обрати в контекстному меню Break Point(s) (Точка(и) зупинки). Рядок виділяється червоним кольором. Так само встановити точки зупинки на командах goto LOOP goto SEC3 goto SEC2 goto SEC1
Текст програми:
;****************************************************** ;ЛАБОРАТОРНА РОБОТА 22 ;Почергове включення світлодіодів ;****************************************************** LIST P=16F628 #INCLUDE "P16F628.INC" ;директиву __CONFIG набрати в одному рядку, ;закінчуючи словом _LVP_OFF __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _MCLRE_ON & _LVP_OFF HI EQU 0x20;змінна зовнішнього циклу MID EQU 0x21;змінна середнього циклу LO EQU 0x22;змінна внутрішнього циклу COD EQU БР;тут замість слова БР слід ввести ;номер бригади! org 0x000; (РС)=0 movlw 0x07;Відключити компаратори і включити movwf CMCON;біти порту А у дискретний режим bsf STATUS, RP0;Обрати банк регістрів 1 movlw 0x3F;Усі біти порту А - на введення movwf TRISA clrf TRISB;Усі біти порту В - у режим виведення bcf STATUS, RP0;Обрати банк регістрів 0 clrf PORTB;очистити порт В (вимкнути світлодіоди) bsf STATUS, C;встановити біт переносу С LOOP: rlf PORTB,f;зсув вліво вмісту PORTВ call SEC;виклик підпрограми затримки goto LOOP;перехід на повторення дій
;п/п затримки часу SEC: movlw.42; далі написати коментар самостійно! movwf HI SEC1: movlw.46 movwf MID SEC2: movlw COD*.25 movwf LO SEC3: decfsz LO,f goto SEC3 decfsz MID,f goto SEC2 decfsz HI,f goto SEC1 return end
9. Зробити скидання (F6) і пуск програми (F9). Виконання припиниться на команді call SEC. Далі буде здійснено виклик підпрограми затримки часу. Щоб визначити цей час, слід вивести на екран вікно віртуального секундоміра (Window – Stopwatch) і обнулити його (Zero). Записати дані в табл. 22.1. У подальшому виконувати програму до чергової точки зупинки (F9) і заповнювати графи таблиці. Треба пам'ятати, що симулятор комп'ютера виконує програму приблизно у 300 разів повільніше, ніж реальний мікроконтролер. 10. Наближено розрахувати час виконання підпрограми затримки. Наприклад, для варіанта COD = 10: Частота тактового генератора f = 4 МГц. Період тактового сигналу Тп = 1 / Тп = 1 / 4 МГц = 0,25 мкс. Час виконання команди без переходів і пропусків становить 4 такти Тк = 4·0,25 мкс = 1 мкс. Команди з переходами виконуються вдвічі довше (2 мкс). Час виконання команд тіла внутрішнього циклу (decfsz LO,f та goto SEC3) становить Ттв = 1+2 = 3 мкс. Час виконання внутрішнього циклу Твн = 25·COD·Ттв = 25·10·3 = 750 мкс. Час виконання середнього циклу Тс = 46·Твн = 46·750 = 34500 мкс. Час виконання зовнішнього циклу (всієї підпрограми затримки) Тз = 42·Тс = 42·34500 = 1449000 мкс = 1,449 с. 11. Підключити лабораторну установку до LPT-порту комп'ютера і до живлення. Встановити перемикач у положення "Програмування" (при цьому світиться світлодіод Prog), а вимикачі, що підключені до портів, усі вимкнути.
22.1. Результати аналізу програми
12. Згорнути вікно MPLAB і на робочому столі зробити подвійний клік на синій піктограмі програматора " ProPic2 ". Перевірити у вікні ProPic2, чи вірно задано тип мікроконтролера (у верхній правій частині вікна виділено синім кольором) і, якщо треба, обрати потрібний тип. Стандартним шляхом відкрити створений вами файл з розширенням.hex. 13. Здійснити програмування мікроконтролера, натиснувши на піктограму з червоною блискавкою. 14. Після програмування переключити перемикач режиму на лабораторній установці в положення "Робота". Почнеться виконання програми, яка послідовно з певними паузами переключає світлодіоди порту В. 15. Візуально визначити затримку між моментами переключення сусідніх світлодіодів Твіз. 16. Вважаючи точним час виконання підпрограми затримки за віртуальним секундоміром комп'ютера Трс, обчислити відносні похибки для розрахункового часу затримки Тз та за візуальною оцінкою Твіз: , .
У програмі застосовуються такі види команд:
ЗМІСТ ЗВІТУ Звіт має містити: назву та мету лабораторної роботи, скорочений порядок виконання лабораторної роботи, алгоритм і програму з коментарем, перелік імен регістрів спеціального призначення, що використовуються у досліджуваній програмі, формат та опис дії кожного виду команд, що вперше зустрічаються у дослідженій програмі мікроконтролера, таблицю та результати розрахунків.
КОНТРОЛЬНІ ЗАПИТАННЯ 1. Як створюються затримки часу? 2. Як виконуються команди call k і return? 3. Як створити звичайний цикл? 4. Як скласти вкладені цикли? 5. Як встановити точку зупинки на заданій команді? 6. Як у середовищі MРLAB можна визначати точний час виконання програми або її фрагментів?
Дата добавления: 2015-06-25; Просмотров: 453; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |