Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование микроконтроллеров семейства CORTEX-M. Учебное пособие
.pdf
71
Размещение
переменных в памяти
Ячейка ОП с адресом
0х20000000h
Δ
N
S
1
Х11
Х12
Х
13
…
SN Х
N1
ХN2
Х
N3
5.7. Организация подпрограмм.
ЦЕЛЬ РАБОТЫ: Изучение способов организации подпрограмм.
ПОДГОТОВКА К РАБОТЕ
1. Разработать блок-схему и написать на языке ассемблера программу, реа-
лизующую вычисления по формуле, заданной в варианте лабораторной
работы № 2, для N наборов значений переменных Х1, Х2, Х3. Числа N, Si,
Хi1, Хi2, Х
разместить в памяти, как показано на рисунке. Разработанную
i3
в лабораторной работе № 2 программу оформить в виде подпрограммы.
Принципы организации подпрограмм приведены в разделе 4.1.5 .
2. Разработать тестовые задания для проверки правильности функциониро-
вания программы.
РАБОЧЕЕ ЗАДАНИЕ
3. Запустить Keil μVision и создать проект для разработки программы.
4. Ввести в память микроконтроллера программы, подготовленные по вари-
анту задания и отладить их, используя возможности симулятора.

72
СОДЕРЖАНИЕ ОТЧЕТА
вариант задания;
блок-схема алгоритма и исходный текст программы;
листинг программы и тестовые примеры, использованные при отладке.
ПОЯСНЕНИЯ К ЛАБОРАТОРНОЙ РАБОТЕ
Подпрограмма - это повторяющийся блок кода, который реализует выполнение заданной функции и при необходимости возвращает результат. Ri
Для вызова подпрограмм рекомендуется использовать команду BLX Ri
(Branch и Link) с предварительной загрузкой в регистр Ri адреса подпрограммы:
LDR Ri, =destination; загрузка в Ri адреса перехода, заданного меткой
destination
BLX Ri; переход к подпрограмме с меткой destination
Команда BLX помещает адрес возврата в регистр связи LR, а адрес подпрограммы – из регистра Ri в программный счетчик. После выполнения подпрограммы для возврата можно использовать команду BX LR.
Пример вызова подпрограммы:
AREA subrout, CODE
ENTRY
start PROC
MOV R0, #10 ; установка аргументов
MOV R1, #3
LDR R3, =doadd
BLX R3; вызов подпрограммы
stop B stop
ENDP
doadd PROC
ADD R0, R0, R1; код подпрограммы
BX LR; возврат из подпрограммы
ENDP
В примере принято, что регистры R0, R1 используются для передачи аргументов подпрограмме и R0 - для возврата результата основной программе.

73
Основная программа
…
LDR R0,= Subroutine1
BLX R0
…
Подпрограмма
Subroutine1
…
PUSH LR
LDR R0, =Subroutine2
BLX R0
POP LR
…
BX LR
Вложенная подпрограмма
Subroutine2
…
BX LR
При организации вложенных подпрограмм необходимо сохранять состояние регистра связи LR, как показано в блок-схеме на рисунке.

74
6. Лабораторные эксперименты с отладочной платой
6.1. Создание проектов в среде Keil MDK для работы с демонстра-
ционно-отладочной платой.
ЦЕЛЬ РАБОТЫ: Ознакомление со структурной организацией платы и создание и настройка проектов в среде Keil MDK для работы с отладочной платой.
ПОДГОТОВКА К РАБОТЕ
1. Изучить техническое описание демонстрационно-отладочной пла-
ты 1986EvBrd_64 ЗАО «ПКК Миландр» по литературе [1, 2]
2. Изучить способы настройки среды Keil MDK в режиме работы с от-
ладочной платой (раздел 3).
3. Ознакомиться со структурой исходных программ и способами их
отладки (раздел 4).
РАБОЧЕЕ ЗАДАНИЕ
1. Подключить плату к ПЭВМ (см раздел 3)
2. Убедиться, что на компьютере выставлена текущая дата и время.
Если нет, то изменить их вручную.
3. Запустить Keil μVision и ввести программу, приведенную ниже.
AREA LED, CODE, READONLY
EXPORT start
ENTRY
start
;НАСТРОЙКА СИНХРОНИЗАЦИИ МИКРОКОНТРОЛЛЕРА
; HS_CONTROL:=01
MOV r1, #0x4002 ; R1=0x00004002
LSLS r1, #16 ; R1=0x40020000
LDR r0, [r1,#0x08]
MOVS r0, #0x01
STR r0, [r1,#0x08]
; Check CLOCK_STATUS[2]
st1 LDR r0, [r1,#0x00]
AND r0, r0,#0x04
CMP r0, #0x04

75
bne st1
; CPU_CLOCK:=0x102
LDR r0, [r1,#0x0C]
MOVS r0, #0x81
LSLS r0, #0x01
STR r0, [r1,#0x0C]
; PER_CLOCK[23]:=1
LDR r0, [r1,#0x1C]
ORR r0,r0,#0x800000
STR r0, [r1,#0x1C]
;НАСТРОЙКА ПОРТА С
; PORTC_OE[0,1]:= 11
ADDS r1,#0x98000 ; R1=0x400B8000
LDR r0, [r1,#0x04]
MOV r2, #0x03
BICS r0,r2
ADDS r0,r0,#0x03
STR r0, [r1,#0x04]
; PORTC_FUNC[0-3]:= 0000
LDR r0, [r1,#0x08]
MOV r2, #0x0f
BICS r0,r2
STR r0, [r1,#0x08]
; PORTC_ANALOG[0,1]:= 11
LDR r0, [r1,#0x0C]
MOV r2, #0x03
BICS r0,r2
ADDS r0,r0,#0x03
STR r0, [r1,#0x0C]
; PORTC_PWR[0-3]:= 0101
LDR r0, [r1,#0x18]
MOV r2, #0x0f
BICS r0,r2
ADDS r0,#0x5
STR r0, [r1,#0x18]
; PORTC_PULL[0,1]:= 11
LDR r0, [r1,#0x10]
MOV r2, #0x03

76
BICS r0,r2
ADDS r0,r0,#0x03
STR r0, [r1,#0x10]
;ПРОГРАММА УПРАВЛЕНИЯ СВЕТОДИОДАМИ
st2 LDR r0, [r1,#0x00]
MOV r2, #0x3
BICS r0,r2
ADDS r0,#0x3
STR r0, [r1,#0x00]
MOV R3, #0xFFFF
MOV R4, #0xFFFF
loop1 SUBS R4, R4, #1
CBZ R4, loop2
B loop1
loop2 SUBS R3, R3, #1
CBZ R3, st3
B loop2
st3 LDR r0, [r1,#0x00]
MOV r2, #0x3
BICS r0,r2
STR r0, [r1,#0x00]
MOV R3, #0xFFFF
MOV R4, #0xFFFF
loop3 SUBS R4, R4, #1
CBZ R4, loop4
B loop3
loop4 SUBS R3, R3, #1
CBZ R3, st5
st4 B loop4
st5 B st2
END
4. Отладить введенную программу и произвести ее компиляцию
5. Загрузить программу в память микроконтроллера и убедиться в
правильности ее работы (попеременное зажигание светодиодов
VD3, VD4 c частотой примерно 1Гц).

СОДЕРЖАНИЕ ОТЧЕТА
вариант задания;
блок-схема алгоритма и исходный текст программы;
листинг программы и тестовые примеры, использованные при отлад-
ке.
6.2. Работа с портами ввода-вывода микроконтроллера
К1986ВЕ92QI.
ЦЕЛЬ РАБОТЫ: изучение способов настройки и использования портов
ввода-вывода микроконтроллера.
77
ПОДГОТОВКА К РАБОТЕ
1. Изучить способы настройки среды Keil MDK в режиме работы с отладочной
платой (раздел 3).
2. Изучить по методическим указаниям [1] способы настройки и использова-
ния портов ввода-вывода микроконтроллера.
3. По варианту программы, заданному в таблице 6.1, разработать блок-схему и
написать на языке ассемблера программу, реализующую управление светодиодами в соответствии с временной диаграммой на рисунке 6.1. Формирование требуемых интервалов времени выполнять программным способом.
Использовать в программе приведенный ниже начальный фрагмент программы (настройка частоты и других параметров микроконтроллера, в то
числе режимов работы разрядов 0, 1порта С, через которые выдаются сигналы управления светодиодами).
EXPORT start
start
; ===================== Начальные установки =====================
; HS_CONTROL:=01
MOV r1, #0x4002
LSLS r1, #16
LDR r0, [r1, #0x08]
MOVS r0, #0x01

78
STR r0,[r1,#0x08]
; Check CLOCK_STATUS[2]
st1 LDR r0, [r1,#0x00]
AND r0,r0,#0x04
CMP r0,#0x04
bne st1
; CPU_CLOCK:=0x102
LDR r0, [r1,#0x0C]
MOVS r0, #0x81
LSLS r0,#0x01
STR r0, [r1,#0x0C]
; PER_CLOCK[23]:=1
LDR r0, [r1,#0x1C]
ORR r0,r0,#0x800000
STR r0, [r1,#0x1C]
; PORTC_OE[0,1]:= 11
ADDS r1,#0x98000
LDR r0, [r1,#0x04]
MOV r2, #0x03
BICS r0,r2
ADDS r0,r0,#0x03
STR r0, [r1,#0x04]
; PORTC_FUNC[0-3]:= 0000
LDR r0, [r1,#0x08]
MOV r2, #0x0f
BICS r0,r2
STR r0, [r1,#0x08]
; PORTC_ANALOG[0,1]:= 11
LDR r0, [r1,#0x0C]
MOV r2, #0x03
BICS r0,r2
ADDS r0,r0,#0x03
STR r0, [r1,#0x0C]
; PORTC_PWR[0-3]:= 0101
LDR r0, [r1,#0x18]
MOV r2, #0x0f
BICS r0,r2
ADDS r0,#0x5
STR r0, [r1,#0x18]
; PORTC_PULL[0,1]:= 11
LDR r0, [r1,#0x10]
MOV r2, #0x03
BICS r0,r2
ADDS r0,r0,#0x03

79
Таблица 6.1
Варианты заданий к лабораторной работе № 6
№
вар
Тип времен-
ной диа-
граммы
t0 t1
t2
t3
t4
t5
t6
t7
1.
вар 1
0 3 6 3 6 0 - - 2.
вар 1
0 4 4 2 4 2 - - 3.
вар 1
0 3 6 4 5 0 -
-
4.
вар 1
0 3 5 5 1 2 -
-
5.
вар 1
0 6 4 2 2 6 -
-
6.
вар 1
2 2 4 0 6 2 -
-
7.
вар 1
2 4 2 0 4 4 - - 8.
вар 1
3 3 3 0 2 7 - - 9.
вар 1
4 2 4 0 4 6 - - 10.
вар 1
2 4 4 0 6 4 -
-
11.
вар 2
4 2 4 2 4 2
12.
вар 2
3 3 3 2 0 3
13.
вар 2
2 2 4 2 4 4
14.
вар 2
5 0 5 2 10 2 15.
вар 2
4 4 4 2 2 4
16.
вар 2
3 3 3 3 6 6
17.
вар 2
4 5 2 3 6 2
18.
вар 2
2 3 4 3 0 5
19.
вар 2
5 3 3 3 5 9
20.
вар 2
4 4 3 2 6 5
21.
вар 3
0 4 4 0 2 2 2 2 22.
вар 3
2 4 2 0 2 2 2
2
STR r0, [r1,#0x10]
; Register clearing
MOV r0, #0x00
MOV r1, #0x00
MOV r2, #0x00
MOV r5, #0x00
MOV r6, #0x00
MOV r7, #0x00
; =============== Ваша программа ====================
wait B wait
END

80
23.
вар 3
2 4 4 0 2 4 2 2 24.
вар 3
0 4 6 2 2 2 2
2
25.
вар 3
0 6 4 2 2 2 2
2
26.
вар 3
2 4 4 0 4 2 2
2
Вар 2
Вар 3
t0 t1 t2 t
3
T4 T
5
VD3
VD4
Вар 1
t
t
1
t
2
t
3
t
4
t
5
VD4 VD3
t
t
t
VD3
VD4
ttttt
Рис.1.1.Временные диаграммы включения светодиодов
РАБОЧЕЕ ЗАДАНИЕ
1. Подключить плату к ПЭВМ (см раздел 3)
2. Убедиться, что на компьютере выставлена текущая дата и время. Если
нет, то изменить их вручную.
3. Запустить Keil μVision и ввести разработанную программу.
4. Отладить введенную программу и произвести ее компиляцию
5. Загрузить программу в память микроконтроллера и убедиться в пра-
вильности ее работы
СОДЕРЖАНИЕ ОТЧЕТА
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
