Порядок проведения лабораторной работы. 1. Создайте новый проект и введите программу, листинг которой представлен на рисунке 3
1. Создайте новый проект и введите программу, листинг которой представлен на рисунке 3. 17.
2. Проанализируйте комментарии к программе.
3. Откомпилируйте проект и перейдите к режиму симуляции.
4. Откройте окна регистров специальных функций и ОЗУ данных.
5. Выполняя в пошаговом режиме (F7) проанализируйте содержимое регистров STATUS, FSR и содержимое порта PORTB.
6. По номеру варианта выберите временную диаграмму из таблицы 3.9.
7. Напишите и отладьте программу, которая с помощью логических команд воспроизводит на линиях порта PORTC сигналы, что и в вашем варианте.
8. Пример программы приведён: LAB-Элат \ Lab_Digital \ Mps_2\ Примеры \ out_port. asm.
Таблица 3.9 Варианты заданий
Вариант - 1 | ||||||||
PORTC,0 | ||||||||
PORTC,1 | ||||||||
PORTC,2 | ||||||||
Вариант - 2 | ||||||||
PORTC,0 | ||||||||
PORTC,1 | ||||||||
PORTC,2 | ||||||||
Вариант - 3 | ||||||||
PORTC,0 | ||||||||
PORTC,1 | ||||||||
PORTC,2 | ||||||||
Вариант - 4 | ||||||||
PORTC,0 | ||||||||
PORTC,1 | ||||||||
PORTC,2 | ||||||||
Вариант - 5 | ||||||||
PORTC,0 | ||||||||
PORTC,2 | ||||||||
PORTC,4 | ||||||||
Продолжениетаблица 3.9 Варианты заданий
Вариант - 6 | ||||||||
PORTC,0 | ||||||||
PORTC,2 | ||||||||
PORTC,4 | ||||||||
Вариант - 7 | ||||||||
PORTC,0 | ||||||||
PORTC,2 | ||||||||
PORTC,4 | ||||||||
Вариант - 8 | ||||||||
PORTC,0 | ||||||||
PORTC,2 | ||||||||
PORTC,4 | ||||||||
Вариант - 9 | ||||||||
PORTC,1 | ||||||||
PORTC,3 | ||||||||
PORTC,7 | ||||||||
Вариант - 10 | ||||||||
PORTC,1 | ||||||||
PORTC,3 | ||||||||
PORTC,7 | ||||||||
Вариант - 11 | ||||||||
PORTC,1 | ||||||||
PORTC,3 | ||||||||
PORTC,7 | ||||||||
Вариант - 12 | ||||||||
PORTC,1 | ||||||||
PORTC,3 | ||||||||
PORTC,7 | ||||||||
Вариант - 13 | ||||||||
PORTC,2 | ||||||||
PORTC,4 | ||||||||
PORTC,6 | ||||||||
Вариант - 14 | ||||||||
PORTC,2 | ||||||||
PORTC,4 | ||||||||
PORTC,6 | ||||||||
Вариант - 15 | ||||||||
PORTC,2 | ||||||||
PORTC,4 | ||||||||
PORTC,6 | ||||||||
Вариант - 16 | ||||||||
PORTC,2 | ||||||||
PORTC,4 | ||||||||
PORTC,6 | ||||||||
Вариант - 17 | ||||||||
PORTC,0 | ||||||||
PORTC,5 | ||||||||
PORTC,7 | ||||||||
Вариант - 18 | ||||||||
PORTC,0 | ||||||||
PORTC,5 | ||||||||
PORTC,7 | ||||||||
3.5.5 Контрольные вопросы:
1. Предскажите содержимое аккумулятора W в результате действия команды XORLW k,где W = k?
2. Какие флаги модифицируются при этом?
3. Как можно реализовать логическую функцию, устанавливающую в <1> все биты при сравнении одинаковых Wи k.
4. Какому арифметическому действию эквивалентна команда RRF TMP,W?
5. Сколько раз необходимо применить команду RLF TMP,F,при (STATUS<0>) = 0,чтобы содержимое регистра TMPизменилось с 0Fh до F0h?
3.6 Лабораторная работа № 6
«КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ»
Цель работы
Изучить команды логической обработки и маскирования данных, при операциях ввода/вывода в микроконтроллере.
3.6.2 Краткие сведения
Данная группа команд состоит из 9 команд (Таблица 3.10), позволяющих прервать последовательный ход выполнения программы и передавать управление в любую точку адресного пространства. Передача управления может осуществляться с возвратом в точку вызова или без него.
Для передачи управления в другую точку программы без возврата служат команды безусловного (GOTO k) и условного переходов.
Для передачи управления в другую точку программы с возвратом в точку вызова служат команды вызова подпрограмм (CALL k)и возврата из неё.
Таблица 3.10 Группа командпередачи управления
Мнемокод | Описание | Флаги | |
DECFSZ | f, d | Вычесть 1 из f и пропустить если 0 | Z |
DECFSZ | f, W | (f) - 1 ® (W) / If (W) = 0 then NOP | |
DECFSZ | f, F | (f) – 1 ® (f) / If (f) = 0 then NOP | |
INCFSZ | f, d | Прибавить 1 к f и пропустить если 0 | Z |
INCFSZ | f, W | (f) + 1 ® (W) / If (W) = 0 then NOP | |
INCFSZ | f, F | (f) + 1 ® (f) / If (f) = 0 then NOP | |
BTFSC | f, b | Если F(b) = 0 то пропустить | Z |
BTFSS | f, b | Если F(b) = 1 то пропустить | |
CALL | k | Вызов подпрограммы | Z |
PC+1®TOS / k®PC(10÷0) / PCLATH(4,3) ® PC(12,11) | |||
GOTO | k | Безусловный переход | Z |
k®PC(10÷0) / PCLATH(4,3) ® PC(12,11) | |||
RETFIE | – | Возврат из п/п с разрешением прерываний | С |
TOS®PC / 1®GIE | |||
RETLW | k | Возврат из п/п с загрузкой константы в W | С |
TOS®PC /(k) ® (W) | |||
RETURN | – | Возврат из п/п / TOS®PC | Z |
Команды условного перехода осуществляют пропуск следующей за ними команды если заданное условие не выполняется. Дополненные командой безусловного перехода представляют собой функцию проверки условия с ветвлением.
Подпрограмма – это последовательность команд, записанная в память только один раз, однако её можно вызывать для выполнения из нескольких точек программы.
Подпрограмма представляет удобное средство для:
1. Разбиения сложной программы на небольшие фрагменты, разработка и отладка которых может вестись параллельно;
2. Сокращения длины программы за счёт реализации в виде повторяющихся фрагментов (экономия памяти);
3. Накопление библиотек отлаженных алгоритмов (это предоставляет в распоряжение коллектива программистов некоторый набор часто встречающихся функций).
Вызов подпрограммы осуществляется путём указания её имени в команде CALL NAME. Последней командой подпрограммы является RETURN, RETLW kилиRETFIE.
Рассмотрим пример организации циклического опроса кнопки, подключенной, например к PORTB<RB3>. Кнопка замыкает вход <RB3> на общий провод.
Инженерная интерпретация задачи заключается в обнаружении факта нажатия (замыкания), ожидания 20ms до окончания процесса дребезга контактов кнопки и обнаружения отпускания кнопки.
В упрощенном виде процедура анализа выглядит следующим образом:
BEGIN: btfsc PORTB, 3 ; нажата ли кнопка?
goto $-1 ; если нет то переход на шаг назад
call DELAY_SCAN ; задержка 20ms
btfsc PORTB, 3 ; подтверждение нажатия кнопки
goto BEGIN ; если нет то переход к началу
btfss PORTB, 3 ; отпустили ли кнопку ?
goto $-1 ; если нет то переход на шаг назад
Примечание:
1. $ - текущий адрес, поэтому равнозначны следующие команды: goto BEGIN или goto $-4. Разница лишь в том, что в команде goto $-4 надо вычислять смещение, а в команде goto BEGIN – нет.
2. DELAY_SCAN – это метка (адрес) начала подпрограммы временной задержки на 20ms.
Реализуем временную задержку в 20ms программным способом. При тактовой частоте Fтакт = 4МГц время одного машинного цикла равно Тцикла = 1μs.
При выборе микроконтроллера Fтакт = 4МГц устанавливается по умолчанию (Раздел 3.1, рисунок 3.5, инструмент Clokc ).
Организуя последовательное вычитание, с проверкой на ноль какой-либо ячейки памяти, мы можем получить Тзад примерно равное 256 μs. Следовательно, эту операцию придётся повторить несколько раз. Примерный фрагмент программы, реализующий задержку Тзад = 20ms, приведён ниже.
DELAY_SCAN:
movlw 09h ;
movwf TMP1 ; TMP1 = 09h
movlw 00h ;
movwf TMP0 ; TMP0 = 00h
NEXT: decfsz TMP0,F ; TMP0 = TMP0 - 1
goto NEXT ; если Z ≠ 0 то переход
decfsz TMP1,F ; TMP1 = TMP1 - 1
goto NEXT ; если Z ≠ 0 то переход
return
В результате, вычитание из TMP0 будет происходить 9 раз, что приблизительно равно задержке в Тзад = 20ms.
Установление времени задержки основывается на анализе времени выполнения каждой команды. Время выполнения отдельных команд представлено в таблице 3.11.
Таблица 3.11
Команда | Время выполнения | |
DELAY_SCAN | Вызов п/п 2μs | |
movlw 09h | 1μs | |
movwf TMP1 | 1μs | |
movlw 00h | 1μs | |
movwf TMP0 | 1μs | |
decfsz TMP0,F | 256*1μs | 256*(1μs+2μs)+ 1μs |
goto NEXT | 2 μs | |
decfsz TMP1,F | 9*1μs | 9*(1μs+2μs) |
goto NEXT | 2 μs | |
return | Возврат 2 μs + 1μs NOP(когда Z = 0) |
Итого: 6μs+[256*(1μs+2μs)+ 1μs]*[9*(1μs+2μs)]+1μs+2μs = 20,772ms.
Содержание лабораторной работы
Реализовать программу организации циклического опроса кнопки, подключенной к PORTB<RB3>. Кнопка замыкает вход <RB3> на общий провод. В случае обнаружения замыкания проинвертировать 7-й бит порта В.