Уроки и статьи | |
PIC
Для управления исполнительным устройством, работающим по принципу включено/выключено, на соответствующей выходной линии порта микроконтроллера (МК) необходимо сформировать статический сигнал 0 или 1, что реализуется командами группы «операции с битами регистров» (см. «Система команд»): “BCF f, b” и “BSF f, b”. Например, если необходимо установить в состояние логической «1» нулевой бит порта RB (нулевой бит порта RB условно записывается как RB<0>), то можно воспользоваться командой “BSF f, b”, которая позволяет установить в «1» бит b регистра f. В качестве f можно указать непосредственный адрес регистра порта RB (это 06h, Символ “h” после числа означает, что число записано в шестнадцатиричном формате). В качестве b можно указать номер бита. Т.о. команда на языке ассемблера будет выглядеть следующим образом (заметим, что в программе на ассемблере шестнадцатиричные числа пишутся “H’число’”, а в документации по описанию адресов регистров принято писать “числоh”): BSF
H’06’, H’0’ Однако такая запись не удобна для понимания программы. Поэтому в языке ассемблера есть возможность присвоения регистрам символьных значений. Так для регистра порта RB символьное значение «PORTB». Типовые символьные имена регистров определены в специальном файле с расширением “*.inc”. Для микроконтроллера PIC16F84 (84A) этот файл называется «p16f84.inc» («p16f84a.inc») и расположен в директории, в которой установлена программа MPLAB. Чтобы в программе на ассемблере можно было пользоваться символьными именами, необходимо «подключить» к программе на ассемблере файл «p16f84.inc» («p16f84a.inc»). Для этого существует специальная директива ассемблера – «include». Записывается эта директива одним из двух способов: include
<<include_file>> include
“<include_file>” Указанный в директиве файл читается как исходный текст программы. Если <include_file> указан в кавычках, то поиск файла будет происходить только в указанной директории. Если же он указан в скобках, то поиск файла будет осуществляться в текущей рабочей директории, директории исходного файла и директории, в которой установлена программа MPLAB. Теперь можно написать программу более понятно: Include
< p16f84.inc > BSF
PORTB, H’0’ Для битов порта RB символьные значения в файле «p16f84.inc» не заданы, но их можно определить при помощи специальной директивы ассемблера – «EQU». Директива «EQU» записывается следующим образом: <label>
EQU <expr> Данная запись означает, что константе <label> присваивается значение <expr>. Присвоим символьное значение «LED1» биту 0 порта RB. Теперь программа примет следующий вид: Include
<p16f84.inc> LED1
EQU H’0’ BSF
PORTB, LED1 Еще одна директива – «processor». Она устанавливает тип микроконтроллера, который используется. Записывается следующим образом: processor
<processor_type> С учетом этой директивы получим следующую программу: processor
16F84 Include
<p16f84.inc> LED1
EQU H’0’ BSF
PORTB, LED1 Еще одна необходимая директива «end». Она указывает на окончание текста программы. Добавим данную директиву к программе. Получим: processor
16F84 Include
<p16f84.inc> LED1
EQU H’0’ BSF
PORTB, LED1 End Теперь, чтобы программа стала работоспособной, необходимо определить вывод порта RB<0> как выход (т.к. каждый бит порта RB может быть как входом, так и выходом). Управляющий регистр для порта RB – TRISB находится на странице 1 памяти данных, поэтому сначала необходимо ее установить. Для установки страницы памяти данных в регистре STATUS есть бит RP0, установка которого в 1 и дает возможность работы с банком 1. Воспользуемся командой BSF. processor
16F84 Include
<p16f84.inc> LED1
EQU H’0’
BSF STATUS, RP0 ;установим страницу 1
памяти данных BSF
PORTB, LED1 End Теперь необходимо записать данные в регистр TRISB. Однако одной командой здесь не обойтись. Сначала нужно поместить требуемые данные в регистр W, а потом переместить их из W в TRISB. processor
16F84 Include
<p16f84.inc> LED1
EQU H’0’
BSF STATUS, RP0 ;установим страницу 1
памяти данных
MOVLW B’11111110’ ; RB<0> - на
вывод,
; остальные на ввод
MOVWF TRISB ;запишем из
регистра W в TRISB
BСF STATUS, RP0 ;установим страницу
0 памяти данных BSF
PORTB, LED1 ;включим светодиод End Заметьте, что после записи в регистр TRISB необходимо снова перейти на страницу 0 памяти данных, т.к. регистр порта PORTB находится на этой странице. Таким образом, при написании программ нужно внимательно следить за переключением страниц памяти данных во избежание ошибок. Также в команде MOVLW была использована двоичная константа, предваряемая префиксом «B». Подведем некоторый итог. Выше в программах на ассемблере использовались директивы ассемблера и команды микроконтроллера. Директивы
ассемблера – это команды, которые
входят в состав исходного текста
программы, но непосредственно не
включаются в выходной код. Они
используются для управления
ассемблером, параметрами ввода-вывода
и распределением данных. Выше были рассмотрены директивы, которые понадобятся во многих программах. Другие, реже используемые директивы будут рассмотрены в следующих занятиях. Также ознакомьтесь с файлом «Основы ассемблера». Для написания и отладки программ будем использовать интегрированную среду разработки MPLAB. Установите MPLAB с CD-ROM Выберите
в меню FILE
команду NEW Появится сообщение «Проект не открыт. Вы хотите создать новый проект?»: |