
Буклет Лабораторні роботи МСТЗІ
.pdf
Рис. 7. Відображення текстової області VRAM на дисплей
GH |
GH+1 |
GH+CL-1 |
GH+CL |
GH+GA |
GH+GA+1 |
GH+GA+CL-1 |
GH+GA+CL |
|
|
|
n рядків |
|
|
|
точок |
GH+(n-2)GA |
GH+(n-2)GA+1 |
GH+(n-2)GA+CL-1 GH+(n-2)GA+CL |
|
GH+(n-1)GA |
GH+(n-1)GA+1 |
GH+(n-1)GA+CL-1 GH+(n-1)GA+CL |
|
|
Y точок у рядку |
|
Рис. 8. Відображення графічної області VRAM на дисплей
де TH – задає початкову адресу для текстових даних вVRAM; GH – задає початкову адресу для графічних даних в VRAM; TA – задає кількість стовпців тексту на РКД; GA – задає кількість байт в рядку, які відображаються на РКД.
Формат |
Розмір |
|
|
Текстова область |
|
|
Графічна область |
|
CL+1 |
|||||
дисплею |
шрифту |
|
Х |
|
m |
|
TA |
Y |
|
n |
|
GA |
|
|
|
|
|
|
|
|
|
||||||||
64x120 |
6х8 |
|
20 |
|
8 |
|
0х14 |
120 |
|
64 |
|
0х14 |
|
0х14 |
8х8 |
|
15 |
|
8 |
|
0х0F |
120 |
|
64 |
|
0х0F |
|
0х0F |
|
|
|
|
|
|
|
|
||||||||
128x128 |
6х8 |
|
21 |
|
16 |
|
0х16 |
128 |
|
128 |
|
0х16 |
|
0х16 |
8х8 |
|
16 |
|
16 |
|
0х10 |
128 |
|
128 |
|
0х10 |
|
0х10 |
|
|
|
|
|
|
|
|
||||||||
64x240 |
6х8 |
|
40 |
|
8 |
|
0х28 |
240 |
|
64 |
|
0х28 |
|
0х28 |
8х8 |
|
30 |
|
8 |
|
0х1E |
240 |
|
64 |
|
0х1E |
|
0х1E |
|
|
|
|
|
|
|
|
||||||||
128x240 |
6х8 |
|
40 |
|
16 |
|
0х28 |
240 |
|
128 |
|
0х28 |
|
0х28 |
8х8 |
|
30 |
|
16 |
|
0х1E |
240 |
|
128 |
|
0х1E |
|
0х1E |
|
|
|
|
|
|
|
|
||||||||
Розглянемо |
дисплей 64х128 пікселів |
з розміром шрифту6х8 та |
об’ємом |
відео ОЗП8 |
Кбайт. Для графічної області потрібно виділити мінімум64*20 = 1280 байт і стільки ж для текстової. 1024 байт можна виділити для області користувацького символьного знакогенератора в режимі CG-ROM (128 символів по 8 байт). Карта пам’яті ОЗП представлена на Рис. 9.
Рис. 9. Приклад розбиття відео ОЗП розміром 8 Кбайт
Оскільки оперативної пам’яті достатньо для відображення 4 екранів (4*1280=5120 байт) є можливість організувати скролінг, шляхом зміни значень ТH та GH.
Переважно РКД з контролером T6963C містять від 4 до 8 Кбайт ОЗП.
110

Ініціалізація дисплею з контролером Т6963С
Розглянемо типову послідовність ініціалізації дисплею з розміром 128х128 та зі шрифтом 8х8 пікселів.
Команда |
|
|
|
|
|
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Hex |
|
Опис |
|
|
|
|
C/D |
|
|
|
|
||||||||||||||
Power On |
Включення живлення. |
|
|
|
|
|
|
|
|
|
|
|
|||||||
Hardware Reset |
|
|
|
|
=0 (1 мілісекунда мін. після VDD > 4.5 B) |
|
|
|
|
|
|
|
|
||||||
|
RES |
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
||||||||||
Mode Set |
1 |
|
|
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
80Н |
Режим"OR", |
CG- |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ROM. |
|
|
|
|
Control Word Set |
0 |
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
00Н |
Початкова |
|
адреса |
||||
|
0 |
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
00Н |
для |
графіки GH = |
|||||
Graphic Home Address Set |
1 |
|
|
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
42Н |
0000H. |
|
|
|
|||
Control Word Set |
0 |
|
|
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
10H |
GA = 16. 16 байт в |
|
|||||
Graphic Area Set |
0 |
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
00Н |
рядку для графіки. |
||||||
1 |
|
|
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
43Н |
|
|
|
|
|
|||
Control Word Set |
0 |
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
00Н |
Початкова |
|
адреса |
||||
|
0 |
|
|
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
08Н |
для |
тексту TH = |
|||||
Text Home Address Set |
1 |
|
|
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
40Н |
0800H. |
|
|
|
|||
Control Word Set |
0 |
|
|
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
10H |
TA |
= |
16. |
16 |
|
||
|
0 |
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
00Н |
символів 8х8 в |
||||||
Text Area Set |
1 |
|
|
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
41Н |
рядку. |
|
|
|
|||
Address Pointer Set |
0 |
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
00Н |
Встановити |
|
|
||||
|
0 |
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
00Н |
вказівник |
адреси на |
|||||
|
1 |
|
|
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
24H |
00Н. |
|
|
|
|
||
Dispay Mode Set |
1 |
|
|
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
9CH |
Text/Graphic = On. |
|
|||||
Initialisation Ends |
********************************************************* |
Кінець ініціалізації. |
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Для програмування РКД з контролером 6963Т С зручно розробити бібліотеку функцій нижнього рівня, які б здійснювали елементарні операції типу запису команд або даних різної розрядності в контролер, читання даних з дисплею та його ініціалізацію. На підставі них можна розробляти функції вищого рівня, типу побудови різних графічних примітивів(прямокутників, трикутників, кіл, індикаторів заряду батареї, рівня сигналу і т. п.), виводу тексту та меню. Далі наведено приклад таких функцій нижнього рівня на мові С.
// Підключення виводів шини даних LCD
#define PORT_LCD_DATA |
PORTB |
|
#define DDR_LCD_DATA |
DDRB |
|
#define PIN_LCD_DATA |
PINB |
|
// Підключення виводів управління LCD |
||
#define PORT_LCD_CTRL |
PORTD |
|
#define DDR_LCD_CTRL |
DDRD |
|
#define PIN_LCD_CTRL |
PIND |
|
#define LCD_CE |
3 |
|
#define LCD_CD |
4 |
|
#define LCD_WR |
5 |
|
#define LCD_RD |
6 |
|
// LCD регістри |
|
|
#define DATA |
0 |
|
#define CTRL |
1 |
|
// LCD коди команд |
|
|
#define LCD_CURSOR |
|
0x21 |
#define LCD_OFFSET |
|
0x22 |
111
#define LCD_ADDRESS |
0x24 |
#define LCD_TEXTHOME |
0x40 |
#define LCD_TEXTAREA |
0x41 |
#define LCD_GFXHOME |
0x42 |
#define LCD_GFXAREA |
0x43 |
#define LCD_ORMODE |
0x80 |
#define LCD_XORMODE |
0x81 |
#define LCD_ANDMODE |
0x83 |
#define LCD_ATTRMODE |
0x84 |
#define LCD_DISPLAY |
0x90 |
#define LCD_CLINES |
0xA0 |
#define LCD_AUTOWRITE |
0xB0 |
#define LCD_AUTOREAD |
0xB1 |
#define LCD_AUTORESET |
0xB2 |
#define LCD_WRITEINC |
0xC0 |
#define LCD_READINC |
0xC1 |
#define LCD_WRITEDEC |
0xC2 |
#define LCD_READDEC |
0xC3 |
#define LCD_SCREENPEEK |
0xE0 |
#define LCD_SCREENCOPY |
0xE8 |
#define LCD_BITSET |
0xF8 |
#define LCD_BITRESET |
0xF0 |
//Драйвери нижнього рівня для роботи з LCD
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Читає і повертає 1 байт з LCD регістра
byte LCD_READ(byte ctrl)
{
byte result; |
|
|
|
|
|
|
|
|
|
DDR_LCD_DATA = 0; |
// Налаштувати порт LCD_DATA на ввід |
||||||||
PORT_LCD_DATA = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PORT_LCD_CTRL.LCD_WR = 1; |
// Операція читання: WR = 1 |
||||||||
PORT_LCD_CTRL.LCD_CD = ctrl; |
// Тип операції: команда (ctrl =1) або дані (ctrl = 0) |
||||||||
|
|
|
|
|
|
|
|
||
PORT_LCD_CTRL.LCD_CE = 0; |
// Вибір мікросхеми CE =0 |
||||||||
|
|
|
|
|
|
|
|||
PORT_LCD_CTRL.LCD_RD = 0; |
// Операція читання: RD =0 |
||||||||
#asm("nop"); |
|
|
|
|
|
|
|
|
|
result = PIN_LCD_DATA; |
// Прочитати дані з шини даних дисплею у змінну result |
||||||||
|
|
|
|
|
|
||||
PORT_LCD_CTRL.LCD_RD = 1; |
// Завершити читання: RD =1 |
||||||||
|
|
|
|
||||||
PORT_LCD_CTRL.LCD_CE = 1; |
// Завершити операцію: CE =1 |
||||||||
DDR_LCD_DATA = 0xFF; |
// Перевести порт LCD_DATA на вивід |
return result;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
// Записує байт val в LCD регістр void LCD_WRITE(byte ctrl, byte val)
{
DDR_LCD_DATA = 0xFF; |
// Налаштувати порт LCD_DATA на вивід |
PORT_LCD_DATA = val; |
// Виставити на шину даних значення val |
112

PORT_LCD_CTRL.LCD_RD = 1; |
// Операція запису: RD =1 |
||||||
PORT_LCD_CTRL.LCD_CD = ctrl; |
// Тип операції: команда (ctrl =1) або дані (ctrl = 0) |
||||||
|
|
|
|
|
|
|
|
PORT_LCD_CTRL.LCD_CE = 0; |
// Вибір мікросхеми CE =0 |
||||||
|
|
|
|
|
|
|
|
PORT_LCD_CTRL.LCD_WR = 0; |
// Операція запису: WR = 0 |
||||||
#asm("nop"); |
|
|
|
|
|
|
|
|
|
|
|
|
|||
PORT_LCD_CTRL.LCD_WR = 1; |
// Завершити запис: WR = 1 |
||||||
|
|
|
|
||||
PORT_LCD_CTRL.LCD_CE = 1; |
// Завершити операцію: CE =1 |
};
////////////////////////////////////////////////////////////////////////////////////////////////////////
// Записує 1 байтну команду в LCD void LCD_WRCMD(byte cmd)
{
while((LCD_READ(CTRL) & 3) != 3) |
// Чекати поки LCD не буде готовий (STA1= STA0=1) |
{}; |
|
LCD_WRITE(CTRL, cmd); |
// Записати команду |
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
// Записує 2 байтну команду в LCD void LCD_WRCMD1(byte cmd, byte arg)
{
while((LCD_READ(CTRL) & 3) != 3) |
// Чекати поки LCD не буде готовий (STA1= STA0=1) |
{}; |
|
LCD_WRITE(DATA, arg); |
// Записати перший байт команди |
while((LCD_READ(CTRL) & 3) != 3) |
// Чекати поки LCD не буде готовий (STA1= STA0=1) |
{}; |
|
LCD_WRITE(CTRL, cmd); |
// Записати команду |
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
// Записує 3 байтну команду в LCD void LCD_WRCMD2(byte cmd, int arg)
{
while((LCD_READ(CTRL) & 3) != 3) |
// Чекати поки LCD не буде готовий (STA1= STA0=1) |
{}; |
|
LCD_WRITE(DATA, arg & 0x00FF); |
// Записати перший байт команди |
while((LCD_READ(CTRL) & 3) != 3) |
// Чекати поки LCD не буде готовий (STA1= STA0=1) |
{}; |
|
LCD_WRITE(DATA, arg>>8); |
// Записати другий байт команди зсунувши arg на 8 біт |
вправо |
|
while((LCD_READ(CTRL) & 3) != 3) |
// Чекати поки LCD не буде готовий (STA1= STA0=1) |
{}; |
|
LCD_WRITE(CTRL, cmd); |
// Записати команду |
} |
|
////////////////////////////////////////////////////////////////////////////////////////////////////////
// Ініціалізація контролера Т6963С void LCD_Init(void)
113

{
PORT_LCD_DATA = 0; |
// Налаштувати порт LCD_DATA на вивід |
DDR_LCD_DATA = 0xFF; |
// та встановити на шині даних значення 0х00 |
PORT_LCD_CTRL.LCD_CE = 1; PORT_LCD_CTRL.LCD_CD = 1; PORT_LCD_CTRL.LCD_WR = 1; PORT_LCD_CTRL.LCD_RD = 1;
DDR_LCD_CTRL.LCD_CE = 1; DDR_LCD_CTRL.LCD_CD = 1; DDR_LCD_CTRL.LCD_WR = 1; DDR_LCD_CTRL.LCD_RD = 1;
//Налаштувати лінії управління порта LCD_CTRL на вивід
//та встановити їх у неактивний стан
LCD_WRCMD(LCD_ORMODE); |
// Режим накладання OR графіки та тексту |
LCD_WRCMD2(LCD_GFXHOME, 0x0000); |
// Початкова адреса для графіки GH = 0000H. |
LCD_WRCMD2(LCD_GFXAREA, 0x0010); |
// GA = 16. 16 байт в рядку для графіки. |
LCD_WRCMD2(LCD_TEXTHOME, 0x0800); |
// Початкова адреса для тексту TH = 0800H. |
LCD_WRCMD2(LCD_TEXTAREA, 0x0010); |
// TA = 16. 16 символів 8х8 в рядку. |
LCD_WRCMD2(LCD_ADDRESS, 0); |
// Встановити вказівник адреси на 0000Н. |
LCD_WRCMD(LCD_DISPLAY + 0x0C); |
// Включити відображення тексту і графіки. |
};
Тепер якщо, наприклад, потрібно вивести символ N у верхньому правому куті дисплею слід виконати таку послідовність команд:
LCD_WRCMD2(LCD_ADDRESS, 0x0800 + 15); |
// Задаємо адресу 16-го символу першого рядка |
LCD_WRCMD1(LCD_WRITEINC, 0x2Е); |
// Записуємо код символу N |
Як було згадано вище, користувач може додавати свої власні символи до таблиці знакогенератора. Розглянемо як це здійснюється для дисплею128х128 з розміром шрифту 8х8 пікселів (1 символ = 8 байт). Для графічної області пам’яті необхідно виділити128 * 128 / 8 =
2048 байт. Стільки ж потрібно виділити і для текстової області. Якщо вибрано режим CG-ROM (команда Mode Set), то перші 128 символів з кодами 0х00-0x7F беруться з таблиці вбудованого знакогенератора (всього 1024 байт), а решта 128 символів з кодами0х80-0xFF можуть задаватися користувачем (Рис. 10, а). Нехай потрібно символу з кодом0х80 поставити у відповідність букву Б (Рис. 10, б) та вивести її у верхньому лівому куті дисплею.
а) |
б) |
Рис. 10. Карта пам’яті (а) та попіксельне зображення символу Б (б)
Послідовність команд для цього буде такою:
LCD_WRCMD2(LCD_ADDRESS, 0x1000 + 1024); |
// Встановити вказівник адреси на початок CG-RAM |
114

LCD_WRCMD2(LCD_OFFSET, 0x0002); |
// Занести 5 старших біт адреси в регістр зміщення |
LCD_WRCMD1(LCD_WRITEINC, 0xFC); |
// Занести образ букви Б в CG-RAM |
LCD_WRCMD1(LCD_WRITEINC, 0x66); |
|
LCD_WRCMD1(LCD_WRITEINC, 0x60); |
|
LCD_WRCMD1(LCD_WRITEINC, 0x7C); |
|
LCD_WRCMD1(LCD_WRITEINC, 0x66); |
|
LCD_WRCMD1(LCD_WRITEINC, 0x66); |
|
LCD_WRCMD1(LCD_WRITEINC, 0xFC); |
|
LCD_WRCMD1(LCD_WRITEINC, 0x00); |
|
LCD_WRCMD2(LCD_ADDRESS, 0х0800); |
// Встановити вказівник адреси на початок Text RAM |
LCD_WRCMD1(LCD_WRITEINC, 0x80); |
// Вивести букву Б |
2. Хід виконання роботи
Напишіть та скомпілюйте програму в середовищіCodeVisionAVR відповідно до завдання. Запустіть програму Proteus та відкрийте файл LR_6.dsn (Рис. 11).
Рис. 11. Схема для симуляції
На схемі розташовані РКД128х128 пікселів PG128128A фірми Powertip (Тайвань) з вбудованим контролером Т6963С та МКAT90S2313. Дисплей містить 8 Кбайт відео ОЗП. Тактова частота мікроконтролера AT90S2313 становить 7.3728 МГц.
На схемі вже задане підключення виводів МК до дисплею, яке при бажанні можна змінити.
Підключіть .hex файл до МК на схемі, як описано в лабораторній роботі № 1.
Перед початком симуляції виберіть пункт менюDebug/Configure Diagnostics…У вікні, що з’явиться при цьому (Рис. 12, а) клікніть напроти пункту PG128128A (LCD) та для кожного з підпунктів виберітьTrace Information Level: Full Trace. Відповідно, в процесі симуляції схеми у вікні Simulation Log буде виводитися інформація про всі внутрішні події дисплею (Рис. 12, б), що значно полегшує процес відладки.
115

а) |
б) |
Рис. 12. Налаштування виводу інформації у процесі відладки
Запустіть симуляцію схеми і перевірте правильність її функціонування при побудові зображення. При необхідності внесіть зміни у програму та повторіть симуляцію.
3.ЗАВДАННЯ
3.1Домашня підготовка до роботи
1.Вивчити теоретичний матеріал.
2.Вивчити основні властивості, режими роботи та систему команд контролераT6963C необхідні для виконання лабораторної роботи.
3.Підготовити програму побудови зображення згідно індивідуального завдання уТабл. 4. При побудові зображення на вісях повинна бути виведена розмітка. Вісі потрібно підписати. В верхньому правому куті повинна бути виведена Ваша фамілія, під нею функція згідно завдання (див. Рис. 11).
3.2Виконати в лабораторії
1.Створити проект в CodeVisionAVR, ввести свою програму, провести її компіляцію.
2.Відкрити файл LR_6.dsn в програмі Proteus, підключити до МК отриманий в
CodeVisionAVR hex-файл.
3.Запустити режим симуляції схеми та перевірити правильність побудови зображення. При необхідності внести зміни у програму та повторити симуляцію.
4.ЗМІСТ ЗВІТУ
1.Мета роботи.
2.Повний текст завдання.
3.Лістинг програми одержаної в CodeVisionAVR, необхідні розрахунки.
4.Результат симуляції схеми в Proteus (копія екрану з відповідним зображенням).
5.Висновок.
116
5.КОНТРОЛЬНІ ЗАПИТАННЯ
1.Вкажіть склад та призначення блоків з яких складається графічний рідкокристалічний дисплей.
2.Назвіть основні характеристики графічного контролера Т6963С.
3.Опишіть склад та призначення виводів графічного дисплею з контролером Т6963С.
4.Формат та призначення бітів регістру статусу Т6963С ?
5.Наведіть основні команди графічного контролера Т6963С.
6.Наведіть приклад організації відео ОЗП об’ємом 4 Кбайт для дисплею 128х64 пікселів.
7.З яких кроків складається ініціалізація графічного дисплею ?
6.СПИСОК ЛІТЕРАТУРИ
1.Евстифеев А. В. Микроконтроллеры AVR семейства Classic фирмы «ATMEL». – М. Издательский дом “Додэка-ХХI”, 2002. – 288 с.
2.Баранов В. Н. Применение микроконтроллеров AVR: схемы, алгоритмы, программы. – М.: Издательский дом “Додэка-ХХI”, 2004. – 288 с.
3.Голубцов М. С., Кириченкова А. В. Микроконтроллеры AVR: от простого к сложному.
–М.: СОЛОН-Пресс, 2006. – 304 с.
4.Трамперт В. Измерение, управление и регулирование с помощью микроконтроллеров.: Пер. с нем. – К.: МК-Пресс, 2006. – 208 с.
5.Белов А. В. Конструирование устройств на микроконтроллерах. – СПб.: Наука и Техника, 2005. – 256 с.: ил.
6.Лебедев М. Б. CodeVisionAVR: пособие для начинающих. – М.: Додэка-ХХI, 2008. – 592 с.:ил.
117
Табл. 4
№ |
Функція |
Діапазон |
1. |
Y = 3*x+9 |
x = [0…20] |
2. |
Y = 2*x+12 |
x = [0…25] |
3. |
Y = 5*x+16 |
x = [0…50] |
4. |
Y = 7*x+3 |
x = [0…10] |
5. |
Y = 25*x+17 |
x = [0…5] |
6. |
Y = 11*x+5 |
x = [0…45] |
7. |
Y = 31*x+13 |
x = [0…15] |
8. |
Y = 4*x+21 |
x = [0…35] |
9. |
Y = 6*x+4 |
x = [0…40] |
10. |
Y = 23*x+10 |
x = [0…30] |
11. |
Y = 27*x+19 |
x = [0…25] |
12. |
Y = 9*x+18 |
x = [0…30] |
13. |
Y = 10*x+29 |
x = [0…40] |
14. |
Y = 19*x+20 |
x = [0…5] |
15. |
Y = 26*x+21 |
x = [0…35] |
16. |
Y = 1*x+24 |
x = [0…45] |
17. |
Y = 13*x+22 |
x = [0…50] |
18. |
Y = 8*x+25 |
x = [0…45] |
19. |
Y = 15*x+28 |
x = [0…15] |
20. |
Y = 16*x+16 |
x = [0…20] |
21. |
Y = 22*x+15 |
x = [0…10] |
22. |
Y = 28*x+8 |
x = [0…40] |
23. |
Y = 31*x+2 |
x = [0…25] |
24. |
Y = 12*x+11 |
x = [0…35] |
25. |
Y = 14*x+23 |
x = [0…50] |
26. |
Y = 17*x+7 |
x = [0…45] |
27. |
Y = 33*x+8 |
x = [0…30] |
28. |
Y = 36*x+14 |
x = [0…20] |
29. |
Y = 37*x+27 |
x = [0…5] |
30. |
Y = 39*x+1 |
x = [0…10] |
31. |
Y = 24*x+6 |
x = [0…15] |
118
НАВЧАЛЬНЕ ВИДАННЯ
Побудова зображень на графічних рідкокристалічних дисплеях під управлінням AVR-мікроконтролерів
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи № 6 з курсу «Мікропроцесори в системах технічного захисту інформації»
для студентів напряму 6.170102 «Системи технічного захисту інформації»
Укладачі: Cовин Ярослав Романович, доц., к.т.н. Стахів Марта Юріївна, асист.
Комп’ютерне складання: Cовин Ярослав Романович, доц., к.т.н.
119