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

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

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

movlw

DELAYHI

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

movwf

CounterHi

;

Del05

 

 

decfsz

CounterLo,1

;Декремент младшего

; байта счетчика. Выполняется до тех пор, пока он не станет

;равным нулю,

 

 

goto

Del05

; после чего

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

 

 

decfsz

CounterHi,1

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

goto

Del05

 

return

 

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

;станут равными нулю, возврат из ПП

;Инициализация

Init

bsf

STATUS,RP0 ;Выбор первого

;банка ОЗУ

movlw INIT_PORTA ;Инициализация

;регистров выбора направления линий

movwf TRISA ^80h ;ввода/вывода movlw INIT_PORTB

movwf TRISB ^80h

movlw INIT_OPTION ;Инициализация

;регистра OPTION

movwf OPTION_REG ^80h

clrf

STATUS

;Переключение на

;нулевой банк ОЗУ

movlw INIT_INTCON ;Инициализация

;регистра INTCON

movwf INTCON

return

;Возврат

10

Begin

 

 

call

Init

;Инициализация

bsf

PORTB,0

;Включить светодиод

call

Delay05

;Подождать 0,5 с

bcf

PORTB,0

;Выключить светодиод

call

Delay05

;Подождать 0,5 с

goto

Begin

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

end

 

;Конец программы

2.2.2. Алгоритм расчета констант подпрограммы задержки

Для синтеза алгоритма сначала подсчитаем, за сколько машинных циклов производится декремент регистра CounterLo.

Так если результат выполнения команды decfsz CounterLo,1 не равен 0, то эта команда занимает один цикл, а за ней следует goto Del05, которая выполняется за два цикла. Если результат равен нулю, то команда decfsz CounterLo,1 выполняется за два цикла. Таким образом, получается, что все время декремент CounterLo выполняется за три цикла, за исключением последнего раза, когда это происходит за два цикла, то есть

N1 = 3 · DELAYLO-1,

(1)

где N1 – количество циклов декремента CounterLo.

Далее подсчитаем число циклов декремента регистра CounterHi. Так как каждый декремент этого регистра производится только после обнуления регистра CounterLo, то при первом декременте получим 3 · DELAYLO-1 + 3, а последующие декременты будут выполняться за (256 · 3 – 1 + 3)(DELAYHI-1) – 1 циклов.

Команды инициализации регистров, входа в подпрограмму и выхода из нее занимают 8 циклов. Добавив их к общему числу, и обозначив общее число как N, получим искомую зависимость:

N = (3 * DELAYLO-1 + 3) +

 

+ ((256 * 3 – 1 + 3)(DELAYHI-1) – 1) + 8.

(2)

11

Или:

N = 3 * DELAYLO + 770 * DELAYHI – 761.

(3)

Если в эту формулу подставить константы из программы, то получится N = 4096, что и соответствует действительности.

Произведем теперь обратную операцию – рассчитаем константы, требующиеся для заданного числа циклов N. Для этого приведем формулу к виду:

(N + 761) / 770 = 3 * DELAYLO / 770 + DELAYHI.

(4)

Слагаемое 3 · DELAYLO / 770 меньше единицы, поэтому для определения старшего байта счетчика его можно отбросить. В ре-

зультате получится: DELAYHI = (N + 761) / 770.

Далее, зная значение DELAYHI, находим DELAYLO:

DELAYLO = (N + 761 – DELAYHI · 770) / 3

(5)

Приняв N = 4096, получим DELAYHI = 6, DELAYLO = 79, что со-

ответствует нашей программе.

3. ЛАБОРАТОРНЫЕ ЗАДАНИЯ И МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ИХ ВЫПОЛНЕНИЮ

1.Изучить структуры команд микроконтроллера PIC16С84.

2.Ознакомиться с основными принципами формирования команд микроконтроллера и изучить особенности их обработки.

3.Используя алгоритм расчета констант и методику, описанную в тестовом примере, создать проект в соответствии с пунктом «Задание».

4.Сделать вывод по проделанной работе.

5.Оформить отчет и сдать его преподавателю.

4. ЗАДАНИЕ

Создайте проект. В исходном файле проекта напишите программу, приведенную в качестве тестового примера.

Проассемблируйте программу (клавиша <F10>). В окне Build results Вы не должны получить никаких сообщений.

12

Рис. 3. Окно Program Memory Window

Откройте окно Program Memory Window (рис. 3). В нем Вы сможете увидеть расположение программы в ПЗУ контроллера.

Первой после сброса будет исполнена команда goto Begin. Произведите сброс клавишей F6. После этого строка goto Begin выделится темной линией.

Нажмите F7 для выполнения текущей команды, после чего программа совершит переход по адресу ПЗУ, обозначенному меткой Begin, обойдя подпрограммы Delay05 и Init.

Для того чтобы увидеть работу подпрограммы инициализации, откройте окно просмотра содержимого регистров ОЗУ (Watch).

Типичное для отладчиков окно Watch (рис. 4) позволяет просматривать значения переменных и содержимое регистров управления во время выполнения программы.

13

Рис. 4. Окно Watch

Введите регистр STATUS, установите отображение текущего значения в двоичной форме. Добавьте так же регистр WREG, а также ре-

гистры trisa, trisb, option_reg, INTCON, PORTB в двоичных форматах.

Последовательно исполняя команды подпрограммы инициализации, проследите изменения регистров в окне просмотра.

После возврата из подпрограммы и установки нулевого бита регистра PORTB в логическую единицу команда call Delay05 осуществит переход по адресу ПЗУ, обозначенному меткой Delay05, при этом адрес, на котором находилась команда call, записывается в стек. Чтобы это увидеть, откройте окно просмотра стека в меню Stack. Сравните адрес, отображаемый в этом окне, и адрес в памяти микроконтроллера, по которому расположена следующая после call команда.

Добавьте регистры CounterLo и CounterHi в окно Watch и выполните первые четыре команды подпрограммы Delay05. Проконтролируйте выполнение одного цикла декремента значений регистра

CounterLo.

Дальнейшее выполнение программы посредством нажатия клавиши F7 нецелесообразно, так как для выхода из подпрограммы Delay05 придется нажать F7 достаточно большое число раз, что неудобно. Рациональнее задать точку останова. Для этого щелкните правой кнопкой мыши по строке с командой Return. В появившемся меню выберите Break Point(s). После этого данная строка выделится крас-

14

ным цветом. Далее запустите программу на исполнение, нажав клавишу F9. Остановка произойдет на команде Return. Нажмите F7 и выйдите из подпрограммы Delay05.

Если опять нажать F7, то произойдет повторный вход в подпро-

грамму Delay05.

Рис. 5. Окно Stopwatch

Проверьте, действительно ли подпрограмма Delay05 выполняется в течение 0,5 с (или 4096 машинных цикла). Для этого необходимо убрать точку останова, щелкнув по ней правой кнопкой мыши и выбрав в меню Break Point(s). Затем откройте окно Stopwatch (рис. 5). Убедитесь, что тактовая частота контроллера установлена равной 32768 Гц. В противном случае вызовите окно настройки параметров эмуляции Debugger ► Settings и задайте ее там. В открывшемся диалоговом окне Simulator Settings особый интерес представляют вклад-

ки Osc/Trace и Animation/Realtime Updates.

Нa вкладке Osc/Trace можно выбрать частоту тактового осциллятора (рис. 6), на вкладке Animation/Realtime Updates задать период анимационного прохода (выполнение программы с обновлением окон отладчика через строго определенные промежутки времени) и период обновления окон при выполнении в реальном режиме времени (рис. 7). Если требуется, чтобы обновления окон отладчика происходили таким образом, что отражали бы информацию реалистично, то значения этих периодов не следует выбирать большими.

15

Рис. 6. Параметры эмуляции

Рис. 7. Параметры эмуляции

Если не установить флажок Enable Realtime watch updates, то при запуске программы в режиме реального времени окна отладчика вообще не будут обновляться. Кроме того, при эмуляции программ в среде MPLAB следует учитывать, что задержки при работе с реальным микроконтроллером намного меньше.

В окне Stopwatch можно будет наблюдать время и число машинных циклов (см. рис. 5). Нажмите кнопку Zero. В окошках Cycles и

16

Time появятся нули. Далее щелкните по тексту программы и запустите подпрограмму Delay05 на исполнение, нажав F8. Как только подпрограмма будет выполнена, эмулятор остановится, а в окне Stopwatch можно будет увидеть время 500.00 ms и число циклов – 4096.

Измените частоту тактового генератора согласно варианту задания, приведенного в таблице.

Варианты параметров для расчета констант

Номер

Частота тактового генератора,

Величина задержки, мс

варианта

кГц

 

1

32,768

400

2

1000

10

3

4000

2,5

4

65,536

300

5

2000

3

6

4000

5

7

32,768

700

8

65,536

480

9

36,150

600

10

2500

50

11

5500

650

12

120,550

250

13

1200

800

14

12268

50

15

6000

1000

16

3250

450

17

6545

370

18

48000

3000

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

17

КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Что такое машинный цикл?

2.На какие этапы можно разделить процесс обработки команд микроконтроллером PIC16С84?

3.В чем заключается принцип конвейерной обработки команд?

4.Для чего используется директива #include?

5.Какую функцию выполняют регистры общего назначения CounterLo и CounterHi, почему недостаточно одного регистра?

6.Какие действия осуществляет подпрограмма Init?

7.Как рассчитать количество циклов декремента, необходимых для обнуления CounterLo?

8.Почему последующие декременты регистра CounterHi будут выполняться за (256 · 3 – 1 + 3)(DELAYHI-1) – 1 циклов?

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Новикова Е. И. Основы электроники и микропроцессорной техники : учеб. пособие / Е. И. Новикова, О. В. Родионов. – Воронеж : ФГБОУ ВПО «Воронежский государственный технический универ-

ситет», 2012. – 178 с.

18

 

ОГЛАВЛЕНИЕ

 

Лабораторная работа № 6. Изучение структуры команд микроконтрол-

лера PIC16C84 на примере расчета подпрограммы задержки

................... 3

1.

Цель работы.................................................................................................

3

2.

Теоретическое введение.............................................................................

3

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

3

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

5

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

5

2.2.2. Алгоритм расчета констант подпрограммы задержки ...................

11

3.

Лабораторные задания и методические указания по их выполнению 12

4.

Задание.......................................................................................................

12

Контрольные вопросы..................................................................................

18

Библиографический список.........................................................................

18

19