Исходные данные и выполнение программы
Изучите программу 3.1, которая выполняет различные действия с двумя константами и выводит результаты работы в регистр REZ. Программа легче читается, если в инструкциях вместо адреса регистра писать его символьное имя. В лабораторной работе №2 мы уже писали в инструкциях вместо адресов РСН их имена: PORTC, TRISC, STATUS, W и присваивали символьные имена РОН, используя R1 EQU h’21’. Указатель EQU от equal (англ.) – одинаковый, равносильный. В микроконтроллерах PIC16F87x операция вычитания выполняется как сложение в дополнительном коде. Ниже приведены простые примеры перевода вычитаемого в дополнительный код. А) 8-10=-2 В двоичном виде: 00001000 – 00001010 Запишем 00001010 в инверсном коде: 11110101. Для получения дополнительного кода добавим 1. Получим 11110110. + 11110110 = 11111110 Результат выражен в дополнительном коде. Отнимем 1 от результата: 11111110 – 1=11111101. Инвертируем результат: 00000010=2. Б) 10-8=2 Запишем 00001000 в дополнительном коде, произведя инвертирование и потом добавление 1: 11110111 + 1 = 11111000. 11111010 + 11111000 = 00000010 = 2, при этом отметим, что произошел перенос в 8-й разряд. Задание: создать программу, позволяющую проверить результат применения инструкций логических операций и отследить реакцию содержимого разрядов 0-2 в регистре STATUS после выполнения предшествующей операции. Появление флагов (1) или их отсутствие (0) позволяет изменять работу программы при использовании инструкций BTFSS и BTFSC. Программа 3.1. Include <p16F877А.inc>; в этом файле описаны символьные имена РСН. R1 EQU h'21'; R1 - символьное имя регистра по адресу h’21’. R2 EQU h'22'; R2 - символьное имя регистра по адресу h’22’. R3 EQU h'23'; R3 - имя регистра по адресу h’23’. REZ EQU h'24'; REZ - имя регистра для записи результатов. ; Инструкции для настройки МК
ORG h'00'; следующая инструкция NOP будет записана по адресу h’00’. NOP; пишется для настройки отладчика. NOP NOP ORG h'05'; следующая инструкция CLRF запишется по адресу h’05’. CLRF STATUS; очищаем регистр от мусора, выбираем нулевой банк. ; сохранить окно BSF STATUS, 5; переходим в первый банк в нём регистр TRISC. CLRF TRISC; настраиваем все биты PORTC на вывод данных. BCF STATUS, 5; возвращаемся в нулевой банк. ; Рабочая часть программы. Ввод данных MOVLW D'240'; запись константы в аккумулятор W. MOVWF R1; запись содержимого W в регистр R1. MOVLW D'130'; запись константы в аккумулятор W. MOVWF R2; запись содержимого W в регистр R2. MOVLW D'5'; запись константы в W. MOVWF R3; запись содержимого W в регистр R3. ; сохранить окно ; Выполнение вычислений MOVF R1, W; запись константы из R1 в регистр W. SUBWF R2, W; вычитание W=R2-W=R2- R1. MOVWF REZ; переслать содержимое W в регистр REZ. ; сохранить окно MOVF R2, W; запись константы из R2 в регистр W. ADDWF R1, W; W=R2+W=R1+R2. MOVWF REZ ; сохранить окно MOVF R2, W; копируем содержимое R2 в W. SUBWF R1, W; вычитание W=R1-W=R1-R2. Результат оставляем в W. MOVWF REZ; переслать содержимое W в регистр REZ ; сохранить окно MOVF R2, W; запись константы в регистр W из R2. ADDWF R3, W; W=R3+W=R2+R3. MOVWF REZ ; сохранить окно MOVF R2, W; запись константы в регистр W из R2. SUBWF R2, W MOVWF REZ ; сохранить окно MOVF R2, W; запись константы в регистр W из R2. ANDWF R1, W; операция W=R1 AND W(R2), результат в W. MOVWF REZ ; сохранить окно MOVF R2, W; запись константы в регистр W из R2. ORWF R1, W; операция W=R1 OR W(R2), результат в W. MOVWF REZ ; сохранить окно MOVF R2, W; запись константы в регистр W из R2. XORWF R1, W; операция W=R1 XOR W(R2), результат в W. MOVWF REZ ; сохранить окно RRF R1,w;деление на 2 без очистки бита С регистра STATUS. После выполнения;сдвига вправо сдвигаемый бит 0 из регистра R1 переместился в бит С регистра STATUS, а;единица из бита С регистра STATUS добавилась слева к значению регистра R1 и;сохранилась в аккумуляторе W. Значение неверно. MOVWF REZ ; сохранить окно RLF R1,w; 240*2=480, произошло переполнение регистра, в нем осталось 480-256=224,;в бите С регистра STATUS появилась 1, чтобы операция деления выполнилась верно, надо;его обнулить
MOVWF REZ ; сохранить окно BCF STATUS,C RRF R1,w MOVWF REZ ; сохранить окно END; конец программы.
Данные для варианта возьмите из таблицы 3.2.
Т а б л и ц а 3.2 – Варианты задания
Оформление отчета по лабораторной работе Отчет выполняется на группу по результатам выполнения лабораторной работы в режиме MPlabSim. В вордовском файле сохраняется текст программы и через PrtSc - характерное состояние регистров в окне при пошаговом выполнении программы. В этот же файл включается таблица 3.3, данные в которую записываются при пошаговом выполнении программы в режиме MPlabSim. Отчет в формате Word сохраняется в общей папке компьютерного класса. Защита производится на следующем занятии. Т а б л и ц а 3.3 - Пример записи результатов работы команд
Создайте окно наблюдения для всех применяемых в программе регистров в необходимом формате чисел. Результаты работы всех операций с числами запишите в таблицу 3.2. Выводы 3.4.1Для получения правильного применения инструкций RRF и RLF перед ее применением необходимо обнулить бит С в регистре STATUS. 3.4.2 Деление на 2 нечетных чисел выполняется с погрешностью.
3.5 Контрольные вопросы
1. Как определить с регистрами какого банка работает программа?
2. Что выполняет инструкция ADDWF R1,F и в какой регистр помещается результат ее выполнения? 3. Что выполнят инструкция SUBWF R2,F и в какой регистр помещается результат ее выполнения? 4. Что выполняет инструкция ANDWF R1,F и в какой регистр помещается результат ее выполнения? 5. Что выполняет инструкция IORWF R1,W и в какой регистр помещается результат ее выполнения? 6. Что выполняет инструкция XORWF R2,W и в какой регистр помещается результат ее выполнения? 7. Приведите инструкции установки и сброса бита. 8. Назначение директивы ORG h’05’. 9. Приведите таблицы истинности логических операций. 10. Назовите знакомые вам устройства, в которых применяются МК. 11. На какие части делится программа? 12. В каком банке находятся созданные в программе регистры R1, R2 и REZ. 13. Какой результат мы увидим при сложении 230+60 в МК? 14. Какой результат мы увидим при вычитании 130-135 в МК? 15. Что надо делать, чтобы операции деления на 2 и умножения на 2 выполнялись верно?
Таймеры
Цель работы: изучение способов создания задержек выполнения следующей инструкции, в соответствии с реализацией управляющего алгоритма. Например, такие задержки нужны в цикле АПВ, в реализации алгоритмов АЧР и т.д. Краткие теоретические сведения и задания для внеаудиторной подготовки Реализацию пауз между следующими друг за другом инструкциями можно осуществить созданием таймеров на основе вложенных циклов и использования периферийных устройств микроконтроллера - таймеров: ТМR0, ТМR1 и ТМR2. Задания для внеаудиторной подготовки Изучите работу таймеров ТМR0, ТМR1 и ТМR2 и назначение регистра PCL по [11] и приложению Г, а также инструкции DECF.
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|