#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’…’ означает, что данные заданы в двоичном формате. Двоичное представление удобно использовать в тех случаях, когда предполагается операция с битами в регистре.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.