Команды retlw k и retfie.
Эти команды предназначены для возврата из подпрограмм. Команда retlw возвращает в рабочий регистр W константу, заданную в этой команде, а команда retfie разрешает прерывания. Команда retlw часто используется для чтения таблиц, находящихся в памяти программ.
Пусть, например, в рабочем регистре W содержится смещение от начала таблицы. Тогда получить нужный элемент можно следующей процедурой:
movlw 0x02 ; Задать смещение
call showsym ; Вызов подпрограммы
movwf PORTB ; Вывести элемент таблицы в порт B
goto $ ; Зацикливание программы
showsym
addwf PCL, F ; Сложение регистра W с PCL и пересылка
; результата в PCL
retlw 0xAA ; 0-й элемент таблицы
retlw 0xBB ; 1-й элемент
retlw 0xCC ; 2-й элемент
retlw 0xDD ; 3-й элемент
retlw 0xEE ; 4-й элемент
Программа начинает свою работу с пересылки константы 02h в рабочий регистр W. Затем производится вызов подпрограммы showsym. Ее работа начинается с добавления содержимого регистра W к текущему состоянию младшего байта счетчика команд PCL, и результат помещается в PCL. Таким образом, производится дополнительное смещение счетчика команд на величину, которая была передана в рабочем регистре. Например, если было W=0, то счетчик команд не изменится, и будет выполнена следующая команда retlw 0xAA, которая вызовет возврат из подпрограммы с записью числа AAh в регистр W. Если, как было в приведенной программе, W=02h, то к содержимому PCL будет добавлено число 02h, и произойдет дополнительное смещение на 2 шага. В результате будет выполнена команда retlw 0xCC, которая вызовет возврат из подпрограммы с записью CCh в регистр W.
После возврата из подпрограммы производится пересылка содержимого W в порт B, т.е. вывод в порт. В результате на выводах порта должно быть 11001100.
Задание 2. Занесите пример в базовую программу, выполните ее компилирование и проверьте работу с помощью симулятора в пошаговом режиме. Исследуйте ее работу при различных значениях смещения, например, 0, 1, 3.
3.13. Исследование команд с косвенной адресацией
При просмотре таблиц с перечнем команд МК PIC16F84A вы не увидите специальных мнемоник команд, использующих косвенную адресацию. Дело в том, что любая команда, которая использует прямую адресацию, может также использовать и косвенную. Для обозначения перехода от прямой адресации к косвенной при записи мнемоники команды используется имя регистра INDF. Этот регистр реально не существует, но при его указании в поле прямого адреса операнда центральный процессор использует содержимое регистра FSR в качестве адреса операнда. Поэтому регистр FSR называют регистром косвенной адресации. Например:
addwf INDF,W ; сложить содержимое рабочего регистра W с
; содержимым ячейки памяти, адрес которой находится
; в регистре FSR, результат поместить в регистр W
addwf INDF,F ; сложить содержимое рабочего регистра W c
; содержимым ячейки памяти, адрес которой находится
; в регистре FSR, результат поместить в ту же
; ячейку памяти
Рассмотрим программу, которая заполняет содержимое ячеек памяти данных (регистров МК) константами. В этой программе используется косвенная адресация ячеек памяти данных с помощью регистра FSR. Процесс заполнения выполняется подпрограммой с именем fill_reg. Подпрограмма выполняется в цикле. При каждом проходе цикла выполняется пересылка в ячейку ПД, адрес которой находится в регистре FSR, содержимого рабочего регистра W. Затем содержимое регистра FSR, т.е. адрес ячейки, инкрементируется, а счетчик количества ячеек декрементируется. Перед каждым вызовом подпрограммы в нее передаются входные параметры: в регистре Count содержится количество ячеек, в регистре FSR – начальный адрес массива ячеек, в рабочем регистре W – значение константы. Основная программа производит вызов подпрограммы fill_reg три раза. При первом вызове в ячейки ПД записывается константа Const1, равная 0x01, при втором вызове – константа Const2, равная 0x08, и при третьем вызове – константа Const3, равная 0x0A. Затем процесс заполнения повторяется, так как основная программа зацикливается.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.