- •2.5. Руководство по среде разработки Keil uVision.
- •2.5.1 Разработка программных средств
- •2.5.2. Создание программного проекта в интегрированной среде
- •2.5.3. Настройка свойств программного проекта в среде Keil uVision
- •2.5.4. Использование среды Keil uVision для трансляции программного проекта.
- •2.6 Отладка программы в среде Keil uVision
- •2.6.1 Способы отладки программ.
- •2.6.2 Использование встроенного отладчика программ.
- •2.7 Загрузка программы в стенд sdk-1.1 при помощи инструментальной
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.