Читайте также: |
|
Дослідження внутрішньої й зовнішньої пам'яті даних і пам'яті програм
Ціль роботи: закріпити знання студентів при роботі з відлагоджувачем, вивчення команд пересилань із непрямою адресацією, покажчиків, роботу з масивами.
Теоретичні відомості. Пам'ять даних необхідна для приймання, зберігання й видачі інформації, використовуваної в процесі виконання програми. Пам'ять програм призначена для їх зберігання, а також для приймання, зберігання й видачі інформації, використовуваної в процесі виконання програми.
Для звертання до зовнішньої пам'яті даних використовується команда MOVX. Є два типи команд, що відрізняються забезпеченням 8-бітової або 16- бітової непрямої адреси до зовнішнього ОЗП даних. У першому випадку необхідно використовувати регістри R0 і R1 банків регістрів, уміст яких забезпечує 8-бітову адресу, яка мультиплексується з даними порту Р0. У другому випадку при виконанні вищевказаної команди покажчик даних DPTR генерує 16-бітова адреса.
Команда MOVC A,@A+dptr здійснює звертання до пам'яті програм і пересилає з неї байт коду в акумулятор. Адреса зчитуваного байта обчислюється як сума 8-бітового вихідного вмісту акумулятора без знака й умісту DPTR. Тому в лабораторній роботі перед звертанням до ПП рекомендується скинути вміст акумулятора.
При асемблерному програмуванні мікроконтролерів сім’ї МК51 здійснювати бітову адресацію можна, указавши адресу біта або безпосередньо
сам біт. Наприклад, запис JNB A.4,M1 або JNB Е4Н,M1 (адреса четвертого біта акумулятора) буде сприйматися відлагоджувачем однаково.
Нижче наведені фрагменти вікон робочого середовища Mcstudio і пояснення виконання команд пересилань із непрямою адресацією
Непряма адресація
Рис. 1. Виконання команди mov A,@R1
Команда MOV A,@Ri виконує пересилання в акумулятор умісту гнізда внутрішньої пам'яті даних. Адреса регістру (галузі 1) вказується в молодшому біті коду операції. Адреса гнізда (галузі 2) перебуває в регістрі-покажчику. Регістром-покажчиком можуть виступати тільки регістри R0 і R1.
Рис. 2. Виконання команди mov @r0,A
Команда MOV @Ri,A виконує пересилання вмісту акумулятора в гніздо внутрішньої пам'яті даних. Адреса гнізда перебуває в регістрі-покажчику. Регістром-покажчиком можуть виступати тільки регістри R0 і R1.
Приклад задання. Написати програму для мікроконтролера МCS-51, яка складає за модулем два елементи двох масивів довжиною 10 байтів. Перший масив перебуває у внутрішній пам'яті даних контролера, починаючи з адреси 60h. Другий – у пам'яті програм контролера, починаючи з адреси 40h. Результат додавання за модулем масивів записується на місце першого. Якщо в четвертому біті результату додавання за модулем два є «1», то, починаючи з адреси 51h у зовнішній пам'яті даних, записується адреса цього байта. Після обробки масиву в гніздо 50h зовнішньої пам'яті даних записується кількість отриманих покажчиків. При роботі із зовнішньою пам'яттю використовується однобайтова адресація.
Примітка. При написанні програми задається лише один масив, що перебуває в пам'яті програм, починаючи з адреси 40Н. Другий масив можна
задати безпосередньо в процесі роботи з відлагоджувачем, записавши елементи масиву в заданій області внутрішньої пам'яті даних (у цьому випадку – з адреси 60Н) і зберігши їх в окремому файлі. Результат виконання програми значення вихідного масиву можна побачити у вікні резидентної пам'яті даних (РПД). Для цього в головному меню необхідно вибрати пункт Вид – Резидентна пам'ять даних.
Текст програми мовою Асемблера
org 00h
|
MOVC A,@A+dptr; додавання за модулем два n-х елементів масивів XRL A,@R0; і пересилання результату на місце першого MOV @R0,A
JNB A.4,M1; перевірка на «1» четвертого біта результату додавання за модулем два
MOV A,R0; запис адреси результату додавання за модулем два, у якому
; четвертий біт одиничний
MOVX @R1,A
INC R1; інкремент адрес масивів
INC R2 M1: INC R0
INC dptr
DJNZ R3,M2; перевірка масивів на їхнє закінчення
MOV R1,#50H; запис кількості отриманих покажчиків при адресації MOV A,R2; до зовнішньої пам'яті в гніздо 50h зовнішньої пам'яті даних MOVX @R1,A
org 40h
M3: DB 01H,12H,43H,36H,0feh,37H,63H
DB 80h,0ach,91H; задання масиву в пам'яті програм
End
Звіт повинен містити текст програми, текст індивідуального завдання й блок-схему алгоритму, результат виконання програми.
Початок 1
|
Пересилання в R0 початкової адреси масиву в ВПД
Пересилання в R1 початкової адреси масиву покажчиків
Адреса, у якій зберігається кількість покажчиків при адресації до ВПД
Кількість елементів масивів – в R3
Ні R3=0
|
Пересилання в акумулятор вмісту комірки пам'яті програм, що перебуває за адресою в DPTR
Додавання за модулем два
Збереження вмісту акумулятора за адресою в R0
А.4=0
Так
Ні | |
Пересилання вмісту гнізда, що зберігається за адресою в R0 в акумулятор | |
1
Блок-схема програми складання за модулем двох масивів
Індивідуальні задання:
Варіант 1. Написати програму, яка обчислює двобайтову суму елементів масиву, розташованого в пам'яті програм з адреси 50Н. Довжина вихідного масиву – 12 однобайтових елементів.
Варіант 2. Написати програму, яка виконує множення елементів масиву, розташованого в пам'яті програм з адреси 80Н на 25, і двобайтовий добуток зберігає у вигляді масиву у внутрішній пам'яті даних з адреси 30Н. Довжина вихідного масиву – 8 однобайтових елементів.
Варіант 3. Написати програму, яка виконує сортування елементів масиву, розташованого в пам'яті програм з адреси 70Н. Парні елементи зберігаються у внутрішній пам'яті даних з адреси 30Н, а непарні – в зовнішній пам'яті даних з адреси 50Н. Довжина вихідного масиву – 10 однобайтових елементів.
Варіант 4. Написати програму, яка виконує ділення елементів масиву, розташованого в пам'яті програм з адреси 80Н, на 3. Ціле від ділення зберігається у внутрішній пам'яті даних з адреси 50Н, а залишок – у зовнішній пам'яті даних з адреси 20Н. Довжина вихідного масиву – 15 однобайтових елементів.
Варіант 5. Написати програму, яка виконує додавання за модулем 2 елементів масиву, розташованого в пам'яті програм з адреси 20Н із умістом комірки пам'яті за адресою 55Н. Довжина вихідного масиву – 12 однобайтових елементів. Результат розмістити за адресою 30Н.
Варіант 6. Написати програму, яка виконує додавання елементів масиву, розташованого в пам'яті програм з адреси 100Н із умістом комірки пам'яті за адресою 25Н, і результат зберігає у вигляді масиву у внутрішній пам'яті даних з адреси 30Н. Довжина вихідного масиву – 10 однобайтових елементів.
Варіант 7. Написати програму, яка виконує сортування елементів масиву, розташованого в пам'яті програм з адреси 50Н. Негативні елементи зберігаються у внутрішній пам'яті даних з адреси 20Н, а позитивні – в зовнішній пам'яті даних з адреси 60Н. Довжина вихідного масиву 10 однобайтових елементів. Ознакою негативного числа є 1 в D7.
Варіант 8. Написати програму, яка виконує множення елементів масиву, розташованого в пам'яті програм з адреси 80Н, на 5. Результат зберігається у внутрішній пам'яті даних з адреси 50Н. Довжина вихідного масиву – 15 однобайтових елементів.
Варіант 9. Написати програму, яка виконує логічне додавання елементів масиву, розташованого в пам'яті програм з адреси 30Н із константою А5Н. Довжина вихідного масиву – 9 однобайтових елементів. Результат розмістити за адресою 40Н.
Варіант 10. Написати програму, яка виконує сортування елементів масиву, розташованого в пам'яті програм з адреси 50Н. Елементи, що більше 30Н, зберігаються у внутрішній пам'яті даних з адреси 20Н, інші – в зовнішній пам'яті даних з адреси 60Н. Довжина вихідного масиву – 10 однобайтових елементів.
Дата добавления: 2015-07-08; просмотров: 156 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Методика виконання. | | | Лабораторна робота №3 |