Мікропроцесорна техніка

Вивчення архітектури, методів тактування, режимів зниженого енергоспоживання сучасних мікроконтролерів. Організація та режим роботи послідовних периферійних інтерфейсів. Розгляд функціонального призначенням програмного забезпечення Monitor для УНМС-2.

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык украинский
Дата добавления 15.02.2010
Размер файла 933,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Для переходу з перегляду лістінга компіляції в редактор варто користуватися клавішею F4. Натискання клавіші Esc приводить до виходу з ИСП.

Програма MCS_Loader

Програма-завантажник MCS_Loader призначена для завантаження двійкового файлу здійсненних кодів функціональної програми користувача на згадку програм універсальної керуючої мікроконтролерній системи УНМС-2 через послідовний інтерфейс у стандарті RS-232.

Запуск програми-завантажника MCS_Loader виконується через файл MCS_Loader.exe. При запуску виробляється ініціалізація Сома-порту ПЭВМ. У випадку неможливості доступу до Сома-порту видається повідомлення.

Інтерфейс користувача програми MCS_Loader

Всі елементи керування процесом завантаження розміщені в одному вікні програми.

На лівій панелі відображається список доступних двійкових файлів з розширенням .bin, які були знайдені при запуску програми в поточній директорії. Тому рекомендується розміщати програма-завантажник у тій директорії, у якій створені використовувані двійкові файли.

Під панеллю двійкових файлів розташована кнопка Знайти файл, при натисканні на яку викликається стандартний діалог відкриття файлу. У такий спосіб можна вказати двійковий файл, розташований не в директорії програми-завантажника.

Права панель вікна програми містить елементи керування пересиланням даних на ПЭВМ.

Відразу після запуску програми необхідно вказати Сома-порт, що буде використатися в цьому випадку. За замовчуванням заданий СОМ2.

При виборі двійкового файлу зі списку в поле Поточний двійковий файл відображається повний шлях до обраного файлу, а також кількість байт інформації в цьому файлі.

У нижнім полі відображається вміст обраного двійкового файлу у вигляді 16-ричных кодів.

Кнопка Прочитати повторно дозволяє обновити файл, завантажений у програму MCS_Loader, якщо він був обновлений (перекомпильован) без закриття програми-завантажника.

Кнопка Відправити ініціює процес пересилання байтів двійкового файлу через обраний Сома-порт на УУМС. Праворуч від кнопки Відправити розташований індикатор процесу пересилання.

У поле Десяткове подання байта можна задати довільне значення від 0 до 255 (байт), а за допомогою кнопки Відправити байт - переслати цей єдиний байт на УУМС. Дана можливість використається з метою тестування каналу зв'язку ПЭВМ - УУМС.

По кнопці Прийняти відкривається додаткове вікно графічного відображення даних, прийнятих від ПЭВМ у процесі роботи програми користувача. Дана можливість дозволяє організувати відображення даних з УУМС без написання додаткових програм обміну. Підтримується пересилання однобайтової або двухбайтової інформації й відображення по одному (один графік) або двом каналам (дві графіки). Вид вікна графічного відображення даних показаний на мал.2.

Кнопка Пуск ініціює прийом інформації від УУМС й її відображення. По кнопці Стіп процес прийому й відображення даних зупиняється. По кнопці Скидання виробляється очищення поля відображення.

Опція Сітка дозволяє включити або відключити координатну сітку на графіках.

Опція Усереднювати дозволяє включити або відключити режим усереднення прийнятих даних при відображенні. При включеній опції можна задати кількість крапок усереднення.

У поле Перо задається товщина ліній графіків у пікселах. За замовчуванням установлене значення 1 піксел.

4.2.2 Технологія роботи із програмою MCS_Loader

Після запуску програми MCS_Loader потрібно вибрати в списку двійковий файл для пересилання. Уміст файлу буде відображено в призначеному для цього поле.

Варто переконатися в наступному:

? кабель зв'язку по інтерфейсі RS-232 підключений до Сома-порту ПЭВМ і розніманню RS-232 мікроконтролерній системи;

? УУМС перебуває в режимі прийому програми користувача, що супроводжується " вогнем, що біжить," на лінійці світодіодів; для перекладу УУМС у цей режим варто нажати кнопку Скидання на верхній панелі корпуса УУМС.

Для завантаження обраного файлу на згадку УУМС потрібно нажати кнопку Відправити. При цьому активізується індикатор процесу пересилання, а завершення пересилання супроводжується коротким звуковим сигналом.

Системне програмне забезпечення УУМС у процесі прийому програми користувача відображає 16-ричное значення кожного прийнятого байта на двох правих семисегментних індикаторах.

При завершенні прийому на семисегментних індикаторах збережеться значення останнього прийнятого байта. Це значення можна зрівняти з останнім байтом файлу в інтерфейсі програми MCS_Loader й у такий спосіб переконатися в правильності передачі даних.

Режим пересилання одиночного байта можна використати для перевірки працездатності каналу зв'язку.

5 ТЕСТОВІ ПРОГРАМИ УНМС-2 ТА ІНДИВІДУАЛЬНІ ТЕСТІ

Програма BTN_LED.ASM

Призначення. Виконується циклічне читання стану перемикачів для завдання бітових сигналів (адреса 0FFF2h) і отримане двійкове число відображається на лінійці світодіодів (адреса 0FFF1h).

Елементи, що тестуються: перемикачі завдання бітових сигналів, лінійка світодіодів.

Керування програмою й візуальні ефекти. Після запуску програми в довільному порядку змінюйте стан восьми перемикачів на прозорій панелі УУМС-2. Верхнє положення кожного перемикача відповідає установці сигналу "1", а нижнє - сигналу "0". Поточний стан перемикачів відображається на лінійці світодіодів: сигнал "1" викликає світіння відповідного світодіода, сигнал "0" - гасіння світодіода. Відповідність перемикачів і світодіодів пряме: лівому перемикачу відповідає лівий світодіод і т.д. до правого перемикача й світодіода.

Програма BTN_SSI.ASM

Призначення. Виконується циклічне читання стану перемикачів для завдання бітових сигналів (адреса 0FFF2h) і отримане двійкове число використається для керування світінням сегментів чотирьох семисегментних індикаторів одночасно (адреси 0FFF7h - 0FFFAh).

Елементи, що тестуються: перемикачі завдання бітових сигналів, панель семисегментних індикаторів.

Керування програмою й візуальні ефекти. Після запуску програми в довільному порядку змінюйте стан восьми перемикачів на прозорій панелі УУМС-2. Верхнє положення кожного перемикача відповідає установці сигналу "1", а нижнє - сигналу "0".

Поточний стан перемикачів відображається синхронно на кожному із чотирьох семисегментних індикаторів: сигнал "1" викликає світіння відповідного сегмента, сигнал "0" - гасіння сегмента.

Коли всі перемикачі встановлені у верхнє положення, повинні світитися всі сегменти (у тому числі й крапки).

Дії програми повторюються циклічно до завершення програми користувачем.

Програма LCD.ASM

Призначення. Тестування 10-позиційного ЖК-дисплея (адреса 0FFF1h) шляхом послідовного виводу в позиції, починаючи з лівої, значень від 0 до 9.

Елементи, що тестуються: ЖК-дисплей.

Керування програмою й візуальні ефекти. Після запуску програми виробляється очищення ЖК-дисплея. Потім число 0 відображається першим у крайній лівій позиції. Далі з інтервалом в 1 с. послідовно в позиціях ліворуч праворуч відображаються числа 1, 2, 3 і т.д. до 9. Таким чином, після виконання програми всі позиції ЖК-дисплея задіяні й на ньому представлено: "0123456789".

Програма INT0_T0.ASM

Призначення. Перевірка реакції системи УУМС-2 на зовнішнє переривання INT0 для основного мікроконтролера й функціонування таймера T0 основного мікроконтролера при підрахунку зовнішніх імпульсів.

Елементи, що тестуються: система переривань і таймери основного мікроконтролера, панель семисегментних індикаторів.

Керування програмою й візуальні ефекти. Перед запуском програми встановите перемикач Переривання INT0 у верхнє положення. Положення перемикача Рахункові імпульси таймера Т0 байдуже.

Після запуску програми семисегментний індикатор погашений. Таймер Т0 запускається подачею переривання INT0. Для подачі переривання INT0 потрібно подати сигнал "0" перемикачем Переривання INT0, після чого повернути перемикач у положення "1" (переривання сприймається по зрізі, тобто по переходу "1-0"). При цьому на панелі семисегментних індикаторів відображається число "0".

За допомогою перемикача Рахункові імпульси таймера Т0 можна сформувати довільну кількість імпульсів для підрахунку таймером Т0. Один імпульс формується при подвійній зміні положення перемикача (наприклад "1-0-1", тобто перемкнути вниз, а потім нагору).

При повторному формуванні сигналу переривання INT0 таймер Т0 зупиняється, а на панель семисегментних індикаторів виводиться підрахована кількість імпульсів, що повинне збігатися з фактичною кількістю сформованих імпульсів.

При наступній подачі переривання INT0 таймер буде обнулен і знову включений, а на панелі індикаторів відобразиться "0". Після цього цикл підрахунку зовнішніх імпульсів може бути повторений.

Програма ADC_UP.ASM

Призначення. Тестування блоку багатоканального аналого-цифрового перетворювача в складі периферійного мікроконтролера ATmega16, а також перевірка протоколу обміну даними між основним і периферійним мікроконтролерами. Особливість тесту полягає в тому, що перевіряється спільна робота двох програм, виконуваних одночасно двома мікроконтролерами в складі УУМС-2.

Елементи, що тестуються: блок багатоканального аналого-цифрового перетворювача в складі периферійного мікроконтролера ATmega16, буферні елементи для взаємодії основного й периферійного мікроконтролерів, семисегментні індикатори, бітові перемикачі.

Керування програмою й візуальні ефекти. Програма периферійного мікроконтролера функціонує увесь час й очікує сигнал запиту даних PRRQ від основного мікроконтролера.

Після запуску програми ADC_UP на основному мікроконтролері виробляється читання стану бітових перемикачів і виділяється значення молодших трьох бітів (тобто можуть бути виділені значення від 0 до 7). Отримане число пересилається периферійному мікроконтролеру як команда, що забезпечується системним сигналом PRRQ (див. документ "Системна програма MPF"). Значення команди сприймається периферійним мікроконтролером як номер каналу блоку АЦП, сигнал з якого повинен бути перетворений у цифрову форму й переданий основному мікроконтролеру.

Безпосередній візуальний ефект може бути отриманий при завданні номера каналу 0, 1 або 3. При цьому по каналах 0 або 1 вхідний сигнал для АЦП варто задавати за допомогою потенціометрів АЦП вх.1 й АЦП вх.2 відповідно, розташованих на верхній панелі корпуса УУМС-2. При повному повороті ручки відповідного потенціометра на панелі семисегментних індикаторів можна спостерігати зміна значень від 0 до 255.

При завданні номера каналу 3 вхідний сигнал для АЦП приймається з виходу цифро-аналогового перетворювача (ЦАП). Для цього в програмі ADC_UP реалізоване формування циклічно наростаючого значення від 0 до 255 і видача його на блок ЦАП. На семисегментних індикаторах можна спостерігати відповідно циклічно наростаючі значення від 0 до 255.

Описані дії повторюються циклічно до завершення виконання програми користувачем.

Програма PWM.ASM

Призначення. Тестування блоку широтно-імпульсного генератора (ШІМ-генератора) у складі периферійного мікроконтролера ATmega16, а також перевірка протоколу обміну даними між основним і периферійним мікроконтролерами. Особливість тесту полягає в тому, що перевіряється спільна робота двох програм, виконуваних одночасно двома мікроконтролерами в складі УУМС-2.

Елементи, що тестуються: блок ШІМ-генераторів на основі таймера Т1 у складі периферійного мікроконтролера ATmega16 (вихідні лінії PWM0 й PWM1), буферні елементи для взаємодії основного й периферійного мікроконтролерів, семисегментні індикатори, бітові перемикачі.

Керування програмою й візуальні ефекти. Програма периферійного мікроконтролера функціонує увесь час й очікує сигнал запиту даних PRRQ від основного мікроконтролера.

Після запуску програми PWM на основному мікроконтролері виробляється посилка команди "8" (користувач може змінити у вихідному тексті це значення на "9"). Команда "8" означає посилку даних для ШІМ-генератора з виходом PWM0 ("9" - для PWM1).

Далі зчитується стан бітових перемикачів, і отриманий код передається периферійному мікроконтролеру як відносне значення ширини формованих імпульсів (0 - відсутність імпульсів, 255 - максимальна довжина імпульсів, рівна періоду їхнього проходження).

Період проходження ШІМ-імпульсов становить 0.5 мс (частота 2 кгц) і не може бути змінений у процесі виконання програми. Для зміни значення періоду варто змінювати настроювання таймерів у тексті програми.

Стан бітових перемикачів відображається на лінійці світодіодів, а значення шпаруватості імпульсів, розраховане на основі коду з перемикачів, представляється на панелі семисегментних індикаторів у процентному вираженні (значення від 0 до 100).

Спостерігати вихідний ШІМ-сигнал по каналі PWM0 можна при підключенні вимірювального шлейфа осцилографа до BNC-коннектору з маркуванням ШИМ, розташованому на задній панелі корпуса УУСМ-2.

Програма DAC.ASM

Призначення. Перевірка блоку цифро-аналогового перетворювача.

Елементи, що тестуються: Блок ЦАП, бітові перемикачі, лінійка світодіодів

Керування програмою й візуальні ефекти. Після запуску програми формується значення однобайтового числа, що видається на блок ЦАП для перетворення урівень аналогового сигналу, а двійковий код цього числа відображається на лінійці світодіодів. Значення числа формується шляхом інкремента від 0 до 255 з тимчасовим кроком 50мс, повний цикл становить близько 13 з, після чого набір значень повторюється. Вихідний сигнал ЦАП відповідно змінюється від 0 до 2,5У при установці бітового перемикача "7" на лінійці перемикачів у нижнє положення ("0").. Перевірка формування вихідного сигналу ЦАП негативної полярності від 0 до -2,5У забезпечується при установці бітового перемикача "7" на лінійці перемикачів у верхнє положення ("1").

Вихідний сигнал ЦАП можна спостерігати на осцилографі при підключенні вимірювального шлейфа до BNC-коннектору з маркуванням ЦАП, розташованому на задній панелі корпуса УУСМ-2.

Програма COUNT_T0.ASM

Призначення. Перевірка взаємодії генератора низькочастотних імпульсів у складі УУМС-2 і таймери Т0 основного мікроконтролера - вимір частоти імпульсів від генератора.

Елементи, що тестуються: Генератор НЧ, таймери Т0 і Т1

Керування програмою й візуальні ефекти. Перед запуском програми необхідно переставити перемичку J18 (середня по розміщенню на платі) у праве положення (див. посібник з експлуатації УУМС-2), що забезпечує подачу імпульсів від генератора на рахунковий вхід таймера Т0 основного мікроконтролера.

Після запуску програми виконується настроювання таймерів Т0 і Т1 основного мікроконтролера: таймер Т0 використається як 16-бітовий лічильник, таймер Т1 - як 16-бітовий таймер, що реалізує інтервал часу 50 мс. Програмно забезпечується вимірювальний інтервал тривалістю 1 с., протягом якого таймер Т0 підраховує кількість імпульсів від генератора. Після закінчення інтервалу підрахована кількість відображається на панелі семисегментних індикаторів, і вимірювальний цикл повторяться знову.

У ході роботи програми можна змінювати частоту генерації за допомогою потенціометра Fген, розташованого на верхній панелі корпуса УУМС-2. Результат вимірів відповідно повинен змінюватися. Відображуване числове значення фактично відповідає частоті генеруємих імпульсів, вираженої в герцах.

Програма BTN_LED.ASM з індивідуальним удосконаленням

Призначення. Виконується циклічне читання стану перемикачів для завдання бітових сигналів (адреса 0FFF2h) і отримане двійкове число відображається на лінійці світодіодів (адреса 0FFF1h) чотирма різними способами:

- число відображається відповідно с бітовими значеннями;

- старша тетрда числа відображається відповідно с бітовими значеннями, а молотша тетрода - відповідно з інверсними значеннями;

- старша тетрда числа відповідно з інверсними значеннями, а молодша тетрода - відображається відповідно с бітовими значеннями;

- число відображається відповідно з інверсними значеннями бітів.

Кожний спосіб візуалізації триває 10 секунд, протягом яких можно задавати різні значення перемикачів.

cseg

org 2000h

jmp main

org 200Bh

jmp timer

main:

mov TMOD,#01h

mov IE,#10000010b

mov TL0,#LOW(555)

mov TH0,#HIGH(555)

mov DPTR,#0FFF7h

mov A,#1

mov R2,#1

mov R1,#0

call get_n

movx @DPTR,A

setb TR0

loop:

mov DPTR,#0FFF1h

movx @DPTR,A

quit:

cjne R1, #0,two

mov dptr,#0FFF2h

movx A,@DPTR

jmp loop

two:

cjne R1,#1,three

mov dptr,#0FFF2h

movx A,@DPTR

cpl Acc.0

cpl Acc.1

cpl Acc.2

cpl Acc.3

jmp loop

three:

cjne R1,#2,fore

mov dptr,#0FFF2h

movx A,@DPTR

cpl Acc.4

cpl Acc.5

cpl Acc.6

cpl Acc.7

jmp loop

fore:

cjne R1,#3,loop

mov dptr,#0FFF2h

movx A,@DPTR

cpl A

jmp loop

timer:

mov R4,A

;збереження значення акумулятора

clr TR0

;маскування переривання від таймера 0

inc R7

;лічильник переривань (180 = 10 сек)

cjne R7,#180,out

;пройшло 10 секунд?

mov R7,#0

;так - обнуління лічильника

inc R1

;інкрементуємо показник циклів

cjne R1,#4,outa

;пройшло 4 циклів

mov R1,#0

;обнулення показника

outa:

inc R2

cjne R2,#5,outw

mov R2,#1

outw:

mov A,R2

call get_n

mov DPTR,#0FFF7h

movx @DPTR,A

mov DPTR,#0FFF1h

out:

mov A,R4

mov TL0,#LOW(555)

mov TH0,#HIGH(555)

setb TR0

reti

get_n:

movc A,@A+PC

;підпрограма конверсії значення акумулятора в код ССІ

ret

db 00000110b ;1

;таблиця значень ССІ для конверсії

db 01011011b ;2

db 01001111b ;3

db 01100110b ;4

6. ПРОГРАМИ ТИПОВИХ ПРОЦЕДУР

1. Передати вміст буфера резидентної пам'яті даних по непрямій адресі з R0. Алгоритм програми представления на рисунку 6.1

Рисугок 6.1 - Алгоритм для програми 1

Текст програми:

Мітка

Команди

Коментар

cseg

org 2000h

jmp main

;перехід на виконання головної програми

org 2003h

;початок переривання по INT0

mov DPTR,#0fff2h

;завантаження адреси лінійки перемикачів

movx A,@DPTR

;прийняття значень перемикачів

mov DPTR, #0fff1h

; завантаження адреси лінійки світодіодів

movx @DPTR,A

;візуалізація значень перемикачів

call 0230h

;затримка 50мс

mov R0,A

;завантаження уведеної адреси

mov @R0,SBUF

;передача байта в РПД

mov IE,#0

;для запобігання накладення переривань

reti

;кінець програми-оброблювача

main:

mov IE, #10000001b

;активація переривання по INT0

loop:

sjmp loop

;нескінченний цикл

2. Завантажити в покажчик даних початкову адресу 7F00 масиву даних, розташованого в зовнішній пам'яті даних. Алгоритм програми представления на рисунку 6.2

Текст програми:

Мітка

Команди

Коментар

counter equ PSW.5

cseg

org 2000h

jmp main

;перехід на початок програми

org 2003h

;обробка переривання по INT0

mov IE,#0

;для запобігання спрацьовування непотрібного переривання

mov A,R0

call o

call 0220h

mov IE, #10000001b

;дозвіл переривання по INT0

reti

;повернення з підпрограми обробки переривання

main:

mov IE, #10000001b

;дозвіл переривання по INT0

clr counter

;обнуління лічильника введених тетрад

loop:

mov DPTR,#0FFF2h

;сканування перемикачів

movx A,@DPTR

mov DPTR,#0FFF7h

;для відображення на ССІ

call visual

;підпрограма відображення введеної инф.

call 0230h

;затримка для фіксації значення ССІ

sjmp loop

;цикл сканування введеної инф.

visual:

mov R0,A

;підпрограма зберігає значення Акк.

anl A,#0Fh

;виділення мол. тетради для коверции

call get_num

;у код ССИ за допомогою підпрограми

movx @DPTR,A

;відображення мол. частини 16-го числа

inc DPTR

;для відображення ст. частини

mov A,R0

;відновлення значення Акк.

swap A

;виділення ст. тетради для коверции

anl A,#0Fh

call get_num

;у код ССИ за допомогою підпрограми

movx @DPTR,A

;відображення ст. частини 16-го числа

ret

; кінець підпрограми

o:

jb counter,sec

;лічильник дорівнює 1?

mov R1,A

;ні, а значить зберегти введене значення

setb counter

;лічильник - друга тетрада

jmp fist

;завершення циклу уведення першої тетради

sec:

mov DPH,A

;дорівнює, а значить збереження уведеної инф.

mov DPTR,#0FFF9h

;візуалізація зі старшого розряду

call visual

;виклик процедури візуалізації

mov A,R1

;мол. тетрада уведена

mov DPL,A

;запис в DPTR

mov DPTR,#0FFF7h

;візуалізація з мол. розряду

call visual

;візуалізація з мол. розряду

l:

jmp l

;зациклення - кінець програми

fist:

call 0230h

;затримка 50 мс

ret

;вихід з підпрограми візуалізації

get_num:

inc A

;підпрограма перекладу 16-ССІ

movc A,@A+PC

ret

db 00111111b

;0

db 00000110b

;1

db 01011011b

;2

db 01001111b

;3

db 01100110b

;4

db 01101101b

;5

db 01111101b

;6

db 00000111b

;7

db 01111111b

;8

db 01101111b

;9

db 01110111b

;A

db 01111100b

;B

db 00111001b

;C

db 01011110b

;D

db 01111001b

;E

db 01110001b

;F

Рисунок 6.2 - Алгоритм програми 2 1

3. Програма виконує завантаження керуючого слова в регістр керування таймером TCON з лінійки перемикачів по перериванню INT0 і візуалізацію слова на лінійці світодіодів. Алгоритм програми представления на рисунку 6.3

Рисунок 6.3 - Алгоритм програми 3

Текст програми:

Мітка

Команди

Коментар

cseg

;сегмент коду

org 2000h

;початкова адреса програми

jmp main

;перехід на установку регістра IE

org 2003h

;початок переривання по INT0

mov DPTR,#0fff2h

;запис адреси лінійки перемикачів

movx A,@DPTR

;збереження даних з перемикачів в А

mov DPTR, #0fff1h

;запис адреси лінійки світодіодів

movx @DPTR,A

;візуалізація байта даних

mov TCON,A

;пересилання байта даних у регістр TCON

mov IE,#0

;обнуління регістра IE

reti

;вихід з підпрограми переривання

main:

mov IE, #10000001b

;установка регістра IE

loop:

sjmp loop

;зациклення (нескінченний цикл)

4. Програма виконує скидання всіх прапорів користувача (область РПД із адресами 20h-2Fh).

Текст програми:

Мітка

Команди

Коментар

cseg

;сегмент коду

org 2000h

;початкова адреса програми

;запис значень на згадку

start:

MOV A,#0

;установка початкового значення

MOV R0, #20h

;завантаження в R0 початкового значення адреси пам'яті

MOV R1, #0Fh

;завантаження в R1 кількості повторень циклу

DM:

INC A

;збільшення записуваного значення

MOV @R0,A

;запис значення на згадку

INC R0

;збільшення адреси пам'яті

MOV DPTR,#0FFF1h

;запис адреси лінійки світодіодів

MOVX @DPTR,A

;візуалізація байта даних

call 0220h

;затримка 1c

DJNZ R1, DM

;зациклення (якщо не всі байти записані)

;обнуління комірок пам'яті

MOV R0, #20h

;завантаження в R0 початкового значення адреси пам'яті

MOV R1, #0Fh

;завантаження в R1 кількості повторень циклу

loop:

MOV DPTR,#0FFF1h

;запис адреси лінійки світодіодів

MOV A,@R0

;пересилання вмісту R0 для візуалізації

MOVX @DPTR,A

;візуалізація байта даних

call 0220h

;затримка 1c

MOV @R0, #0

;відчищання байта даних

MOV A, @R0

;пересилання обнуленного регістра R0 в А

MOVX @DPTR,A

;візуалізація байта даних

call 0220h

;затримка 1c

call 0220h

;затримка 1c

INC R0

;збільшення адреси байта даних

DJNZ R1, loop

;зациклення (якщо не всі байти відчищені)

jmp start

;зациклення

Запам'ятати у ВПД уміст регістрів банку 0. Початкова адреса у ВПД 5000h. Алгоритм програми представления на рисунку 6.4

Рисунок 6.4 - Алгоритм програми 5

Текст програми:

CSEG

ORG 2000h

MOV PSW, #08H

; Вибір 1-го Банку РЗП

MOV R2, #8

; Лічильник циклів => R2

MOV DPTR,#5000h

; Початкова адреса => DPTR

MOV R0, #0

; Початкова адреса Банку 0

MET:

MOV A, @R0

; Пересилання байта з РЗП

MOVX @DPTR, A

; у ВПД

INC DPTR

; Нарощування адреси ВПД

INC R0

; Нарощування адреси РПД

DJNZ R2, MET

; Зменшення лічильника й повтор

6. Програма виконує запис коду (установленого на перемикачах) на згадку даних, починаючи з адреси 3000h. Комбінація, записувана на згадку, визуализується на лінійці світодіодів. Затримка між записом сусідніх комбінацій 3 секунди. Алгоритм програми представления на рисунку 6.5

Текст програми:

INDequ0fff1h

;IND відповідає адресі лінійки світодіодів

keyequ0fff2h

;key - адреса лінійки перемикачів

Pamequ3000h

;Pam - адреса області пам'яті для запису даних

Delay1s equ0220h

;Delay1s відповідає адресі затримки 1 сек.

cseg

;сегмент коду

org2000h

;початкова адреса програми

movr3, #0

;регістр R3 виконує функцію лічильника

mov dptr, #Pam

;завантаження адреси області пам'яті для запису даних

m1:

Push dpl

;збереження мол. частини DPTR

push dph

;збереження ст. частини DPTR

call Delay1s

;реалізація затримки 3 сек.

call Delay1s

call Delay1s

movdptr, #key

;завантаження адреси лінійки перемикачів

movxa, @dptr

;збереження даних з перемикачів в А

popdph

;відновлення ст. частини DPTR

popdpl

;відновлення мол. частини DPTR

movx@dptr,a

;збереження даних з перемикачів у пам'яті

pushdpl

;збереження мол. частини DPTR

pushdph

;збереження ст. частини DPTR

movdptr,#IND

;завантаження адреси лінійки світодіодів

movx@dptr,a

;візуалізація даних з перемикачів

popdph

;відновлення ст. частини DPTR

popdpl

;відновлення мол. частини DPTR

incdptr

;збільшення адреси пам'яті для запису даних

incr3

;збільшення лічильника

CJNEr3,#10, m1

;повторення циклу 10 разів

loop:

jmploop

;кінець програми (нескінченний цикл)

Рисунок 6.5 - Алгоритм програми 6

7. Операції зі стеком

Текст програми:

cseg

; директива початку сегмента коду

org 2000h

; початкова адреса програми

PUSH PSW

; збереження в стеці PSW

PUSH ACC

; збереження в стеці акумулятора

PUSH B

; збереження в стеці B

PUSH DPL

; збереження в стеці DPTR

PUSH DPH

MOV PSW, #00H

; вибір Банку РЗП 0

POP DPH

; відновлення DPTR

POP DPL

POP B

; відновлення B

POP ACC

; відновлення акумулятора

POP PSW

; відновлення PSW

8. Використання арифметичних операцій. Скласти два двійкових багатобайтних числа. Обоє доданків розташовані в РПД починаючи з молодшого байта. Початкова адреса доданків в R0 й R1. Формат що складають (довжина в байтах) заданий в R2. Алгоритм програми представления на рисунку 6.6

Текст програми:

cseg

org 2000h

mov DPTR, #0FFF1h

;для виводу на світодіоди

loop:

mov a,@R0

;адреса першого доданка

addc a,@R1

;додавання

mov @R0,A

; збереження суми частин

movx @DPTR,A

;відображення суми

inc R0

;наступні байти доданків

inc R1

DJNZ R2,loop

;формат доданків заданий в R2

Рисунок 6.6 - Алгоритм програми 8

9. Програма виконує множення цілого двійкового числа довільного формату на константу 157. Вихідне число зберігається в РПД, адреса його молодшого байта завантажений у регістр R0. Формат числа (довжина в байтах) утримується в регістрі R1. Алгоритм програми представления на рисунку 6.7

10. Рисунок 6.7 - Алгоритм програми 9

Текст програми:

cseg

;сегмент коду

org 2000h

;початкова адреса програми

mov DPTR,#0FFF1h

;завантаження адреси лінійки світодіодів

mov A,#0

;обнуління акумулятора

loop:

add A,@R0

;завантаження множеного

mov B,#157

;завантаження множника

mul AB

;операція множення

mov @R0,A

;запис мол. байта

movx @DPTR,A

;візуалізація мол. байта на світодіодах

call 0220h

;затримка 1 сек.

inc R0

;збільшення адреси

mov A,B

;пересилання ст. байта результату в А

movx @DPTR,A

;візуалізація ст. байта на світодіодах

call 0220h

;затримка 1 сек.

xch @R0,A

;формування чергового байта

DJNZ R1,loop

;зациклення, якщо не всі байти помножені

11. Програма виконує перетворення двійкового числа, яке міститься в акумуляторі в BCD-код.

Текст програми:

cseg

;сегмент коду

org 2000h

;початкова адреса програми

MOV A, R5

;пересилання операнда в Асс

MOV B, #100

;дільник 100 для обчислення сотень у числі

DIV AB

;Асс містить число сотень (ст. тетраду)

MOV R6, A

;пересилання числа сотень в R6

MOV A, B

;пересилання залишку вихідного числа в Асс

MOV B, #10

;дільник 10 для обчислення числа десятків у числі

DIV AB

;число десятків утримується в Ас, число одиниць - в B

SWAP A

;розміщення числа десятків у старшу тетраду Асс

ADD A, B

;розміщення числа одиниць у молодшій тетраді Асс

MOV R5, A

;збереження результату в R5

12. Програма повинна використати логічні операції (і, або, не), уважати стан перемикачів і виконати над ним наступні дії (((not a)and25)or20) xor ((not a)and25), результат візуалізувати на лінійці світодіодів.

Текст програми:

Button equ 0fff2h

;button - адресі перемикачів

Diod equ 0fff1h

;diod відповідає адресі світодіодів

cseg

;директива початку сегмента коду

movdptr,#button

;завантаження в dptr адреси перемикачів

movxa,@dptr

;збереження стану перемикачів в А

clpa

;інвертування А

movr0,#25

;завантаження 25 в r0

anla,r0

;and акумулятора й умісту регістра r0

movr0,a

;збереження результату в r0

movr1,#20

;завантаження в r1 значення 20

orla,r1

;or акумулятора й r1

xrla,r0

;xor акумулятора й умісту r0

movdptr,#diod

;завантаження в dptr адреси світодіодів

movx @dptr,a

;відображення на лінійці світодіодів

;кінцевого значення

13. Установити в одиничний стан 1, 2, 4, 6, 7 біти порту А стенда УУМС-2

Текст програми:

port equ0fffch

;port адреса порту А

regcon equ0ffffh

;regcon адреса регістра керування

cseg

;директива початку сегмента коду

mov a,#10010000b

;порт А - вивід, У и С - уведення

movdptr,#regcon

;завантаження адреси регістра керування

movx @dptr,a

;настроювання ППИ

mov dptr,#port

;завдання адреси порту А

mov a,#11010110b

;установлюємо відповідні біти

14. Записати "0" до 0,1, 4, 5, 7 бітів порту А стенда УУМС-2

Текст програми:

port equ 0fffch

;port адреса порту А

port equ 0fffdh

;port

regcon equ 0ffffh

;regcon адреса регістра керування

cseg

;директива початку сегмента коду

mov a,#10010000b

;порт А - вивід, У и С - уведення

movdptr,#regcon

;завантаження адреси регістра керування

movx @dptr,a

;настроювання ППИ

movdptr,#port

;завантаження адреси порту В

movA,@dptr

;уведення інформації через порт В

mov r1,#01001100b

;вказівка бітів для скидання

anla,r1

;скидання зазначених бітів

movx@dptr,#port

;завдання адреси порту А

movx@dptr,a

;вивід інформації через порт А

15. Проінвертувати інформацію з порту В у відповідні одиничні біти акумулятора стенда УУМС-2

Текст програми:

port equ 0fffdh

;port

regcon equ 0ffffh

;regcon адреса регістра керування

cseg

;директива початку сегмента коду

mov a,#10010000b

;порт А - вивід, У и С - уведення

movdptr,#regcon

;завантаження адреси регістра керування

movx @dptr,a

;настроювання ППИ

movdptr,#port

;завантаження адреси порту В

movA,@dptr

;уведення інформації через порт В

movr0,a

;зберігаємо уведене значення

mova,#01010011b

;слово відповідно до якого

;буде зроблена інверсія

xrla,r0

;інверсія значення порту по Асс

movx@dptr,#port

;завдання адреси порту А

movx@dptr,a

;вивід інформації через порт А

15. Прочитати стан перемикачів, зберегти в А, проінвертувати 0, 3, 6, 7 біти акумулятора й видати на лінійку світодіодів.

Текст програми:

Delay equ 0220h

Delay - адреса затримки 1 сек.

Button equ 0fff2h

button відповідає адресі перемикачів

ldiodequ 0fff1h

ldood відповідає адресі світодіодів

cseg

директива повідомляє про початок сегмента коду

callDelay

затримки 2із для можливості установки

callDelay

потрібного значення на перемикачах

movdptr,#button

завантаження в dptr адреси перемикачів

movxa,@dptr

збереження стану перемикачів в А

xrl a,#11001001

інвертування зазначених бітів А

movdptr,#ldiod

завантаження в dptr адреси світодіодів

movx @dptr,a

відображення на лінійці світодіодів

кінцевого значення

16. Проінвертувати 1, 2, 4, 6, 7 біти порту В, і видати отримане слово на порт А стенда УУМС-2Текст програми:

Текст програми:

port equ0fffch

;port адреса порту А

port equ 0fffdh

;port адреса порту В

regcon equ0ffffh

;regcon адреса регістра керування

cseg

;директива початку сегмента коду

mov a,#10010000b

;порт А - вивід, У и С - уведення

movdptr,#regcon

;запис в regcon керуючої інформації

movx @dptr,a

;настроювання ППИ

movdptr,#port

;завантаження адреси порту В (прийом)

movxa,@dptr

;зчитуємо значення з порту В

xrla,#01101011b

;інвертуємо зазначені біти

mov dptr,#port

;завдання адреси порту А

movx @dptr,a

;виводимо на порт А значення з

;проінвертованими бітами

17. Програма видає вміст акумулятора в послідовному коді через зазначену лінію порту, залишаючи без зміни інші біти порту. Передача виробляється з молодшого біта.

Текст програми:

cseg

;сегмент коду

org 2000h

;початкова адреса програми

MOV R2, #8

;лічильник біт => R2

MET:

RRC A

;зрушення Асс через прапор З

MOV P1.0, C

;передача біта в Порт Р1

NOP

;виклик затримки

DJNZ R2, MET

;зменшення лічильника й повтор

18. Програма організує послідовну передачу даних акумулятора на зазначений вивід порту в манчестерському коді. Біт передається двома інтервалами: перший - інверсія, другий - пряме значення біта.

Текст програми:

cseg

;сегмент коду

org 2000h

;початкова адреса програми

mov R0,#8

;лічильник

loop:

rrc a

;зсув А вправо через прапор переносу

cpl c

;інвертування біта

mov P2.0,c

;передача інверсного значення біта

cpl c

;відновлення прямого значення біта

call 0230h

;затримка для вирівнювання тривалості інтервалів

mov P2.0,c

;передача прямого значення біта

djnz R0,loop

;цикл

ІНДИВІДУАЛЬНІ ПРОЦЕДУРИ

1. Процедура відображення уведеної з перемикачів інформації на семисегментном індикаторі в шестнадцатеричном коді.

Уведення й відображення значень перемикачів здійснюється за допомогою регістра DPTR по адресах відповідно 0FFF2h й 0FFF1h.

Візуалізацію здійснює процедура visual, що послідовно виділяє те молодшу, те старшу частину слова для конвертування 4 біт двійкової системи вирахування в код семисегментного індикатора, відповідно до таблиці символів get_num.

Відповідно до алгоритму роботи програми варто написати код програми.

Текст програми:

cseg

org 2000h

jmp main

main:

loop:

mov DPTR,#0FFF2h

;прийняття значень перемикачів

movx A,@DPTR

mov DPTR,#0FFF7h

;завдання нач. адресі СС індикатора для процедури візуалізації

call visual

;виклик процедури візуалізації

call 0203h

;затримка для фіксації значення

sjmp loop

;цикл сканування перемикачів

visual:

mov R0,A

;в R0 зберігається тимчасове значення аккум.

anl A,#0Fh

;виділення мол. 4 біт

call get_num

;конвертування в СС-код

movx @DPTR,A

;вивід

inc DPTR

;наступна цифра

mov A,R0

;перезапис значення

swap A

; виділення ст. 4 біт

anl A#0Fh

call get_num

;конвертування в СС-код

movx @DPTR,A

;вивід

ret

get_num:inc A

;функція одержання семисегметного коду

movx A,@A+PC

;таблиця кодів

db 00111111b

;0

db 00000111b

;1

db 01011011b

;2

db 01001111b

;3

db 01100110b

;4

db 01101101b

;5

db 01111101b

;6

db 00000111b

;7

db 01111111b

;8

db 01101111b

;9

db 01110111b

;A

db 01111101b

;B

db 00111001b

;C

db 01011110b

;D

db 01111001b

;E

db 01110001b

;F

ret

2. Функція уведення числа й паралельного його відображення з можливістю підтвердження уведення.

Уведення й відображення значень перемикачів здійснюється за допомогою регістра DPTR по адресах відповідно 0FFF2h й 0FFF1h.

Для фіксації значень у кожному з доступних регістрів використається зовнішнє переривання INT0(перехід з 1 в 0), в оброблювачі переривання якого й записаний код збереження значення.

Алгоритм роботи програми:

Текст програми:

cseg

org 2000h

jmp main

org 2003h

;початок переривання по INT0

mov DPTR,#0fff2h

;опитування перемикачів

movx A,@DPTR

mov DPTR, #0fff1h

;вивід значень перемикачів

movx @DPTR,A

call 0230h

;затримка 50млС

mov IE,#0

;для закінчення програми

reti

main:

mov IE, #10000001b

;дозволу переривання

loop:

mov DPTR,#0fff2h

;опитування перемикачів

movx A,@DPTR

mov DPTR, #0fff1h

;вивід значень перемикачів

movx @DPTR,A

sjmp loop

;нескінченний цикл сканування до переривання

3. Просуммировать два уведених значення й суму записати в DPTR.

Уведення й відображення значень перемикачів здійснюється за допомогою регістра DPTR по адресах відповідно 0FFF2h й 0FFF1h.

Текст програми:

cseg

org 2000h

jmp main

org 2003h

clr EX0

jmp INT_0

main:

mov IE, #10000001b

;дозволу переривання

mov R7,#0

;лічильник операндов

setb IT1

loop:

mov DPTR,#0fff2h

;опитування перемикачів

movx A,@DPTR

mov DPTR, #0fff1h

;вивід значень перемикачів

movx @DPTR,A

sjmp loop

;нескінченний цикл сканування до переривання

INT_0:

clr IT1

;змінити фронт спрацьовування переривання

mov DPTR,#0fff2h

;опитування перемикачів

movx A,@DPTR

mov DPTR, #0fff1h

;вивід значень перемикачів

movx @DPTR,A

mov R6,A

;запам'ятовування поточних значень перемикачів

mov A,R7

;для перевірки на кількість уведених операндов

jz nul

;уведено два операнда?

mov A,R6

;да

mov R1,A

;додавання операндов

add A,R0

mov R0,A

;для виводу за допомогою процедури SSI_W

call 0940

;вивід

mov DPL,A

;запис значення в DPTR

jmp exit

;кінець програми

nul:

mov A,R6

;немає

mov R0,A

;збереження першого операнда

inc R7

;наступний буде вводитися другий операнд

setb EX0

;дозволу переривання

jmp ex

;вихід із процедури уведення

exit:

mov R7,#0

;для закінчення програми

ex:

reti

4. Секундомір. Програма використає апаратні засоби відліку тимчасових інтервалів - таймер 0 (200Bh). Час виводиться на ССИ за допомогою стандартної процедури 0940 (для цього потрібне значення потрібно помістити в регістр R0). Програма виконується в зацикленому стані.

Алгоритм роботи програми:

Текст програми:

cseg

org 2000h

jmp main

;перехід до виконання головної програми

org 200Bh

jmp timer

;перехід до виконання програми обробки переривання

main:

mov TMOD,#01h

;включаємо 16 - розрядний таймер

mov IE,#10000010b

;дозволяємо переривання від таймера

mov TL0,#LOW(555)

;завантаження значення для відліку - 50мС

mov TH0,#HIGH(555)

mov R0,#1

;початку з 1 секунди

call 0940h

;візуалізація секунд

setb TR0

;старт таймера

loop:

sjmp loop

;нескінченний цикл

timer:

clr TR0

;зупинка таймера

inc R7

;20*50мС=1С

cjne R7,#20,out

;пройшла 1С?

mov R7,#0

;так - обнуління лічильника циклів по 50мС

inc R0

;пройшла 1С - инкремент показника секунд

cjne R0,#60,out1

;пройшла 1 хвилина?

mov R0,#1

;так - секунди = 1

out1:

call 0940h

;показати секунди

out:

mov TL0,#LOW(555)

;завантаження значення для відліку - 50мС

mov TH0,#HIGH(555)

setb TR0

;старт таймера

reti

;кінець підпрограми обробки переривання

5. Стан перемикача INT0. Завдяки цій програмі можна обробляти переривання від INT0 без використання переходів на програма-оброблювач переривань і сканувати стан цього виводу порту P3 як скануються перемикачі. Принцип програми складається зі сканування всього порту й виділення із цього значення потрібного біта(другого). У судячи із цього біта визначається сигнал на INT0. Програма циклічно сканує порт і відповідно до зазначеного біта видає значення на лінійку светодиодов. Два значення - усі запалені - INT0=1; Половина запалена - INT0=0

Текст програми:

cseg

org 2000h

jmp main

;перехід до виконання головної програми

org 2003h

jmp ent

;перехід до виконання програми обробки переривання

main:

mov IE,#10000001b

;дозволяємо переривання від INT0

loop:

mov A,P3

;сканування значень на порту P3 (INT0 - P3.2)

jb Acc.2,true

;INT0=1?

jmp false

;немає

true:

mov DPTR,#0FFF1h

;так - візуалізація

mov A,#255

;запалити всі светодиоды - INT0=1

movx @DPTR,A

jmp loop

;нескінченне сканування

false:

mov DPTR,#0FFF1h

;немає - візуалізація

mov A,#11110000b

;запалити половину светодиодов - INT0=0

movx @DPTR,A

jmp loop

;нескінченне сканування

ent:

clr EX0

;прийшов сигнал INT0

mov DPTR,#0FFF2h

;вивід значень перемикачів на лінійку светодиодов

movx A,@DPTR

mov DPTR,#0FFF1h

movx @DPTR,A

call 0230h

;затримка для фіксації візуалізації

setb EX0

;дозвіл переривання від INT0

reti

;кінець підпрограми обробки переривання

7 ІНДИВІДУАЛЬНЕ ЗАВДАННЯ

Постановка завдання

Темою індивідуального завдання є розроблення пристрою для регістрації подій. Для регістрації подій треба використати 8 дискретних датчиків які скануються з інтервалом 50 мС. По перериванню таймера 1 виконується підпрограма сканування датчиків та запису інформації про подію в зовнішню пам`ять (кількість подій - 8). При записі інформації про подію добавляється і час події, який відраховує таймер 0.

Розробка схеми алгоритму програми

Першим блоком програми повинен бути блок завантаження потрібних значень до регістрів таймерів та обнуління регістрів, які потрібні для зберігання інформацій про час, різні лічильники та для ін.

Запуск таймерів (0 та 1) важлива функція, яка дозволяє почати відлік часу та відлік інтервалів для сканування датчиків.

Щоб забезпечити паралельне реагування на події від таймерів та виводу INT0, який дає змогу користувачу проглянути записи про події в резидентній пам'яті програм, треба зациклити основну програму й надати змогу підпрограмам обробки переривань виконуватися після приходу керуючого сигналу.

Отже, для кожного пристрою - таймерів 0 та 1, вивід INT0, треба написати свою підпрограму. На схемі алгоритму такі підпрограми зображені в блоках 8, 10 та 11.

Схема алгоритма представлена на ПН5.091504.15.04.00Д

Розробка схеми електричної принципової

Так як даний пристрій базується на УНМС-2, то доцільним було б розробити схему електричну принципову керуючись готовою схемою УНМС-2, тобто відібрати потрібні елементи, а інші не враховувати.

Виходячи із завдання можна припустити, що центральним елементом схеми буде МК Atmel AT89S8252, який буде здійснювати управління над усіма іншими пристроями. Також в схеми слід включити і елементи індикації такі як семисегментний індикатор, рідкокристалічний дисплей на лінійку світо діодів. Судячи з цього треба додати до схеми буферні елементи, які б розвантажили порти МК. Схема представлена на креслені ПН5.091504.15.04.Е3

Програма на мові assembler

cseg

org 2000h

jmp main

;початок головной програми

org 2003h

jmp select

;перехід по перериванню від INT0

org 200Bh

jmp timer

;перехід по перериванню від таймера 0

org 201bh

jmp scan

;перехід по перериванню від таймера 1

main:

mov TMOD,#17

;конфігурування таймерів як 16 розрядних

mov IE,#138

;дозвіл перериванням

setb EX0

;дозвіл переривання від INT0

setb PT0

;встановлення найвищого пріоритета таймеру 0

mov TL0,#LOW(555)

;завантаження у таймерт значення 50 мС

mov TH0,#HIGH(555)

mov TL1,#LOW(555)

mov TH1,#HIGH(555)

mov R0,#0

;обнулення всіх регістрів

mov R1,#0

mov R2,#0

mov R3,#0

mov R7,#0

call tvis

;визов процедури візуалізації часу

setb TR0

;запуск таймерів

setb TR1

loop:

sjmp loop

;бескінечний цикл

timer:

clr TR0

;початок процедури обробки перивання від таймеру 0

inc R7

;лічильник переривань

cjne R7,#180,out

;переривань було 180?

mov R7,#0

:так обнулення лікильника переривань

inc R0

;зафіксувати 10 сек. У регістрі секунд

cjne R0,#6,out

;перевірка на те, що пройшла хвилина чи ні

mov R0,#1

;пройшла - 60 сек = 1 сек

inc R1

;фіксування 1 хв. У регістрі хвилин

cjne R1,#60,out

;пройшла година?

mov R1,#1

Так

inc R2

;фіксація часу

cjne R2,#24,out

;пройшов день

mov R2,#0

inc R3

cjne R3,#32,out

;пройшов місяць

mov R3,#1

out:

call tvis

;візуалізація часу кожні 10 сек.

mov TL0,#LOW(555)

mov TH0,#HIGH(555)

setb TR0

reti

scan:

clr TR1

;програмне сканування датчиків

mov DPTR,#0FFF2h

;адреса датчиків

movx A,@DPTR

;зняти значення датчиків

jz not_al

;хоча б один датчик спрацював? Якщо ні- у кінець

jnb Acc.0,n1

;так - побітна перевірка слова від датчиків

mov R7,#1

;перевірка 1 датчика і якщо він спрацював, то записати

call alarm

;інформацію про подвю

n1:

jnb Acc.1,n2

;2-ий

mov R7,#2

call alarm

n2:

jnb Acc.2,n3

;3-ій

mov R7,#2

call alarm

n3:

jnb Acc.3,n4

;4-ий

mov R7,#3

call alarm

n4:

jnb Acc.4,n5

;5-ий

mov R7,#4

call alarm

n5:

jnb Acc.5,n6

;6-ий

mov R7,#5

call alarm

n6:

jnb Acc.6,n7

;7-ий

mov R7,#6

call alarm

n7:

jnb Acc.7,not_al

;8-и1

mov R7,#7

call alarm

not_al:

mov TL1,#LOW(555)

mov TH1,#HIGH(555)

setb TR1

reti

select:

clr EX0

;підпрограма перегляду записаних подій

clr TR1

:зупинка сканування датчиків

li:

mov DPTR,#0FFF2h

;сканування перемикачів для уводу номера події

movx A,@DPTR

anl A,#7

;маскування не поьрібних розрядів

inc A

;для правильної візуалізації

call get_num

;переведення 2 значення да коду ССІ

mov DPTR,#0FFF7h

;відображення введеної цифри

movx @DPTR,A

call view

;виклик процедури, яка запише до DPTR адресу плдії

jnb P3.2,li

;зациклювання до підтвердження ввіоду

movx A,@DPTR

;відображення інформації про подійю відновідно до

mov DPTR,#0FFF7h

; введеної цифри - номера події

call get_num

movx @DPTR,A

setb EX0

setb TR1

reti

view:

mov B,#20h

;процедура запису до DPTR адреси події

mul AB

;так як запис має розмір 20h біт

mov DPTR,#4000h

;перший адрес першої події

mov R5,A

;мл

mov R6,B

;ст

mov A,DPL

;додаймо до DPTR результат множення і отримаємо

add A,R5

;адрес, за яким записана потрібна користувачу подія

mov DPL,A

mov A,DPH

add A,R6

mov DPH,A

ret

alarm:

inc R4

;підрограма запису події у РПД

cjne R4,#9,norm

mov R4,#0

;виклик процедури виводу повідомлення об помилки - переповнення

norm:

mov A,R4

mov B,#20h

mul AB

mov DPTR,#4000h

mov R5,A

;мл

mov R6,B

;ст

mov A,DPL

add A,R5

mov DPL,A

mov A,DPH

add A,R6

mov DPH,A

mov A,R7

mov B,R0

mov R0,#18h

rec:

movx @DPTR,A

inc DPTR

inc DPTR

inc DPTR

inc DPTR

inc DPTR

inc DPTR

inc DPTR

inc DPTR

mov A,@R0

dec R0

dec R0

dec R0

dec R0

dec R0

dec R0

dec R0

nop

djnz R0,rec

mov A,B

movx @DPTR,A

ret

tvis:

mov A,R0

mov DPTR,#0FFF1h

movx @DPTR,A

mov A,R1

anl A,#0Fh

cjne A,#9,prov

nplus:

call get_num

mov DPTR,#0FFF7h

movx @DPTR,A

jmp st

prov:

jnc plus

jmp nplus

plus:

call get_num

mov DPTR,#0FFF7h

movx @DPTR,A

mov A,R1

swap A

anl A,#0Fh

inc A

jmp e1

st:

mov A,R1

swap A

anl A,#0Fh

e:

call get_num

inc DPTR

movx @DPTR,A

mov A,R2

anl A,#0Fh

cjne A,#9,prov1

nplus1:

call get_num

mov DPTR,#0FFF9h

movx @DPTR,A

jmp st1

prov1:

jnc plus1

jmp nplus1

plus1:

call get_num

mov DPTR,#0FFF9h

movx @DPTR,A

mov A,R1

swap A

anl A,#0Fh

inc A

jmp e1

st1:

mov A,R1

swap A

anl A,#0Fh

e1:

call get_num

inc DPTR

movx @DPTR,A

ret

get_num:

inc A

movc A,@A+PC

ret

db 00111111b ;0

db 00000110b ;1

db 01011011b ;2

db 01001111b ;3

db 01100110b ;4

db 01101101b ;5

db 01111101b ;6

db 00000111b ;7

db 01111111b ;8

db 01101111b ;9

db 00111111b ;0

db 00000110b ;1

db 01011011b ;2

db 01001111b ;3

db 01100110b ;4

db 01101101b ;5

ВИСНОВКИ

В результаті виконання практики я набув практичні навички програмування і вирішення різноманітних задач. Також в ході практики були виконані всі вимоги технічного завдання і звіт включає в себе такі розділи, як - охорона праці, структура, призначення та взаємодія програмного забезпечення УНМС-2, технічне описання стенду УНМС-2, програми типових процедур, тестові програми та індивідуальне завдання.

В результаті проходження практики було вивчено:

- архітектуру сучасних мікроконтролерів;

- методи тактування, режими зниженого енергоспоживання й скидання типових мікроконтролерів ;

- роботу системи переривань мікроконтролерів;

- організацію та методи програмування портів уводу-виводу й таймерів;

- призначення та функціонування компаратора;

- організацію, режими роботи та функціонування аналого-цифрового перетворювача;

- організацію, режими роботи, функціонування та методи програмування сучасних послідовних периферійних інтерфейсів;

- системи команд мови програмування Аssembleг для АVR та МСS-51сумісних мікроконтролерів;

- правила написання програм на мові програмування Аssembler;- технічні характеристики сучасної цифрової елементної;

- склад лабораторного стенда на основі УНМС-2;

- структуру, технічні характеристики, конструкцію та призначення органів керування УНМС-2;

- склад та функціональне призначення програмного забезпечення

ПЕРЕЛІК ПОСИЛАНЬ

1. Бродін В.Б., Калінін А.В. Системи на мікроконтролерах і БІС програмувальної логіки. - М.: Видавництво ЭКОМ, 2002. - 400 с.

2. Евстифеев А. В. Мікроконтролери AVR сімейств Tiny й Mega фірми "ATMEL". - М.: Видавничий будинок "Додека-XXI", 2004. - 560 з.

3. Самофалів К.Г. й ін. Мікропроцесори: Довідник - К.: Техніка, 1986. - 278с.

4. Микроконтролерні системи: структури й практичне застосування. Частина 1. / В.Г. Джулгаков й ін. - Учеб. посібник. - Харків: Нац. аерокосмічний ун-т "Харьк. авиац. ин-т", 2003. - 126 с.

С.В. Якубовский, Л.И. Ниссельсон Цифрові й аналогові ІМС 1996-530c

5. www.atmel.ru

6. Житецький В.Ц., Джиги рей В.С., Мельников О.В. Основи охорони праці

7. Житецький В.Ц. Охорона праці користувачів комп'ютерів

8. www.mikrokontrolers.ru

9. www.chipinfo.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.