Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Порядок виконання роботи. 1. Написати програму за завданням викладача.



1. Написати програму за завданням викладача.

2. Ввести програму в середовищі mVision2.

3. Пройти програму в покроковому режимі, перевіряючи правильність виконання програми.

 

Таблиця 3.1 Логічні команди
  Мнемоніка Число циклів Код Прапорці C A F R R O P Y C 0 S S V Опис
ANL A,Rn 58 5F - - - - - - + A<-A AND Rn, n=0-7
ANL A,direct - - - - - - + A<-A AND (direct)
ANL A,@Ri 56-57 - - - - - - + A<-A AND (Ri), i=0-l
ANL A, # data - - - - - - + A<-A AND data
ANL Direct,A - - - - - - - (direct)<-(direct) AND A
ANL Direct, # data - - – - - - - (direct)<-(direct) AND data
ORL A,Rn 48 4F - - - - - - + A<-A OR Rn, n-0-7
ORL A,direct - - - - - - + A<-A OR (direct)
ORL A,@Ri 46-47 - - - - - - + A<-A OR (Ri), i=0-l
ORL A, # data - - - - - - + A<-A OR data
ORL Direct,A - - - - - - - (direct)<-(direct) OR A
ORL Direct, # data - - - - - - - (direct)<-(direct) OR data
XRL A,Rn 68-6F - - - - - - + A<-A XOR Rn, n=0-7
XRL A,direct - - - - - - + A<-A XOR (direct)
XRL A,@Ri 66—67 - - - - - - + A<-A XOR (Ri), i=0-l
XRL A, # data - - - - - - + A<-A XOR data
XRL Direct,A - - - - - - - (direct) <-(direct) XOR A
XRL Direct, # data - - - - - - - (direct) <-(direct) XOR data
CLR A Е4 - - - - - - + A<-0
CPL A F4 - - - - - - - A<-NOT A
RL A - - - - - - - А7<-А6<-…<-А0<-А7
RLC A + - - - - - + CY<-A7<-A6<-... <-А0<-CY
RR A - - - - - - - A0<-A1<- ...<-A7<-A0
RRC A + - - - - - + CY<-A0<-A1<-...<-A7<-CY
SWAP A З4 - - - - - - - A4-7<-->A0-3

 

Таблиця 3.2 Команди передачі керування
Мнемоніка Число циклів Код Прапорці С A F R R О P Y З 0 S S V Опис
ACALL addrll ааа10001 - - - - - - - +(SP)PC, РС0-10<-addr11
LCALL addr16 - - - - - - - +(SP) PC, PC<-addrl6
RET - - - - - - - PC<-(SP)-
RETI - - - - - - - PC<-(SP)-, кінець переривання
AJMP addrll aaa0000l - - - - - - - PC0-10<-addrll
LJMP addrl6 - - - - - - - PC <-addr16
SJMP rel - - - - - - - PC<-PC+rel
JMP @A+DPTR - - - - - - - PC<-DPTR+A
JZ rel - - - - - - - Якщо А=0, то PC<-PC+rel
JNZ rel - - - - - - - Якщо A!=0, то PC<-PC+rel
CJNE A, direct, rel У5 + - - - - - - Якщо А!=(direct), те PC<-PC + rel
CJNE A, #data, rel У4 + - - - - - - Якщо A!=data, те PC <-PC+rel
CJNE Rn, #data, rel B8—BF + - - - - - - Якщо Rn!=data, те PC<-PC+rel, n=0-7
CJNE @Ri, #data, id У6 В7 + - - - - - - Якщо (Ri)!=data, те РС<-PC+rei, i=0-l
DJNZ Rn, rel 8—DF - - - - - - + Rn<-Rn-1. Якщо R?0, то PC<-PC+rel, n=0-7
DJNZ direct, rel D5 - - - - - - + (direct) <- (direct) — 1. Якщо (direct)!=0, то РС<-PC+rel

 

Зміст звіту

1. Найменування та мета роботи.

2. Текст програми з коментарями.

3.4 Контрольні запитання

1. Внутрішня структура контролера, розподіл пам'яті та склад регістрів.

2. Логічні команди (знання дії будь-якої команди).

3. Команди передачі керування (знання дії будь-якої команди).

4. Директиви Асемблера для виділення пам'яті під змінні та масиви. Принципи роботи зі змінними та масивами.

5. Принципи організації циклічних операцій.


ЛАБОРАТОРНА РОБОТА № 4

ПРОГРАМУВАННЯ ЗОВНІШНІХ ПОРТІВ КОНТРОЛЕРА І ЗАСОБІВ РЕАЛЬНОГО ЧАСУ.

 

Мета роботи.Вивчити принципи програмування зовнішніх портів контролера і засобів реального часу контролера Intel iMCS-8051 (К1816ВЕ51).

 

Теоретичні відомості

Підсистема вводу/виводу (ВВ) мікроконтролера ВЕ51 розміщується безпосередньо на кристалі. Для ВВ даних і керування процесом їхньої передачі до складу МК уведений ряд портів даних і регістрів управління/стану, сукупність яких утворює набір спеціальних регістрів. Фізична система ВВ мікроконтролера ВЕ51 складається з чотирьох двонаправлених 8-розрядних портів Р0—РЗ. Усі порти ВВ відображені в просторі внутрішньої пам'яті DSEG по адресах 80Н, 90Н, 0А0Н, 0В0Н и нічим не відрізняються від звичайних комірок пам'яті. Відмова від ізольованого простору ВВ, яке використовується в архітектурі процесора 8048, дозволяє збільшити обчислювальну ефективність МС при інтенсивному використанні ВВ і привела до більш регулярної структури набору команд ВЕ51.

Будь-яка команда з операндом із внутрішньої пам'яті може бути застосована до вмісту портів Р0—РЗ. Крім того, порти Р0—РЗ сполучені з бітовим простором BSEG, що забезпечує доступ до окремих його розрядів незалежно від інших. Порти Р0—РЗ займають адреси BSEG: 80H-87H, 90Н-97Н, 0А0Н — 0А7Н и 0В0Н-0В7Н відповідно. Розширення простору ВВ може бути виконане за рахунок простору XSEG чи іншими засобами за допомогою самих портів Р0—РЗ і SBUF. При звертанні до зовнішньої пам'яті програм чи даних порти Р0, Р2 виконують функції системних шин AD і АВ відповідно. Молодший байт адреси і дані передаються через Р0 у мультиплексному режимі: спочатку виводиться адреса, а потім для передачі даних використовується порт. Старший байт адреси формується на Р2. Лінії порту РЗ реалізують управління циклами обміну й інші спеціальні функції апаратного рівня:

Таблиця 4.1 Лінії порту Р3

РЗ.0 Rx -Вхід приймача послідовного каналу
РЗ.1 Тх D -Вихід передавача послідовного каналу
РЗ.2 INTO -Вхід запиту на переривання 0
РЗ.3 INT1 -Вхід запиту на переривання 1
РЗ.4 ТЕ -Зовнішній вхід таймера/лічильника 0
РЗ.5 Т1 -Зовнішній вхід таймера/лічильника 1
РЗ.6 WR -Строб запису в XSEG
РЗ.7 RD -Строб читання XSEG

 

У випадку МК 8052 дві лінії Р1 також виконують спеціальну функцію:

Pl.0 T2 -Зовнішній вхід таймера/лічильника 2

Pl.1 T2EX -Вхід керування автоматичним перезавантаженням таймера/лічильника 2

 

Буферні каскади порту РЗ побудовані так, що для виконання спеціальної операції відповідний розряд вихідного регістра РЗ повинен бути встановлений у 1. Інакше на виході буде 0. Порти Р1—РЗ мають вбудоване навантаження, тоді як для порту Р0, виконаного за схемою з відкритим колектором, потрібно зовнішнє навантаження. Кожен вихід портів Р0—РЗ може бути використаний як вихідний незалежно від інших. Для переходу якого-небудь виходу в режим входу у відповідний розряд вихідного регістра повинна бути записана 1. При скиданні МК стан усіх портів установлюється рівним 0FFH. Усі 32 виходи портів Р0—РЗ тестуються індивідуально за допомогою умовних команд розгалуження:

JB bit, rel ;Якщо BSEG (bit) =1, то :SJMP rel

JNB bit, rel ;Якщо BSEG (bit) =0, то :SJMP rel

JBC bit, rel ;Якщо BSEG (bit) = 1, то ;SJMP rel і BSEG (bit)=1. Остання команда після тестування завжди на виході порту, як і в будь-якому іншому розряді з простору BSEG, установлює 0.

Робота таймерів/лічильників. Кожний з таймерів/лічильників ТЛ0— ТЛ 1 (ТЛ 2) виконує функцію таймера (С/Т=0) чи лічильника (С/Т=1). Функція таймера полягає в рахунку синхроімпульсів, що повторюються з частотою OSC/12, функція лічильника - в рахунку числа переходів з 1 у 0 на виходах Т0, Т1 чи Т2. У цьому режимі відповідний вхід тестується протягом фази S5P2 кожного машинного циклу. При виявленні стану 1 в одному циклі й стану 0 у наступному за ним значення зв'язаного з входом лічильника збільшується на 1. У фазі S3P1 нового машинного циклу модифіковане значення відображається в регістровій парі. Так як процедура виявлення переходу триває два машинних цикли, то максимальна швидкість рахунку не повинна перевищувати OSC/24. Існує єдине обмеження, що накладається на часову послідовність вхідних імпульсів, що підлягають рахунку - кожен рівень (1 чи 0) повинен утримуватися незмінним принаймні протягом одного машинного циклу. У рамках обраної функції визначені чотири режими роботи для ТЛ 0, ТЛ 1 (М0, Ml) і три для ТЛ 2 (CP/RL2, RCLK, TCLK).

Режим 0 таймерів/лічильників ТЛ0. (мал. 4.1,а). У даному режимі рахунковий регістр має довжину 13 біт (5 молодших розрядів TLj і THj, j=0-l), три старших розряди TLj ігноруються. Сигнал переповнення лічильника фіксується прапорцем TFj. Рахунок дозволяється при TRj=l і GATE = 0 або TRj = 1 і INTj = 1. Установка GATE = 1 дає можливість таймеру вимірювати ширину імпульсів на вході INTj. Установка прапорця TRj не впливає на вміст THj, TLj.

Режим 1 подібний до режиму 0, за винятком того, що в ньому використовується повний 16-розрядний лічильник ТН, TL.

Режим 2 конфігурує 8-розрядний лічильник TLj з автозавантаженням умістом THj (мал. 4.1,б). Сигнал переповнення TLj не тільки встановлює прапорець TFj, але і перезавантажує TLj умістом THj.

 

       
 
Рис. 4.1. Робота таймерів/лічильників ТЛ0, ТЛ1: а—в режимі 0 и 1; б -в режимі 2; в—в режимі 3 (тільки ТЛ0)
   
  Рис. 4.2. Робота таймера/лічильника ТЛ2 в режимах захоплення (а) й автозавантаження (б)
 

 

 


 

 

Режим 3 для ТЛ 0 і ТЛ 1 здійснюється по-різному. У випадку ТЛ 0 два рахункових регістри TL0 і ТН0 розглядаються незалежно один від одного (рис. 4.1, в). Логіка управління роботою TL0 аналогічна режиму 1. Другий лічильник працює в режимі таймера, керованого прапорцем TR1. Сигнал переповнення фіксується прапорцем TF1. У випадку ТЛ 1 режим 3 зупиняє рахунок, подібно до того, як це було при TR1=0 в інших режимах. Використання режиму 3 дозволяє збільшити число лічильників МК BE51 до трьох, що може бути необхідно в деяких практичних випадках.

У МК 8052 мається ще один 16-розрядний лічильник ТЛ 2, що може працювати в одному з трьох основних режимів: захоплення (CP/PL2=1), автозавантаження (CP/RL2 = 0) і генератора швидкості (RCLK==1 чи TCLK=1). Залежно від стану прапорця EXEN2 визначені два варіанти організації режиму захоплення (рис. 4.2,а). При EXEN2 = 0 сигнал переповнення ТЛ 2 установлює прапорець переповнення TF2. Додатково до цього при EXEN2 =1 кожен перехід з 1 у 0 на вході Т2ЕХ викликає перезавантаження 16-розрядного регістра ТЛ 2 значенням, що зберігається в САР2, і установку прапорця EXF2. У режимі автозавантаження (рис.4. 2.б) кожне переповнення ТЛ 2, крім установки прапорця TF2 викликає перезавантаження СТ2 значенням із САР2.

Одночасно з цим при EXEN2=1 реалізується можливість перезавантаження ТЛ2 переходом з 1 у 0 на вході Т2ЕХ і установку прапорця EXF2. При RCLK=1 чи TCLK=1 пристрій працює в режимі генератора швидкості приймача чи передавача послідовного каналу зв'язку.

Таблиця 4.2 Керування режимом ТЛ0

TMOD.0 М0.0 Молодший біт поля керування режимом ТЛ0
TMOD.1 Ml.0 Старший біт поля керування режимом ТЛ0
    М0 Ml Режим М0 Ml Режим
   
   
TMOD.2 C/T0 Вибір функції таймера чи лічильника СТ0. При З/Т=0 вибирається функція таймера, у противному випадку лічильника
TMOD.3 GATE0 Прапорець керування роботою ТЛ0. При GATE = 1 робота дозволяється, якщо INT0=1 і TR0=1 (див. TCON). При GATE = 0 робота лічильника залежить тільки від стану TR0
TMOD.4 М0.1 Те саме, але для ТЛ1
TMOD.5 Ml.1 Те саме, але для ТЛ1
TMOD.6 З/Т1 Те саме, але для ТЛ1
TMOD.7 GATE1 Те саме, але для ТЛ1

 

 

Керування режимом роботи ТЛ 0 (таблиця 4.2), ТЛ 1 здійснює регістр TMOD (Timer/Counter Mode), що розташований за адресою 89Н. Регістр розбитий на два 4-розрядних підрегістри T0MOD і T1MOD, що відповідальні за керування ТЛ 0 і ТЛ 1 відповідно.

За керування ТЛ0, ТЛ1 також відповідає регістр TCON (Timer/Counter Control), розташований за адресою 88Н.

Таблиця 4.3 Регістр TCON

TCON.0 IT0 Керування типом входу INT0. При IТ0=0 програмується динамічний за зрізом тип входу, у противному випадок статичний
TCON.1 IE0 Прапорець запиту переривання INT0 при динамічному вході. При підтвердженні переривання скидається
TCON.2 IT1 Те саме, що і IT0, але для INT1
TCON.3 IE1 Те саме, що і IE0, але для INT1
TCON.4 TR0 Прапорець програмного запуску/зупинки ТЛ 0
TCON.5 TF0 Прапорець переповнення ТЛ 0, що викликає запит переривання. При підтвердженні переривання скидається
TCON.6 TR1 Те саме, що і TR0, але для ТЛ 1
TCON.7 TF1 Те саме, що і TF0, але для ТЛ 1

 

Молодша половина регістра використовується для керування входами запиту на переривання INT0 і INT1, старша половина - для керування ТЛ0 і ТЛ1. Для керування роботою ТЛ2 служить регістр T2CON (Timer/ Counter 2 Control), розташований за адресою 0С8Н.

Таблиця 4.4 Регістр T2CON

T2CON.0 CP/RL2 Прапорець захоплення/автозавантаження ТЛ 2. При CP/RL2 = 1 захоплення поточного стану ТЛ 2 здійснюється за зрізом Т2ЕХ, якщо EXEN2 = 1. При CP/RL2 = 0 дозволяється автозавантаження ТЛ 2, якщо він переповнений чи по зрізі Т2ЕХ, якщо EXEN2=1. Цей прапорець не береться до уваги при RCLK=1 чи TCLK=1, тобто коли ТЛ 2 працює як генератор швидкості
T2CON.1 С/Т2 Керування функцією таймера (С/Т2=0) чи лічильника (С/Т2=1)

Продовження таблиці 4.4

 

T2CON.2 TR2 Програмний запуск ТЛ 2 при TR2 = 1 і зупинка у противному випадку
T2CON.3 EXEN2 Прапорець дозволу динамічному за зрізом входу Т2ЕХ здійснювати захоплення /автозавантаження ТЛ 2, якщо він не працює в режимі генератора швидкості послідовного порту. Функція активується при EXEN2 =1
T2CON.4 TCLK При TCLK = 1 ТЛ 2 використовується передавачем послідовного каналу, що працює в режимі 1 чи 3, як генератор швидкості передачі. При TCLK = 0 генератором служить ТЛ 1
T2CON.5 RCLK Те саме, що і TCLK, але для приймача послідовного каналу
T2CON.6 EXF2 Прапорець виконання захоплення/автозавантаження, викликаного зміною стану на Т2ЕХ при EXEN2 = 1. При дозволеному перериванні викликає запит. Скидається тільки програмним способом
T2CON.7 TF2 Прапорець переповнення ТЛ 2. Також викликає запит на переривання. Функція установки придушується при TCLK = 1 чи RCLK = 1

Розглянемо приклад програмивикористання лічильника/таймера для синхронізації процесу в реальному часі. На входи Р0.0 і Р0.1 підходять зовнішні сигнали, а до виходів Р1.0 і Р1.1 підключені світлодіоднііндикатори. Потрібно кожні 50 мкс перевіряти стан входів і якщо:

- Р0.0 дорівнює «1», то включити індикатор на виході Р1.0, інакше виключити;

- Р0.1 дорівнює «1» виключити індикатор на виході Р1.1, інакше включити.

NAME TIMER

PROG SEGMENT CODE ; оголошення сегмента коду

STACK SEGMENT IDATA ; оголошення сегмента стека

RSEG STACK

DS 10H

CSEG AT 0

USING 0

JMP START

RSEG PROG

START:

MOV SP,#STACK-1 ; ініціалізація покажчика стека

MOV TMOD, #00000010B ; включення лічильника/таймера 0 у режим 2

MOV TH0, #205 ; занесення дільника в регістр автозавантаження

MOV TL0, #205 ; занесення дільника в рахунковий регістр

MOV TCON, #00010000B ; включення лічильника/таймера 0

LAB1:

JNB TF0, LAB1 ; чекання переповнення лічильника/таймера 0

CLR TF0 ; очищення прапорця переповнення ТЛ0

JNB 80H, LAB2 ; якщо Р0.0 = 0 перехід на LAB2

SETB 90H ; установка Р1.0 у «1»

SJMP LAB3 ; перехід на LAB3

LAB2:

CLR 90H ; установка Р1.0 у «0»

LAB3:

JB 81H, LAB4 ; Якщо Р0.1 = «1» перехід на LAB4

SETB 91H ; установка Р1.1 у «1»

SJMP LAB1 ; перехід на LAB1

LAB4:

CLR 91H ; установка Р1.0 у «0»

SJMP LAB1 ; перехід на LAB1

 

END

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.