Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
INCLUDE –вставить другой файл
Директива INCLUDE говорит Ассемблеру начать читать из другого файла. Ассемблер будет ассемблировать этот файл до конца файла или до директивы EXIT. Включаемый файл может сам включать директивы INCLUDE. .INCLUDE " имя файла" Пример: ; iodefs.asm: EXIT – выйти из файла Директива EXIT позволяет ассемблеру остановить ассемблирование текущего файла. Обычно ассемблер работает до конца файла. Если он встретит директиву EXIT, то продолжит ассемблировать со строки, следующей за директивой INCLUDE. .EXIT Пример: .EXIT; выйти из этого файла DEVICE - Указать для какого микроконтроллера ассемблировать .DEVICE AT90S1200 |AT90S2313 | AT90S2323 | AT90S2333 | AT90S2343 | AT90S4414 | AT90S4433 | AT90S4434 | AT90S8515 | AT90S8534 | AT90S8535 | ATtiny11 | ATtiny12 | ATtiny22 | ATmega603 | ATmega103 Пример: .DEVICE AT90S8535; использовать AT90S8535 Память данных почти полностью доступна программе пользователя и большинство команд ассемблера предназначено для обмена данными с ней. Команды пересылки данных предоставляют возможность непосредственной и косвенной адресации ячеек СОЗУ, непосредственной адресации регистров ввода/вывода и регистров общего назначения. Так как каждому регистру сопоставлена ячейка памяти, то обращаться к ним можно не только командами адресации регистров, но и командами адресации ячеек СОЗУ. Например, команда: MOV R10, R15 - скопировать регистр R15 в регистр R10 LDI R16, $FF Например: .dw $033f, $676d, $7653, $237e, $777f CPI Rd, K - сравнить регистр Rd с константой К. 16< d< 31. |
Программирование микроконтроллера
|
Написание программы
Текст программы можно набирать в любом текстовом редакторе, такие как встроенный редактор Norton Commander, FAR, а также Microsoft Word, WordPad и других. Также можно использовать специально предназначенные для этого программы Wavrasm, AVR Studio
Для создания программы не обязательно использовать ассемблер, программное обеспечение AVR поддерживает также и язык C или С++. Но в лабораторном комплексе этот вариант не рассматривается.
Программа, написанная на ассемблере, должна иметь определенную структуру.
Предлагается следующий шаблон (для AT90S8535)
; *******************************************
; название программы,
; краткое описание, необходимые пояснения
: *******************************************
; ******подключаемые дополнительные файлы
.include “8535def.inc”; файл описания AT90S8535
.include «имя_файла1.расширение»; включение дополнительных
.include «имя_файла2.расширение»; файлов
; ******глобальные константы
.equ имя1 = xxxx;
.equ имя2 = nnnn
; ******глобальные регистровые переменные
.def имя1= регистр
.def имя2= регистр
; *******сегмент данных
.dseg
.org xxxx; адрес первого зарезервированного байта
label1: .BYTE 1; резервировать 1 байт под переменную label1
label2: .BYTE m; резервировать m байт под переменную label2
; ****** сегментEEPROM(ЭСППЗУ)
.eseg
.org xxxx; адрес первого зарезервированного байта
.db выражение1, выражение2, …; записать список байтов в EEPROM.
.dw выражение1, выражение2, …; записать список слов в EEPROM.
; ******сегмент кодов
.cseg
.org $0000; адрес начала программы в программной памяти
; ****** вектора прерываний (если они используются)
rjmp reset; прерывание по сбросу
.org $0002
rjmp INT0; обработчик прерывания IRQ0
.org $0004
rjmp INT1; обработчик прерывания IRQ1
.org adrINTx; адрес следующего обработчика прерываний
rjmp INTx; обработчик прерывания x
…….; далее по порядку располагать обработчики остальных; прерываний
; *******начало основной программы
main: < команда> xxxx
… …
; ******* подпрограммы
; *******подпрограмма 1
subr1: < команда> xxxx
…… ………. ……
ret
; *******подпрограмма 2
subr2: < команда> xxxx
…… ………. ……
ret
…………….
; ******* программы обработчиков прерываний
INT0: < команда> xxxx
…… ………. ……
reti
INT1: < команда> xxxx
…… ………. ……
reti
INTx: < команда> xxxx
…… ………. ……
reti
………………………
; конец программы никак не обозначается.
Ниже приводятся 3 программы решения одной и той же простейшей программы, демонстрирующие использование директив ассемблера.
Как уже указывалось, программа простейшая: вычесть из числа 5 число 3. Если включен тумблер SA1 (рис. 1.2), то на индикацию выдать результат вычитания. Если тумблер SA1отключен – на индикацию вывести цифру ноль.
Алгоритм программы (рис. 1.5) соответствует программе №1, использующей директиву equ ассемблера.
Программа №2 отличается от программы №1 резервированием по одному байту оперативной памяти под семисегментные коды цифр от 0 до 9.
Программа №3 самая короткая. Она использует директиву.dw для определения слов в программной памяти. В программе используется команда LPM ассемблера. По этой команде загружается байт, адресуемый регистром Z в регистр R0. Команда обеспечивает доступ к любому байту памяти программы, организованной как 16 битное слово. Младший бит регистра Z определяет, осуществляется ли доступ к младшему байту слова (0) или к старшему (1).
Рис. 1.5 Алгоритм программы №1
; Программа №1.Использование директивы equ
.include " 8535def.inc" ; включить файл – описание для AT90S8535
.dseg; сегмент данных
.equ cod0=$64; присвоение имен ячейкам SRAM
.equ cod1=$65
.equ cod2=$66
.equ cod3=$67
.equ cod4=$68
.equ cod5=$69
.equ cod6=$6a
.equ cod7=$6b
.equ cod8=$6c
.equ cod9=$6d
.cseg
.org 0
rjmp reset
.org $30; начало программы
reset:
ldi r16, $00; определение стека с вершиной по адресу $00ff
out sph, r16
ldi r16, $ff
out spl, r16
ldi zl, $64; задание адреса начала зарезервированных ячеек
ldi zh, $00
ldi r16, $ff; настроить порт С на выход
out ddrc, r16
ldi r16, 00; настроить порт А на вход
out ddra, r16
ldi r16, $c; настроить порт В: биты 2 и 3 на выход, остальные на вход
out ddrb, r16
ldi r16, $f0; настроить порт D: биты 0...4 на вход, остальные на выход
out ddrd, r16
sbi portB, 3; выдать 1 на разряд 3 порта В
ldi r17, $3f; задание семисегментных кодов
sts cod0, r17
ldi r17, $06
sts cod1, r17
ldi r17, $5b
sts cod2, r17
ldi r17, $4f
sts cod3, r17
ldi r17, $66
sts cod4, r17
ldi r17, $6d
sts cod5, r17
ldi r17, $7d
sts cod6, r17
ldi r17, $07
sts cod7, r17
ldi r17, $7f
sts cod8, r17
ldi r17, $6f
sts cod9, r17
ldi r17, 5; задание уменьшаемого
ldi r18, 3; задание вычитаемого
m1: sbis pina, 4; если включен тумблер SA1, то пропустить
rjmp m2; следующую команду
mov r20, r17; в r20 поместить уменьшаемое
sub r20, r18; вычесть вычитаемое
rjmp vv
m2:
ldi r20, 0
vv:
push zl; сохранить zl в стеке
add zl, r20; сложить zl с результатом
ld r0, z; семисегментный код результата переслать в r20
pop zl; извлечь zl из стека
out portc, r0; выдать результат на индикацию
rjmp m1
; Программа №2. Использование оперативной памяти под переменные
.include " 8535def.inc" ; подключение файла описания AT90S8535
.dseg; сегмент данных
.org $64; адрес первого зарезервированного байта
cod0:.byte 1; резервирование по одному байту под переменные
cod1:.byte 1
cod2:.byte 1
cod3:.byte 1
cod4:.byte 1
cod5:.byte 1
cod6:.byte 1
cod7:.byte 1
cod8:.byte 1
cod9:.byte 1
.cseg; сегмент кодов
.org $0; адрес начала программы в программной памяти
rjmp reset; прерывание по сбросу при подаче питания
; или при нажатии на кнопку " Сброс"
reset:
ldi r16, $00; определение стека с вершиной по адресу $00ff
out sph, r16
ldi r16, $ff
out spl, r16
ldi zl, $64; задание адреса начала зарезервированных ячеек
ldi zh, $00
ldi r16, $ff; настроить порт С на выход
out ddrc, r16
ldi r16, 00; настроить порт А на вход
out ddra, r16
ldi r16, $c; настроить порт В: биты 2 и 3 на выход, остальные на вход
out ddrb, r16
ldi r16, $f0; настроить порт D: биты 0...4 на вход, остальные на выход
out ddrd, r16
sbi portb, 3; выдать 1 на разряд 3 порта В
ldi r17, $3f; задание семисегментных кодов
sts cod0, r17
ldi r17, $06
sts cod1, r17
ldi r17, $5b
sts cod2, r17
ldi r17, $4f
sts cod3, r17
ldi r17, $66
sts cod4, r17
ldi r17, $6d
sts cod5, r17
ldi r17, $7d
sts cod6, r17
ldi r17, $07
sts cod7, r17
ldi r17, $7f
sts cod8, r17
ldi r17, $6f
sts cod9, r17
ldi r17, 5; задание уменьшаемого
ldi r18, 3; задание вычитаемого
m1: sbis pina, 4; если включен тумблер SA1, то пропустить
rjmp m2; следующую команду
mov r20, r17; в r20 поместить уменьшаемое
sub r20, r18; вычесть вычитаемое
rjmp vv
m2:
ldi r20, 0
vv: push zl; сохранить zl в стеке
add zl, r20; сложить zl с результатом
ld r0, z; семисегментный код результата переслать в r20
pop zl; извлечь zl из стека
out portc, r0; выдать результат на индикацию
rjmp m1
; Программа №3. Использование директивы.dw
.include " 8535def.inc" ; подключение файла описания AT90S8535
.cseg
.org 0
rjmp reset
.dw $063f, $4f5b, $6d66, $077d, $6f7f, $7c77, $5e39, $7179; семисегментные коды
reset:
ldi r16, $00; определение стека с вершиной по адресу $00ff
out sph, r16
ldi r16, $ff
out spl, r16
ldi r16, $ff
out ddrc, r16; настроить порт С на выход
ldi r16, 00
out ddra, r16; настроить порт А на вход
ldi r16, $c
out ddrb, r16; настроить порт В: биты 2 и 3 на выход, остальные на вход
ldi r16, $f0
out ddrd, r16; настроить порт D: биты 0...4 на вход, остальные на выход
sbi portb, 3; выдать 1 на разряд 3 порта В
ldi zl, 02; установить адрес семисегментного кода нуля в регистр Z
ldi zh, 00
ldi r17, 5; задание уменьшаемого
ldi r18, 3; задание вычитаемого
m1: sbis pina, 4; если включен SA1, то пропустить следующую команду
rjmp m2
mov r20, r17; в r20 поместить уменьшаемое
sub r20, r18; вычесть вычитаемое
rjmp vv
m2:
ldi r20, 0; присвоить результату значение нуль
vv: push zl; сохранить zl в стеке
add zl, r20; сложить zl с результатом
lpm; загружаем бит, адресуемый регистром Z, в регистр R0
pop zl; извлечь zl из стека
out portc, r0; выдать результат на индикацию
rjmp m1
Ввод программы
Подготовленная программа вводится в ПЭВМ с рабочего места после включения комплекса в работу.
Включение комплекса, собранного по схеме рис.1, осуществляется включением составных частей ПЭВМ и нажатием кнопки включения на блоке питания комплекса БП. Номер рабочего места устанавливается переключателем внутри блока управления и должен совпадать с номером на блоке связи с ЭВМ.
Переключатель режима работы платы ЖКИ рабочего места необходимо поставить в положение “Программирование”. При нажатии на кнопку “Сброс” блока управления на ЖКИ появляется надпись “Место” с соответствующим номером. Этому номеру будет соответствовать окно на экране дисплея ПЭВМ.
Программное обеспечение располагается в каталоге STAND90, в котором есть два подкаталога SERVER и PK& MK. Программное обеспечение работает в среде WINDOWS. Программа SERVER запускается файлом server.bat, программа PK& MK – файлом Pk& mk.exe.
Сразу после запуска программы-сервера на экран выводится меню из трех пунктов: 1 – удалить старые файлы (например, оставшиеся после предыдущей работы), 2 – загрузить старые файлы (для продолжения работы с ними), 3 – любая другая клавиша (например, пробел или Esc) – не удалять и не загружать. После нажатия соответствующей клавиши на экране появляется восемь окон.
Пример содержимого экрана ПЭВМ во время работы программы представлен на рис. 1.6.
Каждое окно имеет надпись “Место” с номером рабочего места и область размером 4х16 знакомест, в которой отображается информация, выводимая на ЖКИ соответствующего рабочего места. Внизу экрана имеется строка, в которой описаны “горячие” клавиши – клавиши и сочетания клавиш, нажатия на которые вызывают определенные действия.
Из “горячих” клавиш студенту доступна только клавиша F6 (просмотр ошибок). Назначение “горячих” клавиш представлено в табл. 1.3.
Узлы набора программ рабочих мест имеют встроенный микроконтроллер AT89C51 для управления ЖКИ и клавиатурой. Микроконтроллер передает клавиатурные коды с рабочих мест в ПЭВМ и отображает принятые от ПЭВМ данные на ЖКИ.
Рис. 1.6. Изображение на экране ПЭВМ
Таблица 1.3.
«Горячие» клавиши
Alt–X | Выход из программы |
Alt–номер | Выбор номера места, с которым работает преподаватель: “номер” – число от 1 до 8. Выбранное окно выделяется цветной рамкой |
F2 | Запись программы выбранного места из ОЗУ на винчестер |
F4 | Включение режима редактирования (и листания) преподавателем программы выбранного места; при этом запрещен ввод программы с соответствующего рабочего места |
F5 | “Распахивание” выбранного окна на половину экрана; при этом преподаватель может листать текст программы независимо от студента. Повторное нажатие F5 возвращает экран в исходное состояние |
F6 | Переключение на режим просмотра ошибок в программе выбранного места; это переключение возможно только из режима редактирования. |
F8 | Очистка текстового буфера выбранного места; для сохранения очистки нужно после этого нажать клавишу F2. |
F9 | Запуск процесса компиляции или печати |
После появления восьмиоконного изображения на экране, студент нажимает кнопку «Сброс» блока управления и клавишу «Пробел» на клавиатуре рабочего места. Появляется на ЖКИ точно такое же изображение как в соответствующем окне монитора ПЭВМ. Теперь можно проводить на своем рабочем месте набор подготовленной дома программы.
Так как у ЖКИ в строке только 16 знакомест, в которые должна укладываться директива или команда, то возникают сложности с размещением «длинных» директив или команд. К «длинной» директиве, требующей более 16 знакомест, относится и необходимая в каждой программе в обязательном порядке директива.include “8535def.inc”. С клавиатуры ЖКИ ввести её в ПЭВМ невозможно. Поэтому в программном обеспечении комплекса предусмотрено ввод этой директивы в программу, которую набирает обучаемый, до компиляции. Таким образом, если эта директива не будет введена в программу, то она будет проставлена автоматически и ошибки не возникнет. Но необходимо отметить, что если эта директива будет введена с рабочего места не полностью, то это вызовет ошибку компиляции. Поэтому эту директиву с рабочего места вводить не нужно.
Об ограничениях на «длинные» команды и директивы следует помнить при использовании директивы.dw (см. программу №3). В одной строке можно разместить только саму директиву.dw и два шестнадцатиразрядных слова. Если нужно разместить слов больше двух, то нужно многократно использовать эту директиву.
Используемый в комплексе ЖКИ содержит знакогенератор только латинского алфавита, поэтому комментарии с рабочего места можно записывать только с использованием латинских букв.
После набора и просмотра программы студент подходит к преподавателю и сообщает о завершении набора программы. Преподаватель предупреждает студентов о временном прекращении их работы и выбирает окно на экране дисплея нажатием клавиш Alt + цифра номера рабочего места. Нажимает клавишу F4 (редактирование), просматривает программу и при необходимости вводит соответствующие коррективы в программу. Затем нажимает клавишу F9 (компиляция программы).
После компиляции программы появляется на экране монитора сообщение о наличии и количестве ошибок в программе (если они есть), например, такого вида “Assemble complete with 1 error”. Или сообщение об их отсутствии “Assemble complete with no errors” и предложение выбора действия в виде сообщения:
Выберите:
ESC – продолжение редактирования;
1 – прошивка микроконтроллера;
2 – печать текста программы;
3 – печать листинга.
При наличии ошибок необходимо нажать клавишу ESC. Восстанавливается связь с рабочими местами. Студент идет на рабочее место для анализа и исправления ошибок. В его распоряжении «горячая» клавиша F6. При нажатии этой клавиши на экране ЖКИ появляется сообщение о первой ошибке, например, такого вида, если вместо.org $000 напечатано в программе.rg $000.
Студент оценивает, как нужно исправить ошибку, нажимает вновь на клавишу F6 и возвращается в режим редактирования. Курсор стоит на строке с ошибкой. Студент исправляет ошибку и вновь нажимает клавишу F6. Опять высвечивается та же строка, но уже с исправлениями, однако сообщение об ошибке сохраняется. Это сообщение об ошибке будет устранено потом при компиляции исправленной программы, разумеется, если исправление сделано правильно. Для перехода к следующей ошибке нужно нажать клавишу курсора . Появляется очередная строка с ошибкой. Анализируется ошибка этой строки, принимается решение об её устранении, нажимается вновь клавиша F6. Курсор указывает строку с ошибкой. После устранения ошибки вновь нажимается клавиша F6 и клавиша курсора для выявления очередной ошибки и т.д. После устранения последней ошибки нажатие клавиши курсора не приводит к очередному переводу.
После исправления всех ошибок студент с помощью преподавателя осуществляет компиляцию программы. Если ошибки устранены неправильно и они есть в программе, нажимается клавиша ESC клавиатуры преподавателя и студент вновь на своем месте устраняет ошибки. Если же ошибок нет, то можно приступить к записи программы в микроконтроллер.
Последнее изменение этой страницы: 2016-03-22; Просмотров: 1360; Нарушение авторского права страницы