
- •1 Вивчити систему роботи стека мк51. 32
- •1 Вивчити систему роботи стека мк51. 38
- •1 Вивчити систему роботи стека мк51. 41
- •1 Вивчити систему роботи стека мк51. 49
- •1 Загальні положення
- •1.1 Вступ
- •1.2 Вимоги з техніки безпеки
- •1.3 Загальні вимоги до підготовки, проведення та здавання лабораторних робіт
- •1.1Порядок підготовки до лабораторної роботи
- •1.2Порядок проведення лабораторної роботи
- •1.3Здавання лабораторних робіт
- •1.4Вимоги до форми та змісту звіту
- •1.3.4.1 Вимоги до змісту звіту до однієї лабораторної роботи
- •1.4 Робота зі стендом
- •2 Лабораторна робота 1. Вивчення стенда і команд однокристальної еом сімейства mcs-51
- •Порядок виконання лабораторної роботи
- •Приклад виконання лабораторної роботи 1
- •Короткі теоретичні відомості Системи відображення інформації.
- •Система переривань еом 80c51
- •Структура переривань
- •Приклад програми:
- •Режими роботи таймерів-лічильників
- •Приклад програми
- •Порядок виконання лабораторної роботи
- •Приклад програми
- •Варіанти індивідуальних завдань
- •Список літератури
- •Абрайтис в.Б. Быстродействующие интегральные микросхемы " Электронная промышленность ", 1989.
- •Додаток а (довідковий) Теоретичні відомості.
- •Система команд mk51 Структура інформаційних зв'язків
- •Група команд операцій з бітами
Група команд операцій з бітами
Таблиця А.5 - Група команд операції з бітами
Назва команди |
Мнемокод |
КОП |
Операція |
Скидання перенесення |
CLR C |
11000011 |
((C) = 0 |
Скидання біта |
CLR bit |
11000010 |
((b) = 0 |
Установлення перенесення |
SETB C |
11010011 |
((C) = 1 |
Установлення біта |
SETB bit |
11010010 |
((b) = 1 |
Інверсія перенесення |
CPL C |
10110011 |
(C) = ( ¬C) |
Інверсія біта |
CPL bit |
10110010 |
(b) = ( ¬b) |
Логічне І біта і перенесення |
ANL C, bit |
10000010 |
((C(b) |
Логічне І інверсії біта і перенесення |
ANL C, /bit |
10110000 |
(C( ¬b) |
Логічне АБО біта і перенесення |
ORL C, bit |
01110010 |
((C(b) |
Логічне АБО інверсії біта і перенесення |
ORL C, /bit |
10100000 |
(C(¬b) |
Пересилка біта в перенесення |
MOV C, bit |
10100010 |
((C) = (b) |
Пересилка перенесення в біт |
MOV bit, C |
10010010 |
((b) = (C) |
Існують команди скидання (CLR), установлення (SETB) і інверсії (CPL) біт, а також кон'юнкції і диз'юнкції біта і прапорця перенесення. Для адресації біт використовується пряма адреса. Непряма адресація бітів неможлива.
Група команд передавання керування
Таблиця А.6 - Група команд передавання керування
Назва команди |
Мнемокод |
КОП |
Т |
Б |
Ц |
Операція |
Довгий перехід в повному об'ємі пам'яті в програмі |
LJMP ad16 |
00000010 |
12 |
3 |
2 |
((PC) = ad16 |
Абсолютний перехід усередині сторінки 2 Кбайта |
AJMP ad11 |
a10a9a800001 |
6 |
2 |
2 |
((PC) = (PC) + 2 (PC0 - 10) = =ad11 |
Короткий відносний перехід усередині сторінки 256 байтів |
SJMP rel |
10000000 |
5 |
2 |
2 |
((PC) = (PC) + 2 ((PC) = (PC) + rel |
Непрямий відносний перехід |
JMP @A+DPTR |
01110011 |
1 |
1 |
2 |
((PC(DPTR) |
Продовження табл. А.6
Перехід, якщо акумулятор дорівнює нулю |
JZ rel |
01100000 |
5 |
2 |
2 |
((PC) = (PC) + 2 якщо (A) = = 0, те (PC) + rel |
Перехід, якщо акумулятор не дорівнює нулю |
JNZ rel |
01110000 |
5 |
2 |
2 |
((PC) = (PC) + 2, якщо (A)? 0, те (PC) + rel |
Перехід, якщо перенесення дорівнює одиниці |
JC rel |
01000000 |
5 |
2 |
2 |
((PC) = (PC) + 2 якщо (C) = =1, те (PC) + rel |
Перехід, якщо перенесення дорівнює нулю |
JNC rel |
01010000 |
5 |
2 |
2 |
((PC) = (PC) + 2 якщо (C) = =0, те (PC) + rel |
Перехід, якщо біт дорівнює одиниці |
JB bit, rel |
00100000 |
11 |
3 |
2 |
((PC) = (PC) + 3 якщо (b) = 1, те (PC) + rel |
Перехід, якщо біт дорівнює нулю |
JNB bit, rel |
00110000 |
11 |
3 |
2 |
((PC) = (PC) + 3 якщо (b) = 0, те(PC) + rel |
Перехід, якщо біт встановлений, з подальшими скиданням біта |
JBC bit, rel |
00010000 |
11 |
3 |
2 |
((PC) = (PC) + 3 якщо (b) = 1, те (b) = 0 і(PC) + rel |
Декремент регістра і перехід, якщо не нуль |
DJNZ Rn, rel |
11011rrr |
5 |
2 |
2 |
((PC) = (PC) + 2 ((Rn) = (Rn) - 1, якщо (Rn)? 0, те(PC) + rel |
Продовження табл. А.6
Декремент прямоадресованого байта і перехід, якщо не нуль |
DJNZ ad, rel |
11010101 |
8 |
3 |
2 |
((PC) = (PC) + 2 ((ad) = (ad) - - 1, якщо (ad)? 0, те(PC) + rel |
Порівняння акумулятора з прямоадресованим байтом і перехід, якщо не дорівнює ad |
CJNE A, ad, rel |
10110101 |
8 |
3 |
2 |
((PC) = (PC) + 3 якщо (A)? (ad), те(PC) + rel, якщо (A)< <(ad), те (C) = 1, інакше (C) = =0 |
Порівняння акумулятора з константою і перехід, якщо не дорівнює d |
CJNE A, #d, rel |
10110100 |
10 |
3 |
2 |
((PC) = (PC) + 3 якщо (A)? #d, те(PC) + rel, якщо (A)< <#d, те (C) = 1, інакше (C) = =0 |
Порівняння регістра з константою і перехід, якщо не дорівнює d |
CJNE Rn, #d, rel |
10111rrr |
10 |
3 |
2 |
((PC) = (PC) + 3 якщо (Rn)? #d, те(PC) + rel, якщо (Rn)< <#d, те (C) = 1, інакше (C) = =0 |
Продовження табл. А.6
Порівняння байта в РПД з константою і перехід, якщо не дорівнює d |
CJNE @Ri, #d, rel |
1011011i |
10 |
3 |
2 |
((PC) = (PC) + 3 якщо ((Ri))? #d, те(PC) + rel, якщо ((Ri))< <#d, те (C) = 1, інакше (C) = =0 |
Довгий виклик підпрограми |
LCALL ad16 |
00010010 |
12 |
3 |
2 |
((PC) = (PC) + 3, ((SP) = (SP) + 1, ((SP)) = (PC0 - 7), ((SP) = (SP) + 1, ((SP)) = (PC8 - 15), ((PC) = ad16 |
Абсолютний виклик підпрограми в межах сторінки 2 Кбайта |
ACALL ad11 |
a10a9a810001 |
6 |
2 |
2 |
((PC) = (PC) + 2 ((SP) = (SP) + 1, ((SP)) = (PC0 - 7) ((SP) = (SP) + 1 ((SP)) = (PC8 - 15), (PC0 - 10) = ad11 |
Повернення з підпрограми |
RET |
00100010 |
1 |
1 |
2 |
(PC8 - 15) = ((SP)), ((SP) = (SP) - 1, (PC0 - 7) = ((SP)), ((SP) = (SP) - 1 |
Продовження табл. А.6
Повернення з підпрограми обробки переривання |
RETI |
00110010 |
1 |
1 |
2 |
(PC8 - 15) = ((SP)), ((SP) = (SP) - 1, (PC0 - 7) = ((SP)), ((SP) = (SP) - 1 |
«Пуста» команда |
NOP |
00000000 |
1 |
1 |
1 |
((PC) = (PC) + 1 |
Примітка. Асемблер допускає використання узагальненого імені команд JMP і CALL, які у процесі трансляції замінюються оптимальними за формату командами виклику (ACALL, LCALL) або переходу (AJMP, SJMP, LJMP) |
Довгий перехід. Перехід по усьому адресному простору ПП. У команді знаходиться повна 16-бітова адреса переходу (ad 16). Трьохбайтові команди довгого переходу містять у мнемокоді букву L (Long). Всього існує дві такі команди: LJMP - довгий перехід і LCALL - довгий виклик підпрограми. На практиці рідко виникає необхідність переходу в межах усього адресного простору і частіше використовуються укорочені команди переходу, що займає менше місця в пам'яті.
Абсолютний перехід. Перехід у межах однієї сторінки пам'яті програм розміром 2048 байт. Такі команди містять тільки 11 молодших бітів адреси переходу (ad 11). Команди абсолютного переходу мають формат 2 байти. Початкова буква мнемокоду - A (Absolute). При виконанні команди у вичисленій адресі наступної по порядку команди ((РС)= (PC) + 2) 11 молодших бітів замінюються на ad11 з тіла команди абсолютного переходу.
Відносний перехід. Короткий відносний перехід дозволяє передати управління в межах - 128 - +127 байтів відносно адреси наступної. Існує одна команда безумовного короткого переходу SJMP (Short). Усі команди умовного переходу використовують цей метод адресації. Відносна адреса переходу (rel) міститься в другому байті команди.
Продовження додатка А
Непрямий перехід. Команда JMP @A + DPTR дозволяє передавати управління за непрямою адресою. Ця команда зручна тим, що надає можливість організації переходу за
адресою, що обчислюється самою програмою і невідомому при написанні початкового тексту програми.
Умовні переходи. Розвинена система умовних переходів надає можливість здійснювати перенесення за такими умовами: акумулятор містить нуль (JZ); вміст акумулятора не дорівнює нулю (JNZ); перенесення дорівнює одиниці (JC); перенесення дорівнює нулю (JNC); біт, що адресується, дорівнює одиниці (JB); біт, що адресується, дорівнює нулю (JNB).
Для організації програмних циклів зручно користуватися командою DJNZ, яка працює аналогічно відповідній команді МК48. Проте як лічильник циклів у МК51 може використовуватися не лише регістр, але і прямоадресований байт.
Команда CJNE ефективно використовується в процедурах очікування якої-небудь події. Наприклад, команда
WAIT: CJNE A, P0, WAIT
виконуватиметься до тих пір, поки на лініях порту 0 не встановиться інформація, яка збігається з вмістом акумулятора.
Підпрограми. Для звернення до підпрограм необхідно використовувати команди виклику підпрограм (LCALL, ACALL). Ці команди на відміну від команд переходу (LJMP, AJMP) зберігають в стеку адресу повернення в основну програму. Для повернення з підпрограми необхідно виконати команду RET або RETI.