Порядок проведения лабораторной работы. 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-й бит порта В.