Однокристальные PIC-микроконтроллеры. Технология разработки и отладки программ для микроконтроллеров PIC16, страница 3

#include <p16f84a.inc>         ; директива включения файла описания имен

; микроконтроллера   PIC16F84A

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

; секция описания

Init1        equ   b’11111111’        ; константа для настройки порта A

Init2        equ   b’00000000’        ; константа для настройки порта B

Temp1    equ   0x10                     ; регистр для временного хранения данных

Temp1    equ    0x11                    ; регистр для временного хранения данных

; рабочая секция

org      0x000                ;  начальный адрес после сброса МК

reset        goto    main                   ; переход на начало программы

org      0x010                ; адрес размещения основной программы

main

clrf      PORTA               ; очистка регистров-защелок

clrf      PORTB               ; портов A и B

bsf      STATUS, RP0    ; выбор банка 1

movlw  Init1                  ; настроить все лини

movwf  TRISA              ; порта A  на ввод

movlw  Init2                  ; настроить все линии

movwf  TRISB              ; порта B  на вывод

bcf   STATUS, RP0       ; выбор банка 0

;******************************************************

; здесь будут находиться  команды примеров

;******************************************************

goto   $                          ; зацикливание программы

end                                 ; конец базовой программы

Рассмотрим работу этой программы. Вначале она указывает ассемблеру тип используемого микроконтроллера и систему счисления по умолчанию hex (шестнадцатиричную). Идущие далее ассемблерные директивы  equ  определяют константы Init1 и Init2, используемые для настройки портов МК. Символические имена Temp1 и  Temp2  назначают адреса ячеек ПД (регистров общего назначения) для хранения промежуточных данных.

В программе строка “__CONFIG  _CP_OFF ….” является директивой Ассемблера, под руководством которой в выходной hex-файл заносится информация о битах конфигурации микроконтроллера. Она означает:

_CP_OFF – бит защиты кода после программирования не устанавливать;

_WDT_OFF – сторожевой таймер отключен;

_PWRTE_ON – таймер задержки сброса при подаче питания включен;

_HS_OSC – высокочастотный кварцевый резонатор.  

Директива  org  0x000  устанавливает стартовый адрес программного кода равным  0, т.е. соответствующим начальному состоянию счетчика команд МК после сброса. Команда  goto  main  вместе с ассемблерной директивой  org   0x010  и  меткой  main  обеспечивают переход на адрес памяти программ  0x010, начиная с которого и размещается основная часть программы. Это необходимо для того, чтобы обойти адрес 0x004, используемый в качестве вектора прерываний, и тем самым зарезервировать его для возможных будущих применений. Для подпрограммы обработки прерывания можно будет использовать ячейки памяти программ с адреса 0x004  по  0x00F.

С метки  main  начинается программа инициализации портов МК. Вначале программа  очищает (сбрасывает в нуль)  триггеры-защелки данных портов A  и  B. Эта операция рекомендуется фирмой  Microchip  для того, чтобы исключить неопределенность в состояниях регистров портов после включения электропитания. Затем командой  bsf  STATUS, RP0  устанавливается (записывается 1) бит  RP0  в регистре  STATUS  и производится переключение на 1-й банк памяти данных, где расположены регистры управления направлением передачи информации  портов TRISA  и  TRISB.

Команда  movlw  Init1  загружает в рабочий регистр  W  значение, присвоенное константе  Init1. Это значение равно b’11111111’. Символ  b’…’ означает, что данные заданы в двоичном формате. Двоичное представление удобно использовать в тех случаях, когда предполагается операция с битами в регистре.