RLBN.ru - electronics banner network
 Уроки и статьи

Урок любезно предоставлен Сергеем (micro51)
Индивидуальное дистанционное обучение программированию микроконтроллеров.
Изучение устройства и функционирования микроконтроллера, языка
программирования, среды программирования, сборка макетов и проверка
работоспособности программ на них. Программы обучения и пробные
занятия можно получить по e-mail: micro51@mail.ru

 PIC

  • Урок 2  - Формирование статических логических сигналов на выводах микроконтроллера

Для управления исполнительным устройством, работающим по принципу включено/выключено, на соответствующей выходной линии порта микроконтроллера (МК) необходимо сформировать статический сигнал 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

Появится сообщение «Проект не открыт. Вы хотите создать новый проект?»:

Далее

Hosted by uCoz