Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПС МЕТОД_МК_51.doc
Скачиваний:
92
Добавлен:
18.11.2019
Размер:
603.14 Кб
Скачать

2.5.4. Использование среды Keil uVision для трансляции программного проекта.

Интегрированная среда программирования позволяет максимально облегчить трансляцию программных проектов. Так как параметры программного проекта уже настроены, то для трансляции исходного текста программного модуля достаточно загрузить исходный текст этого программного модуля в окно текстового редактора. После загрузки исходного текста программного модуля достаточно нажать на кнопку трансляции программного модуля, как это показано на рисунке 2.13.

Рисунок 2.12. - Трансляция программного проекта при помощи кнопки «Translate»

Если же необходимо оттранслировать все программные модули вне зависимости имеются объектные модули или нет, и получить загрузочный файл, то нажимается кнопка «Build» или выбирается соответствующее меню, как показано на рисунке 2.14. Создать загрузочный файл можно и с помощью “горячей” клавиши <F7>. Если трансляция и

компоновка прошли успешно, то появится сообщение “0 Error(s)” и в директории проекта должен появиться выходной файл в формате HEX-80 с именем, указанным в выходных параметрах проекта. На этом шаге разработку программы можно считать законченной.

Рисунок 2.13. – Построение проекта с помощью кнопки «Build»

2.6 Отладка программы в среде Keil uVision

2.6.1 Способы отладки программ.

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

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

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

  • пошаговая отладка программ с заходом в подпрограммы;

- пошаговая отладка программ с выполнением подпрограммы как одного оператора;

  • выполнение программы до точки останова.

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

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

Сдует знать, что для отладки программы, написанной для загрузки в стенд SDK-1.1, необходимо перед отладкой изменить в тексте отлаживаемой программы начальные адреса подпрограмм обработки прерываний и стартовый адрес начала основной программы на классические для микроконтроллеров MCS-51 адреса.

Рассмотрим эту особенность на примере следующей программы.

;Данная программа формирует эффект бегущих огней на светодиодах стенда. Число одновременно горящих светодиодов задаётся при помощи порта дискретного ввода/вывода - P3: 1, 2, 3, 4 – линии DIP – переключателя (см. раздел 7.4).

#include <ADuC812.inc>

NAME Primer_1

SV EQU 7h ; адрес порта управления светодиодов в ПЛИС

PROG_WM SEGMENT CODE ; объявлен сегмент кода с именем PROG_WM

PROG_T0 SEGMENT CODE ; объявлен сегмент кода с именем PROG_ T0

VAR1 SEGMENT DATA ; объявлен сегмент данных с именем VAR1

BITVAR SEGMENT BIT ; сегмент однобитных переменных с именем BITVAR

STACK SEGMENT IDATA ;объявлен сегмент стека с именем STACK

; Макрос настройки таймера 0 – задания его режима работы

Timer macro V_TMOD, V_TCON

mov TMOD, V_TMOD

mov TCON, V_TCON

endm

RSEG STACK

DS 10H ; резервируем 16 Bytes для сегмента Stack

; Обработчик прерывания при перезагрузки МК

CSEG AT 0h

jmp START

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

CSEG AT 000Bh ; начальный адрес п\п обработки прерывания от таймера 0

jmp Timer0

; начальный адрес п\п обработки прерывания от таймера 0 в пользовательской таблице SDK

CSEG AT 200Bh

jmp Timer0

; Подпрограмма обработчика прерывания от таймера 0

RSEG PROG_T0

Timer0:

push PSW

push ACC

mov A, SVET

RR A

mov R1,#SV

mov R2, A

mov SVET, A

call Wr_Max

SETB IRQ_T0 ; установка флага прерывания от таймера 0 – сообщение основной

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

pop ACC

pop PSW

RETI

; Основная программа

CSEG AT 2100h

USING 0

START: mov SP, #STACK-1 ; инициализация стека

; Настройка таймера 0 как 16-разрядного, вызов макроса настройки таймера 0

Timer #1h , #10h

SETB TR0 ; запуск таймера 0

SETB EA ; разрешение прерываний

SETB ET0 ; разрешение прерывания от таймера 0

mov SVET1, #1h ; начальная загрузка

mov SVET, SVET1 ; начальная загрузка

SETB IRQ_T0 ; установка флага прерывания от таймера 0

cycle: mov A, SVET

CJNE A, SVET1, wait

mov A, P3

ANL A, #00111100b

mov SVET, A

mov SVET1, A ; сохранение переменной SVET

CLR IRQ_T0 ; сброс флага прерывания от таймера 0

wait: JB IRQ_T0, cycle ; цикл ожидания wait очередного срабатывания таймера 0

jmp wait

; Подпрограмма работы с регистрами ПЛИС (Запись в рег. ПЛИС)

RSEG PROG_WM

; R1 - адрес регистра ПЛИС, R2 - записываемое значение

Wr_Max: mov R3, DPP

mov DPP, #8h

mov A,R2

mov DPH, #0

movx @R1,A

mov DPP, R3

RET

; Переменные в DATA

RSEG VAR1

SVET: DS 1

SVET1: DS 1

; Переменные в битовой области

RSEG BITVAR

IRQ_T0: DBIT 1

END

Этот тест программы после трансляции можно загрузить в ОЗУ стенда, для отладки в среде Keilu Vision необходимо строку CSEG AT 200Bh закомментировать, а начальный адрес основной программы (CSEG AT 2100h) изменить с 2100h, например, на 0030h. Подробное описание подобной программы смотри в разделе 7.5.