Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Исходные данные и выполнение программы




 

Изучите программу 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 – Варианты задания

Вариант Числа R1, R2, R3 Вариант Числа R1, R2, R3
  81h, 12h, 1h   86h, 67h, 6h
  82h, 23h, 2h   87h, 68h, 7h
  83h, 34h, 3h   88h, 69h, 8h
  84h, 45h, 4h   89h, 6Ah, 9h
  85h, 56h, 5h   8Ah, 6Bh, Ah

 

Оформление отчета по лабораторной работе

Отчет выполняется на группу по результатам выполнения лабораторной работы в режиме MPlabSim. В вордовском файле сохраняется текст программы и через PrtSc - характерное состояние регистров в окне при пошаговом выполнении программы. В этот же файл включается таблица 3.3, данные в которую записываются при пошаговом выполнении программы в режиме MPlabSim. Отчет в формате Word сохраняется в общей папке компьютерного класса. Защита производится на следующем занятии.

Т а б л и ц а 3.3 - Пример записи результатов работы команд

Числа на входе Действие Результат Значение в Status Форма B
Форма B или D Форма B или D REZ(D) Wreg(B)
    CLRF STATUS      
R1=D’240’ R2=D’130’ R1-R2=240-130 D’110’ -  
    BCF STATUS,0      
R1=D’240’ R2=D’130’ R1+R2=240+130 D’114’ -  
R1=D’240’ R2=D’130’ R2-R1=130-240 D’146’ -  
R2=D’130’ R3=D’5’ R2+R3=130+5 D’135’ -  
R2=D’130’ R2=D’130’ R2-R2130-130 D’0’ -  
R1=D’240’ R2=D’0’ R2-R1=0-240 D’16’ -  
R1=b’11110000’ R2=b’10000010’ R1 AND R2 -    
R1=b’11110000’ R2=b’10000010’ R1 OR R2 -    
R1=b’11110000’ R2=b’10000010’ R1 XOR R2 -   00011011
Результат неверный R1/2 RRF     00011010
Результат правильный R1/2 RRF      
  R1*2 RLF      
    BCF STATUS,C      
  R1/2 RRF      

Создайте окно наблюдения для всех применяемых в программе регистров в необходимом формате чисел. Результаты работы всех операций с числами запишите в таблицу 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 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...