Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие МИУС.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
865.51 Кб
Скачать
  1. Реализация дискретных устройств на микроконтроллерах pic16

    1. Введение в программирование микроконтроллеров pic16

Семейство PIC16 фирмы Microchip содержит 8-разрядные микроконтроллеры построены по гарвардской архитектуре. Микроконтроллеры имеют сокращенный набор инструкций RISC, отличаются низким энергопотреблением и высоким быстродействием (время машинного цикла составляет 4 периода тактовой частоты, при тактовых частотах до 40 МГц).

В этом разделе эти микроконтроллеры описываются в объеме, достаточном для решения учебных задач настоящего учебного пособия. Дополнительные сведения о них содержатся в [5, 6].

      1. Краткие сведения об архитектуре микроконтроллеров pic16 и принципе их работы

Архитектура микроконтроллеров PIC16 может быть представлена следующей диаграммой

Рис. 2.1. Упрощенная схема

Архитектуры контроллеров PIC16

На этой иллюстрации показаны три основных компонента микроконтроллера — память программ (ПЗУ), память данных (оперативное запоминающее устройство — ОЗУ и периферийные устройства, представленные в памяти данных в виде специальных регистров) и арифметико-логическое устройство (АЛУ).

Работает микроконтроллер так: при включении питания или сбросе, АЛУ считывает ячейку памяти с адресом 0 (из переменной PC) из ПЗУ, которая содержит машинный код первой выполняемой инструкции. После этого АЛУ производит расшифровку и интерпретацию (выполнение) инструкции. В процессе выполнения АЛУ может обращаться к данным, содержащимся в ОЗУ и специальных регистрах периферийных устройств, а так же записывать туда вычисленные в результате выполнения инструкции значения. После того, как первая инструкция выполнена, АЛУ увеличивает на единицу адрес считываемой инструкции (PC) и начинает все сначала — считывание машинного кода, дешифрация, выполнение. В случае если была выполнена инструкция безусловного перехода или условного перехода с истинным условием, в переменную PC записывается адрес перехода, а не увеличенный на единицу адрес.

Вышеописанный процесс выполняется до момента выключения питания, сброса микроконтроллера, либо до считывания из памяти программ инструкции SLEEP.

В процессе выполнения программы микроконтроллер постоянно обращается к ОЗУ, где находятся данные, необходимые для выполнения инструкций. Организация ОЗУ микроконтроллера PIC16F873A показана на рис. 2.2.

Рис. 2.2. Организация оперативной памяти (ОЗУ)

микроконтроллеров PIC16

Все ОЗУ можно разделить на две основных области — регистры общего назначения и регистры специального назначения. Регистры общего назначения предназначенны для хранения переменных внутреннего состояния программы, регистры специального назначения нужны для управления и обмена данными с периферийными устройствами. В частности через них осуществляется доступ к портам ввода-вывода микроконтроллера.

      1. Язык ассемблера pic16

Программирование микроконтроллеров PIC16 осуществляется с помощью языка ассемблер. Программа на языке ассемблер представляет из себя последовательность инструкций для микроконтроллера, каждая из которых располагается на отдельной строке. Некоторые из инструкций могут требовать указания операндов — дополнительной информации необходимой для выполнения инструкции.

movlw 0 ; Инструкция с операндом

movwf 0x20 ; Инструкция с операндом

return ; Инструкция без операнда

Каждая из инструкций определяет машинный код, который будет содержаться в соответствующей ячейке памяти программ. Первая инструкция исходного текста программы как правило определяет машинный код в ячейке памяти программ с адресом 0, вторая — с адресом 1 и так далее.

movlw 0 ; Машинный код 0x3000 по адресу 0x00

movwf 0x20 ; Машинный код 0x00A0 по адресу 0x01

return ; Машинный код 0x0008 по адресу 0x02

После включения питания микроконтроллер начинает последовательно исполнять инструкции из памяти программ. В процессе исполнения может потребоваться вернуться/перейти к тому или иному фрагменту программы. В этом случае начало нужного фрагмента помечается меткой в месте перехода размещается инструкция условного или безусловного перехода.

metka: movlw 0

movwf OFFSET

goto metka

Помимо инструкций микропроцессора и меток в исходных текстах встречаются комментарии и директивы.

Комментарием называется часто строки после символа «точка с запятой». Комментарии предназначены для пояснения принципов работы трудных мест человеку, который будет впоследствии читать исходный текст программы. В вышеприведенных фрагментах исходных текстов программы фразы «Инструкция с операндом», «Машинный код по адресу …» и т.п. являются комментариями.

В процессе программирования бывает удобно разделить исходный текст на несколько файлов. Например все определения специальных регистров микроконтроллера не меняются от одной программы к другой, поэтому их можно поместить в отдельный файл и использовать полученный файл определений в нескольких программах, не меняя его содержимого. Для реализации этой возможности предназначена директива #include.

#include "hdw_init.inc"

В некоторых случаях бывает удобно присвоить имя какой-нибудь части выражения, поясняющее ее смысл. Для этих целей предназначена директива #define.

#define IN_D PORTB, 3

Вышеуказанная директива присваивает 3-му биту порта С имя IN_D (вход D).

Всего набор инструкций PIC16 насчитывает 35 различных инструкций. Для учебных целей настоящего пособия все они не требуются, поэтому ниже описаны только те, что использованы в учебных примерах и будут необходимы при выполнении заданий. Полностью набор инструкций PIC16 описан в [1], краткий справочник приведен в приложении Б.