Теоретичний матеріал до розрахунково-графічної роботи № 4.
Методичні вказівки до розв’язання завдань модуля «Мікропроцесорна техніка»
Виконання завдань №№ 1 ¸ 2 передбачає складання програм для МП–системи на основі 8–розрядного процесора К580ИК80А (в подальшому — скорочено МП К580), що включає, крім інших, схему паралельного периферійного інтерфейсу КР580ВВ55 для підключення зовнішніх пристроїв.
МП К580 призначений для роботи з пам’яттю (постійною і оперативною) із загальною ємністю до 64 Кбайт. Пам’ять має байтову структуру – можлива адресація в пам’яті будь-якого байта. Ширина вибірки з пам’яті – 1 байт. При зверненні до пам’яті використовуються 16-розрядні (двобайтні) адреси.
При створенні малорозрядних мікропроцесорів (в МП К580 слово має всього 8 розрядів) виникають труднощі з вибором структури і формату команд. Досягнення високої швидкодії МП полегшується, якщо формат команди співпадає з довжиною слова МП. Однак в короткому 8-розрядному слові неможливо розмістити всю командну інформацію, необхідну для реалізації достатньо гнучкої системи команд (МП К580 виконує 78 різних команд), при відносно великому розмірі адресного простору пам’яті. З іншого боку, використання багатослівних (багатобайтних) форматів команд пов’язане зі зниженням швидкодії МП.
Вказані ускладнення долаються за допомогою ефективних технологічних, структурних і схемотехнічних рішень, а також спеціальних прийомів кодування команд і адресації операндів.
Організація МП К580 відзначена такими основними особливостями:
· трьохшинною структурою магістралі із шинами даних, адреси і управління;
· магістральним принципом зв’язків, реалізованим у вигляді двонапрямної шини даних шириною 8 бітів, яка зв’язує основні вузли МП однаковою довжиною слів, що обробляються мікропроцесором;
· наявністю регістрової пам’яті, утвореної програмно-доступними загальними і спеціальними регістрами (лічильник команд, покажчик стека, покажчик даних), а також регістрами тимчасового зберігання;
· наявністю засобів організації стекової пам’яті (регістр – покажчик стека, схеми виконання операцій інкрементації–декрементації, спеціальних команд стекових операцій);
· наявністю 16-розрядної шини адреси, що забезпечує можливості прямої адресації будь-якого байта в пам’яті ємністю до 216 = 64 Кбайт;
· наявністю операцій над двохбайтними словами (16-розрядними числами, адресами), що забезпечується спеціальними командами, тандемними (двох- або трьохбайтними) передачами;
· використанням трьох форматів команд (однобайтного, двохбайтного і трьохбайтного) і різноманітних способів адресації («що мається на увазі», «прямої», «регістрової», «непрямої», «безпосередньої», «стекової») що дозволили при короткому 8-розрядному слові мати досить гнучкусистему команд;
· можливістю реалізації векторного багаторівневого пріоритетного переривання шляхом підключення до МП спеціальної додаткової ВІС[27] (контроллера переривань);
· можливістю реалізації в МП режиму прямого доступу до пам’яті (ПДП[28]) шляхом підключення спеціальної додаткової ВІС (контролера прямого доступу);
· наявністю ефективних засобів роботи з підпрограмами і обробки запитів переривань (стекова пам’ять, спеціальні команди виклику підпрограм і повернення з підпрограм, в тому числі умовного).
Для кращого розуміння особливостей системи команд мікропроцесора скористуємось програмістською моделлю МП К580, яка відповідає спрощеній структурі мікропроцесора (рис. 1).
Рис. 1. Програмістська модель МП К580.
В системі команд МП К580 є однобайтні, двобайтні і трьохбайтні команди. Формати команд показані на рис. 2. Формат команди і тип адресації задаються в команді неявно кодом операції. Адреса команди визначаються адресою її першого байту.
Рис. 2. Формати команд МП К580.
Систему команд МП К580 можна розділити на групи команд відповідно їх функціонального призначення: 1) команди пересилання інформації; 2) команди арифметичних операцій; 3) команди логічних операцій; 4) команди передачі керування; 5) спеціальні команди. Система команд МП К580 представлені в табл. 2. Прийняті такі умовні позначення:
- A, B, C, D, E, H, L – імена регістрів загального призначення МП;
- R– один з однобайтних регістрів загального призначення (A, B, C, D, E, H, L);
- RhRl – регістрова пара з пар регістрів B і C, D і E, H і L
- M (memory) – вічко пам’яті, до якого здійснюється звертання і адреса якого міститься в регістровій парі HL ;
- # – безпосередній однобайтний операнд, є другим байтом команди;
- ## – безпосередній двобайтний операнд, є другим і третім байтом команди;
- ** – безпосередня адреса.
Таблиця 2.
Система команд 8–розрядного одно кристального мікропроцесора К580ИК80А.
Мнемокод | Операція | Ознаки | Коментар |
Група команд пересилання | |||
MOV R1, R2 | (R2) ® R1 | Не змінюються | Вміст R2 копіюється в R1 |
MOV R, M | (M(HL)) ® R | Не змінюються | Вміст вічка пам’яті за адресою, що є вмістом регістрів H, L, копіюється в R |
MOV M, R | (R) ® M(HL) | Не змінюються | Вміст регістра R копіюється у вічко пам’яті за адресою, що є вмістом регістрів H, L |
XCHG | (HL) « (DE) | Не змінюються | Обмін вмістом двох пар регістрів (H, L) і (D, E) |
SPHL | (HL) ® SP | Не змінюються | Вміст пари регістрів H, L копіюється в укажчик стеку SP |
LDAX RhRl | (M(RhRl)) ® A | Не змінюються | Вміст вічка пам’яті за адресою, що є вмістом пари регістрів RhRl, копіюється в регістр А |
STAX RhRl | (A) ® M(RhRl) | Не змінюються | Вміст регістра А копіюється у вічко пам’яті за адресою, що є вмістом пари регістрів RhRl |
LDA ** | (M(**)) ® A | Не змінюються | Вміст вічка пам’яті за адресою, що безпосередньо вказана в команді, копіюється в регістр А |
STA ** | (A) ® M(**) | Не змінюються | Вміст регістра А копіюється у вічко пам’яті за адресою, що безпосередньо вказана в команді |
LHLD ** | (M(**)) ® L (M(**+1)) ® H | Не змінюються | Вміст вічка пам’яті за адресою, що безпосередньо вказана в команді, копіюється в регістр L і вміст вічка пам’яті за адресою, що на одиницю більша безпосередньо вказаної в команді — в регістр H |
SHLD ** | (L) ® M(**) (H) ® M(**+1) | Не змінюються | Вміст регістра L копіюється у вічко пам’яті за адресою, що безпосередньо вказана в команді, і вміст регістр H копіюється у вічко пам’яті за адресою, що на одиницю більша безпосередньо вказаної в команді |
MVI R, # | # ® R | Не змінюються | Другий байт команди завантажується в регістр R |
MVI M, # | # ® M(HL) | Не змінюються | Другий байт команди завантажується у вічко пам’яті за адресою, що є вмістом регістрів H, L |
LXI RhRl, ## | ## ® RhRl | Не змінюються | Другий байт команди завантажується в старший регістр Rh, а третій байт команди — в молодший регістр Rl регістрової пари RhRl |
PUSH RhRl | (Rh) ® M(SP–1) (Rl) ® M(SP–2) (SP) – 2 ® SP | Не змінюються | Вміст регістрової пари RhRl копіюється в стек (занесення в стек) |
POP RhRl | (M(SP)) ® Rl (M(SP+1)) ® Rh (SP) + 2 ® SP | Не змінюються | Вміст двох вічок стекової області пам’яті копіюються в регістри регістрової пари RhRl (видобування із стека) |
XTHL | (H) « (M(SP)) (L) « (M(SP–1)) | Не змінюються | Обмін вмістом регістрів H, L і двох вічок стекової області пам’яті |
IN port | (port) ® A | Не змінюються | Введення інформації з порту вводу/виводу в регістр А |
OUT port | (A) ® port | Не змінюються | Виведення інформації з регістра А в порту вводу/виводу |
Група команд арифметичних операцій | |||
ADD R | (A) + (R) ® A | Визначаються ознаки S, Z, AC, P, CY | До вмісту регістра А додається вміст регістра R. Результат утворюється в регістрі А |
ADD M | (A) + (M(HL)) ® A | Визначаються ознаки S, Z, AC, P, CY | До вмісту регістра А додається вміст вічка пам’яті за адресою, що є вмістом регістрів H, L. Результат — в регістрі А |
ADC R | (A) + (R) + (Тг СY) ® A | Визначаються ознаки S, Z, AC, P, CY | До вмісту регістра А додається вміст регістра R і до молодшого розряду утвореної суми додається значення ознаки СY. Результат — в регістрі А |
ADC M | (A) + (M(HL)) + (Тг СY) ® A | Визначаються ознаки S, Z, AC, P, CY | До вмісту регістра А додається вміст вічка пам’яті за адресою, що є вмістом регістрів H, L, і до молодшого розряду утвореної суми додається значення ознаки СY. Результат — в регістрі А |
DAD RhRl | (HL) + (RhRl) ® HL | Визначається ознака C | До вмісту регістрової пари H, L (як до двобайтного числа) додається вміст регістрової пари RhRl. Результат — в регістровій парі HL |
SUB R | (A) – (R) ® A | Визначаються ознаки S, Z, AC, P, CY | Від вмісту регістра А віднімається вміст регістра R. Результат —в регістрі А |
SUB M | (A) – (M(HL)) ® A | Визначаються ознаки S, Z, AC, P, CY | Від вмісту регістра А віднімається вміст вічка пам’яті за адресою, що є вмістом регістрів H, L. Результат — в регістрі А |
SBB R | (A) – (R) – (Тг СY) ® A | Визначаються ознаки S, Z, AC, P, CY | Від вмісту регістра А віднімається вміст регістра R і від молодшого розряду утвореної різниці віднімається значення ознаки СY. Результат — в регістрі А |
SBB M | (A) – (M(HL)) – (Тг СY) ® A | Визначаються ознаки S, Z, AC, P, CY | Від вмісту регістра А віднімається вміст вміст вічка пам’яті за адресою, що є вмістом регістрів H, L, і від молодшого розряду утвореної різниці віднімається значення ознаки СY. Результат — в регістрі А |
INR R | (R) + 1 ® R | Визначаються ознаки S, Z, AC, P | Збільшення на одиницю вмісту регістра R (інкрементування) |
INR M | (M(HL)) + 1 ® M(HL) | Визначаються ознаки S, Z, AC, P | Збільшення на одиницю вмісту вічка пам’яті за адресою, що є вмістом регістрів H, L (інкрементування) |
DCR R | (R) – 1 ® R | Визначаються ознаки S, Z, AC, P | Зменшення на одиницю вмісту регістра R (декрементування) |
DCR M | (M(HL)) – 1 ® M(HL) | Визначаються ознаки S, Z, AC, P | Зменшення на одиницю вмісту вічка пам’яті за адресою, що є вмістом регістрів H, L (декрементування) |
INX RhRl | (RhRl) + 1 ® RhRl | Не змінюються | До вмісту регістрової пари RhRl (як до двобайтного числа) додається одиниця. Результат — в регістровій парі RhRl |
DCX RhRl | (RhRl) – 1 ® RhRl | Не змінюються | Від вмісту регістрової пари RhRl (як від двобайтного числа) віднімається одиниця. Результат — в регістровій парі RhRl |
ADI # | (A) + # ® A | Визначаються ознаки S, Z, AC, P, CY | До вмісту регістра А додається другий байт команди. Результат утворюється в регістрі А |
ACI # | (A) + # + (Тг СY) ® A | Визначаються ознаки S, Z, AC, P, CY | До вмісту регістра А додається другий байт команди і до молодшого розряду утвореної суми додається значення ознаки СY. Результат — в регістрі А |
SUI # | (A) – # ® A | Визначаються ознаки S, Z, AC, P, CY | Від вмісту регістра А віднімається другий байт команди. Результат утворюється в регістрі А |
SBI # | (A) – # – (Тг СY) ® A | Визначаються ознаки S, Z, AC, P, CY | Від вмісту регістра А віднімається другий байт команди і від молодшого розряду утвореної різниці віднімається значення ознаки СY. Результат — в регістрі А |
DAA | (A)2–10 ® (A)2 | Визначаються ознаки S, Z, AC, P, CY | Вміст регістра А трансформується з двійкової форми в двійково–десяткову |
Група команд логічних операцій | |||
ANA R | (Ai) L (Ri) ® Ai (i = 0¸7) | Визначаються ознаки S, Z, P. CY = 0; AC = A3. | Операція порозрядного логічного множення вмісту регістра А і вмісту регістра R. Результат — в регістрі А |
XRA R | (Ai) Å (Ri) ® Ai (i = 0¸7) | Визначаються ознаки S, Z, P. CY = AC = 0. | Операція порозрядного логічного додавання за mod 2 вмісту регістра А і вмісту регістра R. Результат — в регістрі А |
ORA R | (Ai) V (Ri) ® Ai (i = 0¸7) | Визначаються ознаки S, Z, P. CY = AC = 0. | Операція порозрядного логічного додавання вмісту регістра А і вмісту регістра R. Результат — в регістрі А |
CMP R | (A) – (R) | Визначаються ознаки S, Z, AC, P, CY | Порівняння вмісту регістрів A і R. Якщо (A) = (R), то (Z) = 1. Якщо (A) < (R), то (CY) = 1 і (Z) = 0 |
ANA M | (Ai) L (M(HL)i) ® Ai (i = 0¸7) | Визначаються ознаки S, Z, P. CY = 0; AC = A3. | Операція порозрядного логічного множення вмісту регістра А і вмісту вічка пам’яті за адресою, що є вмістом регістрів H, L. Результат — в регістрі А |
XRA M | (Ai) Å (M(HL)i) ® Ai (i = 0¸7) | Визначаються ознаки S, Z, P. CY = AC = 0. | Операція порозрядного логічного додавання за mod 2 вмісту регістра А і вмісту вічка пам’яті за адресою, що є вмістом регістрів H, L. Результат — в регістрі А |
ORA M | (Ai) V (M(HL)i) ® Ai (i = 0¸7) | Визначаються ознаки S, Z, P. CY = AC = 0. | Операція порозрядного логічного додавання вмісту регістра А і вмісту вічка пам’яті за адресою, що є вмістом регістрів H, L. Результат — в регістрі А |
CMP M | (A) – (M(HL)) | Визначаються ознаки S, Z, AC, P, CY | Порівняння вмісту регістра A і вмісту вічка пам’яті за адресою, що є вмістом регістрів H, L. Якщо (A) = (M(HL)), то (Z) = 1. Якщо (A) < (M(HL)), то (CY) = 1 і (Z) = 0 |
ANI # | (Ai) L #i ® Ai (i = 0¸7) | Визначаються ознаки S, Z, P. CY = 0; AC = A3. | Операція порозрядного логічного множення вмісту регістра А і другого байту команди. Результат — в регістрі А |
XRI # | (Ai) Å #i ® Ai (i = 0¸7) | Визначаються ознаки S, Z, P. CY = AC = 0. | Операція порозрядного логічного додавання за mod 2 вмісту регістра А і другого байту команди. Результат — в регістрі А |
ORI # | (Ai) V #i ® Ai (i = 0¸7) | Визначаються ознаки S, Z, P. CY = AC = 0. | Операція порозрядного логічного додавання вмісту регістра А і другого байту команди. Результат — в регістрі А |
CPI # | (A) – # | Визначаються ознаки S, Z, AC, P, CY | Порівняння вмісту регістра A і другого байту команди. Якщо (A) = (M(HL)), то (Z) = 1. Якщо (A) < (M(HL)), то (CY) = 1 і (Z) = 0 |
RLC | Зсув вліво | (A7) ® CY, AC = 0 | Циклічний зсув вліво на один розряд. Значення 7–го розряду копіюється в тригер ознаки СY |
RRC | Зсув вправо | (A0) ® CY, AC = 0 | Циклічний зсув вправо на один розряд. Значення 0–го розряду копіюється в тригер ознаки СY |
RAL | Зсув вліво через тригер ознаки СY | (A7) ® CY, AC = 0 | Циклічний зсув вліво на один розряд. В кільце зсуву включений тригер ознаки СY |
RAR | Зсув вправо через тригер ознаки СY | (A0) ® CY, AC = 0 | Циклічний зсув вправо на один розряд. В кільце зсуву включений тригер ознаки СY |
CMA | (`A) ® A | Не змінюються | Інвертування розрядів регістра А |
CMC | (Тг`СY) ®Тг СY | СY | Інвертування ознаки СY |
STC | 1® Тг СY | СY = 1 | Встановлення в “1” ознаки СY |
Група команд передачі керування | |||
PCHL | (HL) ® PС | Не змінюються | Безумовна передача керування за вказаною в регістрах HL адресою |
JMP ** | ** ® PС | Не змінюються | Безумовна передача керування за вказаною в команді адресою |
J(умова) ** | Якщо умова виконується, то ** ® PС, інакше PC+1 ® PС | Не змінюються | Передача керування при виконанні вказаної в команді умови. Якщо умова не виконується — перехід до наступної за програмою команди |
CALL ** | (PC)h ®M(SP – 1) (PC)l ®M(SP – 2) SP – 2®SP ** ® PC | Не змінюються | Передача керування (звертання) до підпрограми за адресою, що вказана в команді, і зберігання адреси повернення з підпрограми в стеку |
С(умова) ** | Якщо умова виконується, то див. попередню команду, інакше PC+1 ® PС | Не змінюються | Умовна передача керування (звертання) до підпрограми за адресою, що вказана в команді, і зберігання адреси повернення з підпрограми в стеку |
RET | (M(SP)) ® PC l (M(SP+1)) ®PC h (SP) + 2 ® SP | Не змінюються | Повернення з підпрограми до місця звертання за адресою, що видобувається зі стеку |
R(умова) | Якщо умова виконується, то див. попередню команду, інакше PC+1 ® PС | Не змінюються | Умовне повернення з підпрограми до місця звертання за адресою, що видобувається зі стеку |
RST n | (PC)h ®M(SP – 1) (PC)l ®M(SP – 2) SP – 2®SP n´8 ® PC | Не змінюються | Звертання до підпрограми обробки переривання за адресою, що відповідає номеру переривання n |
Група спеціальних команд | |||
EI | 1 ® Тгдозв пере-вань | Не змінюються | Дозвіл переривань |
DI | 0 ® Тгдозв пере-вань | Не змінюються | Заборона переривань |
HTL | Зупинка | Не змінюються | Зупинка роботи МП до появи сигналу “запит на переривання” |
NOP | Не змінюються | Пуста операція |
Ознаки результату:
S – ознака «знак»; приймає значення старшого розряду результату відповідно уявленню цілих чисел у формі з фіксованою крапкою, де в старшому розряді кодується знак числа (0 – число додатне; 1 – число від’ємне).
Z– ознака нуля; якщо результат дорівнює 0, то Z = 1, інакше Z = 0.
AC – ознака додаткового переносу; якщо є переніс між тетрадами байта (між 3 і 4 розрядами), то АС = 1, інакше АС = 0.
Р – ознака парності; якщо число одиниць в байті результату парне, то Р = 1, інакше Р = 0.
СY – ознака переносу (позичання); якщо при виконанні команди виник переніс із старшого розряду або позичання в старший розряд, то СY = 1, інакше СY = 0.
МП К580 є 8–розрядним мікропроцесором, в системі команд якого передбачені тільки команди додавання і віднімання вмісту регістрів і вічок пам’яті. На основі цих команд можуть бути розроблені програми додавання, віднімання, множення, ділення, видобування квадратного кореня і інші процедури обробки цілих багатобайтних чисел.
Рекомендований алгоритм процедури додавання багатобайтних чисел може бути презентований такою послідовністю дій:
1) Ініціалізація лічильника. Як лічильник байтів операндів можна використати регістр В, в який завантажується число N – довжина операндів в байтах (для завдання № 4 N = 4).
2) Ініціалізація покажчиків. Як покажчики можна використати пари регістрів DE і HL, в які завантажуються адреса молодшого байта першого операнду і адреса молодшого байта другого операнду відповідно. Результат повинен утворитись на місці першого операнду.
3) Скидання в нуль ознаки переносу.
4) Завантаження в регістр А поточного байту першого операнду.
5) Виконання додавання поточних байтів операндів з урахуванням переносу.
6) Запам’ятовування отриманого поточного байту результату.
7) Декрементування лічильника.
8) Перевірка, чи вміст лічильника дорівнює нулю, тобто чи закінчена процедура додавання.
9) Якщо ні, то перехід до додавання наступних байтів операндів. Для цього здійснюється інкрементування вмісту покажчиків.
10) Замикання контуру циклу, тобто перехід до п.4.
11) Закінчення процедури.
Щодо реалізації операції множення, то існує багато різних алгоритмів виконання операції множення. Розглянемо один з найчастіше використовуваних способів. Цей спосіб передбачає множення молодшими розрядами вперед із зсувом часткової суми вправо.
Нехай в регістрі D розташовується множене, в регістрі Е — множник, в регістровій парі ВС — добуток і в регістрі L — лічильник біт.
Алгоритм процедури множення двох однобайтних чисел може бути описаний такою послідовністю дій:
1) Встановлення початкового значення часткової суми рівним нулю.
2) Завантаження лічильника бітів початковим значення рівним восьми.
3) Завантаження множника в регістр А з регістра Е.
4) За рахунок зсуву вправо (можна використати команду RAR) біт що аналізується множника розміщується в тригер ознаки переносу СY.
5) Змінений при зсуві множник пересилається в регістр Е.
6) Якщо ознака переносу СY дорівнює 1, то вміст регістрів В і D сумується, інакше – сумування не виконується.
7) Через регістр А здійснюється зсув (командою RAR) отриманої в регістрі В старшої часткової суми вправо. Аналогічно здійснюється зсув вправо молодшої часткової суми, що розміщується в регістрі С.
8) Зменшення лічильника розміщеного в регістрі L.
9) Якщо вміст лічильника не дорівнює нулю, – замикання контура циклу процедури (перехід до п. 3).
10) Закінчення процедури.
Зовнішні пристрої (світлодіоди, перемикачі, клавіатура, гучномовець) підключені до шин МП-системи через мікросхему паралельного периферійного інтерфейсу КР580ВВ55А (ППІ).
Мікросхема має три 8-розрядних порти A, B і С, які можуть працювати як на введення, так і на виведення інформації. Підключення до магістралі системи здійснюється при виконанні команд IN #та OUT #, за якими інформація вводиться з порту # в регістр А МП К580 та виводиться з регістра А в порт # відповідно.
Визначає режими роботи портів і напрямок передачі інформації 8–розрядний регістр керуючого слова (РКС) мікросхеми.
Кожному режиму взаємодії портів і РКС з шиною даних в МП–системі відповідає своя адреса. При виконанні завдань № 4, № 5 прийняти такі адреси:
F8 – здійснюється введення / виведення через порт A;
F9 – здійснюється введення / виведення через порт B;
FA – здійснюється введення / виведення через порт C;
FB – здійснюється виведення в РКС.
Порт A складається з 8-розрядного вихідного регістру, вихідних формувачів і 8-розрядного вхідного регістру. Може працювати як на введення, так і на виведення інформації в трьох режимах роботи — 0, 1, 2.
В режимах роботи 0 або 1 інформація постійно видається з вихідного регістру порта A на протязі всього режиму виведення.
В режимі 0 інформація постійно приймається на вхідний регістр.
В режимі 1 прийом в порт А здійснюється тільки на протязі дії зовнішнього сигналу керування прийомом (в режимах 1 і 2 для цього використовуються фіксовані розряди порту C).
В режимі 2 порт A приймає інформацію на вхідний регістр і видає її з вихідного регістру протягом дії зовнішніх сигналів керування.
Порт B складається з 8-розрядних регістрів введення і виведення, вхідних і вихідних формувачів і може використовуватись для введення або виведення 8-розрядної інформації в режимах 0 і 1.
Якщо порт B налаштований на виведення інформації в режимах 0 і 1, то інформація, що записана в регістр порту B, через вихідні формувачі подається на вихід порту B на протязі всього режиму виведення (до зміни інформації в регістрі).
Якщо порт B налаштований на введення інформації в режимі роботи 0, то регістр порту B змінює свій стан у відповідності до зміни інформації на вході порту B.
Якщо порт B налаштований на введення в режимі 1, то інформація сприймається через вхідні формувачі в регістр порту B на протязі дії зовнішнього сигналу керування прийомом.
Порт C складається з двох 4-розрядних регістрів, які включають розряди 0...3 і 4...7. Кожному регістру відповідає своя група вихідних і вхідних формувачів, які використовуються для введення і виведення 4-розрядних слів в режимі роботи 0.
Якщо порти A і B налаштовані на режим роботи 1 або 2, то порт C використовується для прийому і видачі керуючих сигналів, а регістр порту C – як регістр інформації стану. Спеціальні схеми керування портом C дозволяють програмним способом встановлювати в стан логічної одиниці і скидати в стан логічного нуля будь-який з розрядів регістру C.
Для програмування режимів роботи ППІ в РКС завантажується керуюче слово (рис. 3), яке визначає режими і напрямки передачі інформації (програмування інтерфейсу). Обмін сигналами при роботі в указаних режимах докладно описаний в довідковій літературі.
До восьми розрядів порту B підключені вісім світлодіодних індикаторів. До розряду В0 порту B крім того ще підключений гучномовець. Отже, організувавши певним способом програму, можна виводити інформацію у вигляді звукових сигналів. При використанні світлодіодів і гучномовця цей порт програмується на виведення в режимі 0.
«1» | D6 | D5 | D | D | D | D | D | ||||||
Напрямок 0…3 розрядів каналу C | |||||||||||||
1— введення; 0 — виведення | |||||||||||||
Напрямок каналу B | |||||||||||||
1— введення; 0 — виведення | |||||||||||||
Режим роботи каналу B та 0…3 розрядів каналу C | |||||||||||||
0 — режим 0; 1 — режим 1 | |||||||||||||
Напрямок 4…7 розрядів каналу C | |||||||||||||
1— введення; 0 — виведення | |||||||||||||
Напрямок каналу A | |||||||||||||
1— введення; 0 — виведення | |||||||||||||
Режим роботи каналу A та 4…7 розрядів каналу C | |||||||||||||
00 — режим 0; 01 — режим 1; 1Х — режим 2 |
Рис. 3. Формат керуючого слова мікросхеми КР580ВВ55А.
Для програмування інтерфейсу необхідно завантажити в регістр А такий код, щоб в розрядах А1 і А2 були нулі, а в розряді А7 – 1 (див. рис. 3). Достатньо завантажити в регістр А число 100000002 = 8016 командою MVI A, 8016, а потім командою OUT FB вивести вміст регістра А в РКС інтерфейсу.
Для виведення на гучномовець рівня “1” в регістр А завантажується будь–яке число, в якому А0 = 1 і командою OUT F9 утворений код виводиться в порт В.
Утримання рівня “1” на гучномовці певний час здійснюється тимчасовою затримкою. Затримка організується через декрементування до нуля лічильника, в який попередньо завантажується деяка константа. Величина константи визначає час затримки певного рівня на гучномовці, а отже, і частоту звукового сигналу. Лічильник можна організувати, наприклад, в регістрі В.
Для виведення на гучномовець рівня “0” вміст регістру А інвертується. Цикл замикається поверненням до виведення командою OUT F9 утвореного коду в порт В.
Для висвітлювання цифр на семисегментному індикаторі необхідно попередньо визначити коди, які послідовно повинні виводитись в порт В. Так, наприклад, для висвітлення цифри 0 необхідно щоб світились світлодіоди 0, 1, 2, 3, 4, 5 (рис. 4) . Отже код, що виводиться в порт В, — 001111112 = 3F16. Для висвітлення цифри 1 — код 000011002 = 0С16, цифри 2 — код 011101102 = 7616 і т.д (див. табл. 3). Визначені коди завантажуються в послідовно розташовані вічка оперативної пам’яті.
Програма повинна послідовно пересилати коди з вічок пам’яті в регістр А процесора і виводити вміст регістра А в порт В. Після виконання команди виведення необхідно звернутись до підпрограми, що реалізує тимчасову затримку. Так як час затримки повинен бути значним, щоб око могло зафіксувати цифру, що висвітлюється, лічильник можна організувати в регістрових парах, або використати подвійний лічильник з вкладеними циклами. Підбір констант буде здійснюватись експериментально при виконанні практичних робіт, або через розрахунок.
Таблиця 3
Таблиця відповідності двійкових тетрад і 16–кових цифр
“2” | “16” | “2” | “16” |
A | |||
B | |||
C | |||
D | |||
E | |||
F |
Приклад 1. Побудувати схему алгоритму і програму (Асемблер для МП К580) реалізації процедури додавання двох цілих чотирьохбайтних чисел, що містяться в ОЗП, з використанням арифметичних команд мікропроцесора серії К580.
Використовуються такі символічні імена і адреси:
FIRST SECND HL і DE N В | – адреса молодшого байту першого операнду і адреса результату; – адреса молодшого байту другого операнду; – вказівники даних; – довжина операндів в байтах (N = 4); – лічильник байтів (представляє довжину операндів в байтах). |
Програма:
Мітка | Мнемоніка команди | Коментар | |
ADDN: | MVI | B, N | ; ініціалізація лічильника |
LXI | D, FIRST | ; ініціалізація вказівників инициализация указателей | |
LXI | H, SECND | ||
XRA LDAX | A | ; скидання ознаки переносу | |
LOOP: | LDAX | D | ; завантаження першого операнду |
ADC | M | ; додавання | |
STAX | D | ; запам’ятовування результату | |
DCR | В | ; декремент лічильника | |
JZ | DONE | ; додавання закінчено? | |
INX | H | ; перехід до наступного байту | |
INX | D | ||
JMP | LOOP | ; організація циклу | |
DONE: | … | ; кінець |
Приклад 2. Побудувати програму, що керує «спалахуванням» восьми світлодіодів за певним законом. Нехай спочатку будуть включені світлодіоди 1, 4, 7, потім, через деякий час, замість них спалахнуть діоди 2, 5, 8. Через інтервал затримки спалахнуть діоди 3, 6 і програма повторюється. За допомогою такої програми досягається ефект «бігучих вогнів».
Вихідні світлодіоди підключені до порту B програмованого інтерфейсу (адреса F9), який необхідно запрограмувати на виведення через порт В в 0-му режимі. Отже при програмуванні інтерфейсу необхідно в регістр керуючого слова завантажити код «80». Визначимо комбінації керуючих байтів для включення вказаних діодів у потрібній послідовності. Рівень «1» відповідає включеному світлодіоду, «0» – виключеному.
VD1 | VD2 | VD3 | VD4 | VD5 | VD6 | VD7 | BD8 | Код |
Програма розділяється на окремі фрагменти: програмування інтерфейсу; три фрагменти включення світлодіодів в указаній послідовності; підпрограму часової затримки.
Програма:
Мітка | Мнемоніка команди | Коментар | |
MVI | A, 80 | ; Програмування | |
OUT | FB | ; інтерфейсу | |
SEQ: | MVI | A, 92 | ; Виведення байту «92» |
OUT | F9 | ; для включення 1, 4, 7 | |
MVI | D, 01 | ; світлодіодів | |
CALL | DELAY | ; Тимчасова затримка | |
MVI | A, 49 | ; Виведення байту «49» | |
OUT | F9 | ; для включення 2, 5, 8 | |
MVI | D, 01 | ; світлодіодів | |
CALL | DELAY | ; Тимчасова затримка | |
MVI | A, 24 | ; Виведення байту «24» | |
OUT | F9 | ; для включення 3, 6 | |
MVI | D, 01 | ; світлодіодів | |
CALL | DELAY | ; Тимчасова затримка | |
JMP | SEQ | ; Повернення в основну програму | |
DELAY: | LXI | B, 2500 | ; початок зовнішньої петлі затримки 0,786 с |
LOOP: | DCX | B | ; зменшення вмісту регістрів ВС |
MOV | A, B | ; пересилання В в А | |
ORA | C | ; порівняння | |
JNZ | LOOP | ; продовження внутрішньої петлі | |
DCR | D | ; зменшення вмісту регістра D | |
JNZ | DELAY | ; продовження зовнішньої петлі | |
RET | ; повернення |
Час «горіння» світлодіодів в цій програмі зафіксовано і може бути змінено тільки встановленням нових значень констант. Для керування часом можна змінювати вміст регістру D або вміст пари регістрів B і C в підпрограмі затримки «DELAY».
Завдання для розрахунково-графічної роботи № 4