Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 759

.pdf
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
571.32 Кб
Скачать

113-2018

ИЗУЧЕНИЕ СТРУКТУРЫ КОМАНД МИКРОКОНТРОЛЛЕРА PIC16C84 НА ПРИМЕРЕ РАСЧЕТА ПОДПРОГРАММЫ ЗАДЕРЖКИ

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к выполнению лабораторной работы № 6 по дисциплине «Электроника и микропроцессорная техника»

для студентов направления 12.03.04 «Биотехнические системы и технологии»

(профиль «Биотехнические и медицинские аппараты и системы») очной формы обучения

Воронеж 2018

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Воронежский государственный технический университет»

Кафедра системного анализа и управления в медицинских системах

ИЗУЧЕНИЕ СТРУКТУРЫ КОМАНД МИКРОКОНТРОЛЛЕРА PIC16C84 НА ПРИМЕРЕ РАСЧЕТА ПОДПРОГРАММЫ ЗАДЕРЖКИ

МЕ Т О Д И Ч Е С К И Е У К А З А Н И Я

квыполнению лабораторной работы № 6

по дисциплине «Электроника и микропроцессорная техника» для студентов направления

12.03.04 «Биотехнические системы и технологии» (профиль «Биотехнические и медицинские аппараты и системы»)

очной формы обучения

Воронеж 2018

УДК 621.38(07) ББК 30я7

Составители: канд. техн. наук Е. И. Новикова, д-р техн. наук, проф. О. В. Родионов

Изучение структуры команд микроконтроллера PIC16C84 на примере расчета подпрограммы задержки: методические указания к выполнению лабораторной работы № 6 по дисциплине «Электроника и микропроцессорная техника» для студентов направления 12.03.04 «Биотехнические системы и технологии» (профиль «Биотехнические и медицинские аппараты и системы») очной формы обучения / ФГБОУ ВО «Воронежский государственный технический университет»; сост.: Е. И. Новикова, О. В. Родионов. – Воронеж : Изд-во ВГТУ, 2018. – 19 с.

Методические указания предназначены для подготовки, выполнения и защиты лабораторной работы № 6 по дисциплине «Электроника и микропроцессорная техника».

Предназначены для студентов 3-го курса направления 12.03.04 «Биотехнические системы и технологии».

Ил. 7. Табл. 1. Библиогр.: 1 назв.

УДК 621.38(07)

ББК 30я7

Рецензент – Е. Н. Коровин, д-р техн. наук, проф. кафедры САУМС ВГТУ

Печатается по решению учебно-методического совета Воронежского государственного технического университета

Лабораторная работа № 6 ИЗУЧЕНИЕ СТРУКТУРЫ КОМАНД МИКРОКОНТРОЛЛЕРА

PIC16C84 НА ПРИМЕРЕ РАСЧЕТА ПОДПРОГРАММЫ ЗАДЕРЖКИ

1.ЦЕЛЬ РАБОТЫ

Целью лабораторной работы является изучение структуры команд микроконтроллера PIC16C84 посредством расчета и создания подпрограммы задержки.

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

2.ТЕОРЕТИЧЕСКОЕ ВВЕДЕНИЕ

2.1.Архитектура команд микроконтроллера PIC16С84

Все команды микроконтроллеров PIC16C84 – однословные (14разрядные). Это обеспечивается за счет разделения шин доступа к памяти программ и памяти данных. 14-разрядная шина доступа к памяти программ позволяет выполнить выборку 14-разрядной команды за один машинный цикл микроконтроллера.

 

TCY0

TCY1

TCY2

TCY3

TCY4

TCY5

1. MOVLW 55h

 

 

 

 

 

 

 

Выборка 1

Выполн. 1

 

 

 

 

 

2. MOVWF PORTB

 

 

 

 

 

 

 

 

Выборка 2

Выполн. 2

 

 

 

 

3. CALL SUB_1

 

 

 

 

 

 

 

 

 

Выборка 3

Выполн. 3

 

 

 

 

 

 

 

 

4. BSF PORTA,3 (Выполняется NOP)

 

Выборка 4

Удаление

 

5. Инструкция по адресу SUB_1

 

 

 

 

 

 

 

 

 

 

Выбор. SUB_1

Выполн. SUB_1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выбор. SUB_1+1

 

 

 

 

 

 

 

 

Рис. 1. Выборка и выполнение команд

Во всех микроконтроллерах PIC среднего семейства входной тактовый сигнал внутренней схемой микроконтроллера разделяется на четыре последовательных неперекрывающихся такта Q1, Q2, Q3 и Q4. Совокупность четырех тактов называется машинным циклом.

3

Обработка команды состоит из двух этапов:

1)выборка из памяти;

2)выполнение команды.

Она осуществляется за четыре такта Q1, Q2, Q3 и Q4. Выборка следующей команды и выполнение текущей совмещены по времени. Таким образом, выполнение команды происходит за один машинный цикл. Такой подход называется конвейерной обработкой команд.

Если команда изменяет счетчик команд PC (команды ветвления, например GOTO), то необходимо два машинных цикла для выполнения команды (рис. 1). В такте Q1 цикл выборки начинается с увеличения программного счетчика, а в цикле выполнения выбранная команда защелкивается в регистр команд. В течение тактов Q2, Q3 и Q4 происходит декодирование и выполнение команды. В такте Q3 – считывается память данных (чтение операнда), а запись происходит в такте Q4.

На рис. 1 показаны две стадии конвейерной обработки команд для представленной последовательности. В цикле TCY0 происходит выборка первой команды из памяти программ. В цикле TCY1 первая команда исполняется, а вторая команда выбирается из памяти программ. В течение цикла TCY2 вторая команда исполняется, а третья выбирается из памяти программ. В цикле TCY3 происходит выборка четвертой команды и выполняется команда третья команда (CALL SUB_1). Когда завершается выполнение третьей команды CPU загружает адрес четвертой команды в вершину стека и изменяет счетчик команд PC на адрес SUB_1. Это означает, что команда, загруженная в цикле TCY3, должна быть удалена из конвейера. В течение цикла TCY4 четвертая команда удаляется из конвейера (выполняется пустой цикл – NOP) и происходит выборка команды по адресу SUB_1. В цикле TCY5 выполняется команда пять и выбирается из памяти программ команда с адресом SUB_1+1.

Таким образом, цикл выполнения команды (рис. 2) состоит из четырех тактов Q1–Q4, в каждом из которых производятся различные, заранее определенные действия:

Q1 – выборка определенной команды из памяти программ и

еедекодирование или вынужденный NOP,

Q2 – выборка данных или NOP,

Q3 – выполнение команды и обработка данных,

Q4 – запись данных или NOP.

4

Рис. 2. Временная диаграмма циклов выполнения команд

2.2.Создание подпрограммы задержки

2.2.1.Тестовый пример

Вкачестве тестового примера рассмотрим простейшую программу, которая с частотой 1 Гц будет переключать выходную линию из логического нуля в логическую единицу. Алгоритм ее работы получится следующий. По включению контроллера программа выставит единицу на выходную линию, затем подождет 0,5 с, выставит нуль, опять подождет 0,5 с, а затем повторит все заново. Программа написана для микроконтроллера PIC16С84. Используемый генератор работает с частотой 32768 Гц. Изменяться будет состояние регистра ли-

нии RB0.

Программа начинается с секции заголовка, в которой при помощи директивы EQU осуществляется сопоставление символьного имени с его числовым значением. Отличие этого примера от предыдущего заключается в том, что в нем не производится описание регистров специального назначения. Так как в MPLAB уже включены файлы с описаниями этих регистров для каждой разновидности PIC контроллера. Эти файлы необходимо только подключить к основной программе директивой #include.

Кроме регистров специального назначения в программе используются и регистры общего назначения. Они описываются самостоятельно. Это можно делать как в предшествующем примере посред-

5

ством директивы EQU, присвоив каждому символьному названию свой адрес. Однако это несколько громоздко. Проще воспользоваться директивами cblock и endc. Эти директивы позволяют задать один начальный адрес, а ассемблер сам присвоит числовые значения заданным именам по возрастанию.

Так в примере используются два регистра – счетчика времени при формировании задержки на 0,5 с, имеющих название CounterLo и CounterHi.

Таким образом, программа будет иметь следующий вид:

#include p16С84a.inc

;Подключение файла с описаниями

 

;регистров специального назначения

;Определение используемых в программе регистров

;общего назначения:

 

cblock 0x0C

 

CounterLo

;младший байт счетчика в подпрограмме

 

;задержки

CounterHi

;старший байт счетчика в подпрограмме

 

;задержки

endc

 

0x0C – это адрес нулевой ячейки регистров общего назначения. После ассемблирования строке CounterLo будет присвоен адрес 0x0C,

а строке CounterHi – адрес 0x0D.

Следующие строки посредством той же директивы EQU задают константы, используемые в примере.

INIT_PORTA

EQU

b'00000000'

INIT_PORTB

EQU

b'00000000'

INIT_OPTION

EQU

b'00000000'

INIT_INTCON

EQU

b'00000000'

DELAYLO EQU

.79

 

DELAYHI EQU

.21

 

Первые четыре константы будут использоваться при инициализации соответствующих регистров. Так как они предназначены для инициализации отдельных битов, то их удобно задавать в двоичном формате в виде b’x… x’. Следующие две – в подпрограмме задержки.

6

Они заданы в десятичном формате, который обозначается точкой. Если вместо «.21» написать «21», то ассемблер воспримет это как шестнадцатеричный формат, который установлен по умолчанию.

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

Подпрограмма инициализации имеет следующий вид:

Init

 

bsf

STATUS,RP0

movlw

INIT_PORTA

movwf

TRISA

movlw

INIT_PORTB

movwf

TRISB

movlw

INIT_OPTION

movwf

OPTION_REG

bcf

STATUS,RP0

movlw

INIT_INTCON

movwf

INTCON

clrf

STATUS

Return

 

При входе в подпрограмму производится выбор первого банка данных ОЗУ установкой бита RP0. Далее производится выбор направления линий ввода/вывода. Так как у контроллера задействована всего одна линия на выход, то во все регистры TRIS записываются нули, то есть линии будут выходами. Далее в регистры OPTION и INTCON записываются нули, так как таймер, сторожевой таймер и прерывания в программе не используются. После этого производится обнуление всех битов регистра STATUS, что вызывает переключение на нулевой банк ОЗУ.

Следующая подпрограмма реализует задержку, о которой говорилось выше.

Delay05

 

;Инициализация регистров счетчика:

movlw

DELAYLO

;Младший байт

movwf

CounterLo

;

7

movlw

DELAYHI

;Старший байт

movwf

CounterHi

;

Del05

 

 

decfsz

CounterLo,1

;Декремент младшего байта счетчика.

 

 

;Выполняется до тех пор,

goto

Del05

;пока он не станет равным нулю, после

 

 

;чего декрементируется

decfsz

CounterHi,1

;старший байт

goto

Del05

;

Return

 

;После того как оба байта станут

 

 

;равными нулю, выход.

Работа подпрограммы начинается с инициализации двух ранее определенных регистров общего назначения, которые будут использованы в качестве младшего и старшего байтов счетчика. Команда movlw DELAYLO записывает в регистр W константу DELAYLO. Затем из него значение передается в регистр CounterLo. Аналогичные действия производятся с константой DELAYHI и регистром CounterHi. После того как были заданы начальные значения младшего и старшего байтов счетчика, посредством декремента регистра CounterLo и CounterHi формируется задержка. Сначала производится декремент регистра CounterLo до тех пор, пока он не станет равным нулю, после чего команда goto Del05 пропускается и декрементируется старший байт счетчика CounterHi. После этого программа переходит на метку Del05 и цикл повторяется.

Примечание. После того как регистр CounterLo обнулится в результате следующего декремента, его значение станет равным 255. И подпрограмма будет выполняться в той же последовательности.

Когда оба байта станут равными нулю, произойдет возврат в основное тело программы.

Begin

 

call

Init

bsf

PORTB,0

call

Delay05

bcf

PORTB,0

cal

Delay05

goto

Begin

End

 

8

Ниже приведен полный листинг тестового примера:

#include p16f84a.inc ;Подключение файла с описаниями ;регистров специального назначения

;Определение используемых в программе регистров общего ;назначения:

cblock 0x0C

CounterLo ;младший байт счетчика в подпрограмме ;(ПП) задержки

CounterHi ;старший байт счетчика в ПП задержки endc

;Константы инициализации регистров специального назначения:

INIT_PORTA

EQU

b'00000000'

;Все линии на выход

INIT_PORTB

EQU

b'00000000'

;Все линии на выход

INIT_OPTION

EQU

b'00000000'

;Константа для

;инициализации регистра OPTION.

 

;Т. к. таймер, сторожевой таймер не используются, то в него

;можно просто записать 0

 

INIT_INTCON

EQU

b'00000000'

;Прерывания запрещены

;Константы для ПП задержки на 0,5 с:

DELAYLO

EQU

.79

;

DELAYHI

EQU

.6

;

;Далее начинается исполняемый код программы:

 

goto

Begin

;Переход на начало

int_point

org

0x04

;Вектор прерывания

;ПП задержки на 0,5 с.

Delay05

;Инициализация регистров счетчика:

movlw DELAYLO ;Младший байт movwf CounterLo ;

9