Учебное пособие 759
.pdfmovlw |
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