Файл: Архитектура и основы программирования однокристальных микроконтроллеров.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.11.2023

Просмотров: 1052

Скачиваний: 7

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Счетчик команд

Счетчик команд (PC) 13-разрядный. Младшим байтом счетчика командслужитрегистрPCL,доступныйдлячтенияизаписи.СтаршиеразрядысчетчикакомандРС<12:8>немогутбытьнепосредственносчитаныилизаписаны, а адресуются через регистр PCLATH. Содержимое регистра PCLATHзаноситсявсчетчиккоманд,когдаPCзагружаетсяновымзначением.Этопроисходит в командах CALL, GOTO и при записи в PCL. По сигналу RESET всчетчиккомандзаписывается'0'.Загрузкасчетчикакомандвразличныхситуацияхпоказананарис.1.6.

PCH

PCL




PCH

PCL




12 8 7




0

12 11 10 8 7




0







PC












PC

    1. PCLATH<4:0>


PCLATH

Результат из АЛУ
PCLATH

Код команды <10:0>

а б

Рис. 1.6. Загрузка счетчика команд:

а - команда, модифицирующая PCL; б - команды GOTO, CALL


Вычисляемые переходы. Вычисляемый переход осуществляется путем добавления смещения к счетчику команд (ADDWF PCL). При осуществлении табличного чтения с использованием вычисляемых переходов следует

внимательно рассматривать случаи, когда таблица пересекает границу,определяемуюразрядностью PCL(каждые256байт).
    1. Стек

Микроконтроллер РIС16F84 содержат 8-уровневый аппаратный стек (см.рис. 1.4). Стек не является частью памяти программы или памяти данных, ауказатель стека не может быть считан или записан. При выполнении командыCALL или при прерывании в вершину стека заносится содержимое счетчикакоманд,предварительноувеличенноенаединицу.Одновременностароезначениеизвершиныстекапереписываетсявстекследующегоуровня.ЗначениеизстекаизвлекаетсяпокомандамRETURN,RETLWиRETFIE.Содержимое регистра PCLATH не изменяется при операциях со стеком. Стекработаеткакпоследовательныйбуфер.Послетогокаквстекбылоподрядзанесеновосемьзначенийсчетчикакоманд,девятоезначениепереписываетзначение,котороебылозанесенопервым.Десятоезначениеперепишетзначение,занесенноевторым,ит.д.Придевятомипоследующихпоследовательных извлечениях из стека будет считано то же значение, чтоипри восьмом извлечении, а именно значение, которое было занесено в стекпервым.Биты,указывающиенапереполнениеипустотустека,отсутствуют.
    1. 1   ...   4   5   6   7   8   9   10   11   ...   27

Косвенная адресация данных

РегистрINDFфизическинесуществуетииспользуетсясовместносрегистромFSRдлякосвеннойадресацииданных.Любаякоманда,использующаярегистрINDF,вдействительностиобращаетсякрегиструданных, адресуемому регистром FSR. Например, в команде ADDWF INDF крегиструWбудетприбавленосодержимоерегистра,адрескоторогонаходитсявFSR.ЧтениекосвеннымобразомсамогорегистраINDF даст результат 00h(т.е.FSR=0).КосвеннаязаписьврегистрINDFаналогична,хотябитысостояниямогут бытьизменены.Программа, использующая косвенную адресацию для записи нулей в 16последовательнорасположенныхячеекОЗУсадреса20hдоадреса2Fh,приведенаниже.




MOWLW

0X20

;Заносим в FSR адрес первой ячейки памяти.

MOVWF

FSR

;

NEXT

CLRF

INDF

;Это начало цикла очистки ячеек . Команда ,










;адресующаяся к регистру INDF,в результате










;по очереди очищает все ячейки.




INCF

FSR

;Следующий адрес.










;Когда пройдут все 16 адресов (10h),в регистре










;FSR окажется установленным бит 4










;(0011 0000=30h) и цикл закончится.




BTFSS

FSR,4

;Всё закончено ?




GOTO

NEXT

;Нет, следующая ячейка.




CONT...




;Продолжение программы.

    1. 1   ...   5   6   7   8   9   10   11   12   ...   27

Порты ввода/вывода

МикроконтроллерыРIС16F84имеютдвапортаввода/вывода,PORTAиPORTB.Некоторыеразрядыпортовимеютдополнительныефункции.Программаможетсчитыватьизаписыватьданныеврегистрыввода-выводааналогичнорегистрамобщегоназначения.Причтениивсегдасчитываетсядействительноесостояниевыводов,независимооттого,запрограммированы отдельные биты как входы или как выходы. После сбросавсеразрядыпрограммируютсякаквходы(выходынаходятсяввысокоимпедансномсостоянии),посколькурегистрыуправленияпортамиTRISAиTRISBустанавливаютсяв'1'.Разрядпортаввода-выводаопределяетсякак выход,еслисоответствующий битв регистреуправленияпортомустановленв'0'.
      1. PORTA

Регистр ввода-вывода PORTA имеет разрядность 5 бит. Старшие 3 битафизическиотсутствуютисчитываютсякак'0'.РазрядRA4имеетвходстриггером Шмитта и выход с открытым стоком. Все остальные разряды PORTAимеют ТТЛ-входные уровни и КМОП-выходы. Разряд RA4 объединен с входомтаймераTMR0.ОписаниевыводоврегистраPORTAприведеновтабл.1.1.ФункциональнаяорганизацияразрядовRA0…RA3регистрапоказана нарис.1.7,аразрядаRA4–нарис.1.8.Нижеприведемпримерпрограммыинициализации(настройки)PORTA.

CLRF BSF MOVLW

PORTA STATUS,RP0 0x 0F

;Очистка (сброс в «0») выходных защёлок PORTA.

;Выбор банка 1.

;Значение константы для выбора режимов работы

;разрядов.

MOVWF

TRISA

;Установить RA<3:0> как входы и RA4 как







;выход.

BCF

STATUS,RP0

;Выбор банка 0.