Разработка программной и аппаратной поддержки к методическим указаниям Программирование микроконтроллеров
ввода/вывода во время выполнения программы, откроем соответствующее окно –
«IO view». Это можно сделать либо через меню «View» команда «New IO View»,
либо нажав «Alt» и 5, как показано на рис. 3.9, или на панели инструментов
нажать соответствующую кнопку – .
Рис. 3.10. Окно регистров ввода/вывода для МК AT90S8515.
Так как мы определили для встроенного симулятора микроконтроллер типа
AT90S8515, то окно регистров ввода/вывода откроется автоматически со всеми
надлежащими устройствами для этого типа МК (см. рис. 3.10). Данное окно
содержит перечень устройств, содержимое которых можно просмотреть, как
«древовидную» структуру, где один элемент может содержать ряд вложенных
подэлементов.
Рис. 3.11. Содержимое порта В.
Так как наша программа работает с портом В, то рассмотрим его
содержимое более подробно. Для этого по названию «Port B» щелкнем мышью два
раза (double click) или один раз по плюсику слева. Список порта В
раскроется, как показано на рис. 3.11, и можно будет увидеть регистр данных
(PORTB), регистр направления данных (DDRB) и выводы порта В (PINB) – «Port
B Data», «Data Direction» и «Input Pins», соответственно.
Каждый бит этого регистра представлен в виде флажка. Логическая
единица соответствует установленному флажку, а логический ноль – снятому.
Состояния этих флажков обновляются во время выполнения программы и
показывают текущее значение каждого бита. Вы также можете устанавливать или
очищать значения битов, щелкая мышью по соответствующим флажкам, тем самым
изменяя значения соответствующих регистров ввода/вывода.
Существует пара команд для одиночного пошагового выполнения программы.
Это «Trace into» /F11/ и «Step Over» /F10/ из меню «Debug» (см. рис. 3.7).
Отличие состоит в том, что «Trace into» при вызове подпрограммы входит в
неё в пошаговом режиме, т.е. можно отследить каждую команду по отдельности;
а «Step Over» выполняет подпрограмму целиком и продолжает выполнение в
пошаговом режиме со следующей команды после вызова подпрограммы, т.е. как
бы «обходит» подпрограмму. Наш пример не содержит подпрограмм, поэтому
различие заметно не будет.
Дойдя до последней строчки программы, следует обратить внимание на
изменение цвета регистров порта В. Те регистры, которые в последнем шаге
трассировки поменяли свое значение, становятся красными, остальные –
черные. Это облегчает наблюдать за теми регистрами ввода/вывода, которые
меняют свое значение при трассировке. Продолжая трассировку (нажимая /F11/
) можно наблюдать как регистры порта В меняют свое значение –
инкрементируются.
Рис. 3.12. Добавление точки останова.
Добавляя точки останова, мы можем выполнять программу с максимальной
скоростью, останавливаясь лишь там, где установлены точки останова.
Установив, курсор на нужном месте и нажав , или вызвав контекстное
меню и нажав команду «Toggle Breakpoint» можно лег?о установить точку
останова (см. рис. 3.12). Повторное нажатие приведет к её снятию. Красный
квадратик на полоске слева как раз и обозначает точку останова. В данном
примере точка останова установлена для демонстрации увеличения скорости
выполнения программы. Когда не было точки останова нам требовалось трижды
нажимать чтобы совершить один цикл (loop:). Установив же точку
останова на команде “rjmp loop” и запустим программу на выполнение через
меню «Debug» команда «Go» или нажмем (см. рис. 3.7), остановка
произойдет лишь в точке останова и таким образом для одного цикла
потребуется всего лишь одно нажатие . Это реальный пример ускорения
отладки программы.
Предположим нам надо чтобы регистр порта В не инкрементировался, а
декрементировался во время выполнения программы. Для этого немного изменим
код программы. В окне исходного кода программы строчку "inc temp" изменим
на "dec temp" (см. рис. 3.13). Если теперь продолжить выполнение программы
(нажать или или ), то AVR Studio выдаст диалоговое окно,
которое информирует об изменение исходного файла и спрашивает, нужно ли
перекомпилировать проект. Следует нажать «Yes».
Рис. 3.13. Изменение исходного кода программы и перекомпиляция проекта.
После перекомпиляции указатель счетчика команд будет установлен в
начало на первую команду. Заметим, что установленные точки останова
остаются без изменения.
«Смотровое» окно.
Для наблюдения за переменными, а точнее за их значениями удобно
использовать «Смотровое» окно (Watch window). Открыть его можно использовав
комбинацию клавиш «Alt» + «1» или вызвав меню «View» команду «Watch»
(см. рис. 3.9) или нажав кнопку на панели инструментов – .
Переменные, которые определены с помощью макроса “.DEF” могут быть
помещены в «Смотровое» окно несколькими способами. Выделив нужную
переменную ее можно просто перетащить в «Смотровое» окно или в меню «Watch»
нажать команду «Add Watch» или на панели инструментов нажать кнопку –
.
В данной программе только переменная “temp” является таковой. Ее мы и
можем увидеть на рис. 3.14.
Рис. 3.14. Смотровое окно.
Во время пошагового выполнения программы можно наблюдать, как меняется
наша переменная “temp”. Заметим, что данное окно также позволяет
пользователю изменять значения переменных, т.е. непосредственно влиять на
ход выполнения программы, облегчая отладку.
Рис. 3.15. Окно процессора.
Окно процессора.
Теперь понаблюдаем за окном процессора. Откроем его, нажав «Alt» + «3»
(см. рис. 3.9) или щелкнув по иконки – . Это окно (см. рис. 3.15.)
предоставляет определенную информацию о выполнении программы включая
Счетчик Команд (Program Counter), Указатель Стека (Stack Pointer),флаги
регистра состояния (Flags), Счетчик Циклов (Cycle Counter) и др.
Очень полезными для оценки длинны циклов или времени выполнения
подпрограммы могут оказаться «Cycle Counter» и «StopWatch». Хоть в данном
примере мы практически не используем это окно, оно все же играет очень
важную роль в отладки программы.
Перед закрытием проекта необходимо его сохранить. AVR Studio запомнит
расположение окон и использует эти установки при следующем запуске проекта.
3.2. Анализ методики реализации разработки программного обеспечения
3.2.1. Классификация вариантов заданий
Цель заданий – практическое освоение методики программирования на
ассемблере микроконтроллеров ATMEL семейства AVR, отладка программы на
симуляторе AVR Studio и программирование кристалла с помощью программатора
расположенного в системе макета. Примеры заданий могут использоваться не
только как для проверки знаний и навыков по программированию, но и для
наглядного объяснения архитектуры при чтении теоретического материала.
После изучения теоретического материала, а именно: архитектуры МК,
аппаратных и программных средств, основных типов интерфейсов, системы
команд и симулятора МК, можно приступить к практической реализации
различных задач на основе МК.
Именно написание программ и умение их объяснить является критерием
понимания архитектуры МК, а также критерием способности использовать данную
архитектуру в сочетании с программированием (ассемблером).
Конкретных примеров заданий может быть очень много. Мы разделим эти
примеры на несколько общих классов. Сначала перечислим достаточно простые
классы задач.
1. Работа с памятью.
К этому классу задач можно отнести любые операции с различными
областями памяти, такие как чтение или запись. К примеру, можно считывать
или записывать данные из/в EEPROM, SRAM или даже памяти программ (Program
Memory). Меняя начальный адрес и размер данных, а также тип (область)
памяти можно создавать различные примеры задач.
2. Индикация.
Подключая к выводам портов различные системы индикации, будь то
простые светодиоды, ССИ или ЖКИ можно создать широкий класс задач.
Различные варианты примеров можно создать, изменяя очередность или
длительность световой индикации. Можно сделать несколько примеров заданий с
движущимися символами или «бегущей строкой», задавая различные символы и
строки. Реализация различной длительности индикации может осуществляться
либо с помощью таймера, либо с помощью циклов задержки, либо другими
способами, что увеличивает разнообразие вариантов заданий.
3. Вычисления и обработка данных
Существует много примеров с арифметическими вычислениями. К примеру,
можно производить сложение, вычитание, умножение, деление или сравнение 8-
или 16-разрядных чисел. Также существуют математические или базисные
логические функции, из которых можно строить более сложные произвольные
функции.
Еще к этому классу задач относятся преобразование 8-, 16-разрядных
чисел в упакованные (или нет) двоично-десятичные (Binary Coded Decimal –
BCD) и обратно, сортировка чисел различными способами и фильтрация.
4. Измерение внешних параметров и устройства управления:
Сюда входят задачи по измерению напряжения, тока, частоты, давления,
скорости вращения и других параметров. Создание часов реального времени,
калькулятора, кодового замка, управление двигателем, регулировка
температуры.
Это достаточно сложный класс задач, так как он может включать в себя и
некоторые вышеперечисленные классы (1-3).
Варианты заданий
Префикс 0x – обозначает шестнадцатеричное число, 0b – двоичное, без
префикса пишется десятичное число.
Во всех вариантах необходимо составить и отладить программу с помощью
симулятора и если необходимо запрограммировать микроконтроллер с помощью
программатора в системе макета.
1. Дан массив А из 8 (или др.) однобайтовых чисел распложенных в Program
Memory или EEPROM начинающийся с адреса 0x0A (или др.). Переписать из
массива А в массив В все числа, большие 0x05 (или др.) и меньшие 0x2С.
Массив В может находиться либо в EEPROM, либо в SRAM.
2. Написать программу перекодировки восьмиразрядного или
шестнадцатиразрядного двоичного числа в упакованное двоично-десятичное
число.
3. Написать программу перекодировки двухразрядного или пятиразрядного
двоично-десятичного числа в двоичное.
4. Написать программу сложения или вычитания двух двухразрядных десятичных
чисел
5. Дан массив А из 8 (или др.) однобайтовых или двухбайтовых кодов.
Определить, содержит ли он код 0хАС или 0хАFВС. Если "да", то в регистр
Rn занести число таких кодов.
6. Дан массив А из 10 однобайтовых (или др.) чисел. Переписать его в массив
В, упорядочив числа по возрастанию (или по убыванию).
7. Дан массив А из 10 однобайтовых чисел. Переписать в массив В только
числа, содержащие четное (или нечетное) количество единиц (или нулей).
8. Зашифровать содержащиеся в массиве А коды 10 букв или цифр по следующему
правилу: а) циклический сдвиг влево на 5 (или др.) разрядов и побитовая
инверсия; б) прибавить константу 2 (или др.) и циклический сдвиг вправо
на 3 разряда.
9. Дан массив А из 5 однобайтовых чисел. Определить, содержит ли он число
0х1F (или др.). Если да, то выполнить операцию "логическое И" (или др.)
над всеми числами массива А.
10. Переписать в стек, расположенный в памяти с адреса С, массив А из 10
восьмиразрядных (или др.) чисел. Выполнить операцию суммирования (или
др.) над ними.
11. Дан массив А из 10 однобайтовых чисел, содержащий число 0хАА. Выполнить
операцию "логическое И" (или др.) над всеми числами до 0xАА и операцию
"логическое ИЛИ" (или др.) над всеми числами после него.
12. Написать программу вычисления логической функции V=X*(NOT.Y*Z+NOT.W)
(или др.) ,где + - знак операции ИЛИ,* - знак операции И, X,Y,Z,W-
логические переменные, хранимые в разрядах 3-0 ячейки памяти EEPROM по
адресу 0x00.
13. Написать программу сложения или вычитания двух 8 разрядных (или др.)
двоичных чисел со знаком (или без).
14. Дан массив А из 10 однобайтовых чисел. Переписать в массив В все числа,
большие (или меньшие) 0х20, и записать в регистр Rn (или вывести на
индикатор) число таких чисел.
15. Определить четное или нечетное число единиц (или нулей) в 8 двоичных
кодах, записанных в массиве А, и вывести на индикатор сообщение «Ч» или
«Н» (или число единиц).
16. Дан массив А из 10 однобайтовых чисел. Переписать в массив В все числа,
лежащие в диапазоне 0х0F – 0хF0 (или др.). Вывести на индикатор число
таких чисел.
17. Дан массив А из 8 однобайтовых чисел, содержащий число 0хА1. Необходимо
найти сумму всех чисел массива А, находящихся до этого числа. Результат
вывести на индикатор.
18. В массиве А хранится 8 показаний температуры больных .Проверить, нет ли
среди них значений выше 37 и ниже 36 и вывести на индикатор
соответственно два числа через пробел.
19. Разработать программу вывода на индикатор отладочного устройства
последовательности цифр 1-8,образовав ряд 12345678.
20. Разработать программу вывода на индикатор всех битов регистра состояния
процессора SREG в формате: каждому флагу (биту)- один разряд индикатора.
21. Разработать программу для последовательного вывода всех цифр на один
семисегментный индикатор с интервалом вывода -1с.
22. Разработать программу мигания одного (или др.) разряда дисплея с
интервалом 3сек. (или др.).
23. Разработать программу последовательного гашения всех индикаторов
дисплея после его включения.
24. Разработать программу циклического перемещения одного символа,
хранимого в ячейке памяти, вдоль индикатора (бегущий символ).
25. Разработать программу для циклического перемещения набора цифр или
символов вдоль индикатора в направлении справа налево (или наоборот).
26. Разработать программу "Электронные часы", используя для индикации семи
сегментный индикатор. Формат вывода «22.15.30» или «22.15», обеспечив
мигание точки с интервалом 1с.
27. Разработать программу, чередующую вывод на индикатор сообщений «1C»,
«2C» и «4C» (или др.) удерживаемых соответственно 1сек, 2сек и 4сек.
28. Используя матричную клавиатуру 3х3 и светодиод разработать программу и
устройство, которое обеспечивало мигание светодиода такое количество раз
равное номеру нажатой клавиши (1 – 9).
29. Используя матричную клавиатуру 4х4 (или др.) и систему индикации
разработать программу и устройство кодового замка из 4 (или др.) цифр
кода.
30. Используя матричную клавиатуру 4х4 (или др.) и семи сегментные
индикаторы разработать программу и устройство калькулятора, которое
обеспечивает сложение, вычитание, умножение и делание 16-ти разрядных
чисел.
31. Используя генератор звуковых колебаний и несколько разрядов ССИ
разработать программу и устройство измерения частоты в диапазоне 20 Гц –
20 КГц.
Основные принципы выполнения заданий.
Предполагается, что обучающийся должен иметь представление об
архитектуре и системе команд микроконтроллеров AVR. При выполнении задания
необходимо придерживаться следующих правил:
1) уяснить поставленную задачу, понимая, что должно являться
результатом;
2) выбрать соответствующий микроконтроллер, исходя из требования
задания;
3) составить подробное (побитовое) описание необходимых для выполнения
задания регистров имея перед собой таблицу всех регистров
ввода/вывода (см. ПРИЛОЖЕНИЕ 2);
4) определить необходимые векторы прерываний и составить алгоритмы
соответствующих обработчиков векторов прерываний;
5) составить алгоритм основной программы, учитывая особенности МК
(стек и т.д.);
6) приступить к написанию программы, выбирая необходимые команды
ассемблера.
На рис. 3.15.1 изображена структурная схема процесса обучения. Она
включает:
1) Написание программы прошивки микроконтроллера, для решения
поставленной задачи;
2) Контроль правильности разработанной программы на симуляторе с
помощью компьютера (первая петля обратной связи);
3) Прошивка микроконтроллера и сопряжение с системой индикации
(внешними устройствами) для окончательного контроля правильности
выполненной задачи (вторая петля обратной связи).
Рис. 3.15.1 Структурная схема процесса обучения.
3.2.2. Рассмотрение типовых примеров
В качестве примера работы с памятью рассмотрим следующее задание:
Требуется написать программу копирования таблицы из 20 восьмибитных чисел
данных из памяти программ (Program Memory) в оперативную память (SRAM)
начиная с адреса 0х80.
Рассмотрим выполнение данной программы в соответствии с предложенными
выше правилами.
В данном примере нам необходимо работать с оперативной памятью SRAM.
Так как в МК AT90S1200 её нет, то выбираем к примеру AT90S8515 (или др).
Теперь нам надо позаботиться о правильной инициализации стека, загрузив в
указатель стека адрес старшей ячейки оперативной памяти. Данную программу
можно полностью реализовать на симуляторе AVR Studio Simulator, где
наглядно будет видна вся карта памяти. Ниже приведем программу с некоторыми
пояснительными комментариями.
Программа копирования таблицы данных:
;********************************************************************
.include "8515def.inc"
.equ BLOCK1 =$80 ;начальный адрес копируемой таблицы данных в SRAM
;памяти
.def flashsize =r16 ;РОН хранящий размер таблицы
.def temp =r16 ;РОН для промежуточных действий
rjmp RESET ;вектор прерывания по включению питания,
сбросу
;RESET или сбросу от сторожевого таймера
;**********************************************************************
;* Подпрограмма копирования таблицы данных из памяти программ в SRAM
flash2ram:
lpm ;загружаем из памяти программ в R0 байт адрес
;которого указан в Z
st Y+,r0 ;сохраняем его в SRAM памяти с постинкрементом
;регистра Y
adiw ZL,1 ;инкремент Z
dec flashsize ;декремент flashsize
brne flash2ram ;если предыдущая операция не равна 0 то перейти на
;метку
ret ;возврат в основную программу
;***********************************************************************
;* Основная программа
RESET:
ldi temp, low(RAMEND) ; инициализируем указатель стека
out SPL, temp ;
ldi temp, high(RAMEND) ;
out SPH, temp ;
ldi ZH, high(F_TABLE*2) ;загружаем в регистр Z удвоенный адрес
ldi ZL, low(F_TABLE*2) ; начала таблицы данных
ldi YH, high(BLOCK1) ;загружаем в регистр Y адрес начала
ldi YL, low(BLOCK1) ; таблицы данных в SRAM памяти
ldi flashsize,20 ;определяем размер таблицы
rcall flash2ram ;вызываем подпрограмму копирования таблицы данных
;из памяти программ в SRAM память
forever:rjmp forever ;бесконечный цикл
F_TABLE:
.db 0,1 ;начало таблицы из 20 восьмибитных чисел
.db 2,3
.db 4,5
.db 6,7
.db 8,9
.db 10,11
.db 12,13
.db 14,15
.db 16,17
.db 18,19
;**********************************************************************
В качестве примера задачи по индикации рассмотрим второй пример:
Используя два светодиода и кнопку разработать программу и устройство
которое вызывает мигание одного светодиода, подключенного к выводу PB0, и с
помощью кнопки, подключенной к выводу PD5, зажигает светодиод, подключенный
к выводу PB4. Частоту мигания светодиода порядка 2-3 Гц задать с помощью
обработчика прерывания от таймера Т0.
Данное устройство можно реализовать на МК AT90S1200. Для обеспечения
заданной частоты мигания светодиода коэффициент предварительного деления
тактовой частоты (4Гц) для таймера Т0 будет равен 1024. Подпрограмма
обработки прерывания по переполнению таймера Т0 инвертирует значение
логического уровня (0 или 1) на 0 выводе порта В, обеспечивая тем самым
мигание подключенного светодиода. Светодиоды подключаются согласно разделу
«1.4.2 Световая индикация». Исходный текст программы цифрового частотомера:
;********************************************************************
.include "1200def.inc"
rjmp Start ;вектор прерывания по включению питания, сбросу
;RESET или сбросу от сторожевого таймера
nop ;вектор внешнегго прерывания неиспользуется
rjmp TmrInt ;вектор прерывания по переполнению таймера Т0
;**********************************************************************
;* Подпрограмма обработки прерывания по переполнению таймера Т0
TmrInt:
in R0, SREG ;сохранение регистра статуса SREG
in R16, PORTB ;запомнить текущее значение PortB
ldi R17, $1 ;
eor R16, R17 ;инвертируем 0 бит порта В
out PORTB, R16
out SREG, R0
reti ;выход из подпрограммы
;********************************************************************
;* Основная программа
Start:
ldi R18, $11 ;конфигурируем биты порта В
out DDRB, R18 ; как выход
clr R18
out PORTB, R18
clr R18 ;конфигурируем 5 бит порта D
out DDRD, R18 ; как вход
ldi R18, $20
out PORTD, R18
ldi R18, 5 ;устанавливаем коэффициент предварительного деления
out TCCR0, R18 ; частоты на 1024
ldi R18, 2 ;разрешаем прерывание по переполнению таймера Т0
out TIMSK, R18
SEI ;общее разрешение прерываний
Loop: ; Loop Around Forever
sbis PIND, 5 ;если PIND5=0 (кнопка нажата)
rjmp PORTB0_Hi ; перейти на метку PORTB0_Hi
cbi PORTB, 4 ;обнулить бит 4 порта В
rjmp Loop
PORTB0_Hi: ;
sbi PORTB, 4 ;установить бит 4 порта В
rjmp Loop
;**********************************************************************
В качестве третьего, достаточно сложного примера рассмотрим программу
для измерителя частоты в диапазоне 20 Гц – 20 КГц, используя генератор
звуковых колебаний и несколько разрядов ССИ.
Согласно схеме изображенной на рис. 3.15.2. преобразуем колебания от
генератора в П-импульсы и подаем на вывод прерывания (INT0) МК. Диод D1
обеспечивает однополупериодное выпрямление исследуемой синусоиды. После
делителя R1, R3 напряжение поступает на ограничитель R2, D2 с напряжением
ограничения не больше 5 В.
Рис. 3.15.2 Схема подключения генератора колебаний к микроконтроллеру.
Таймер/счетчик Т1 ведет подсчет тактовых импульсов с коэффициентом
деления частоты равным 64, а при переполнении останавливается и обнуляется.
Внешнее прерывание INT0 вызывает соответствующую подпрограмму
обработки при нарастающем фронте сигнала на одноименном выводе INT0. Эта
подпрограмма позволяет таймеру/счетчику Т1 определить число импульсов за
один период внешнего сигнала. Далее основная программа преобразует этот
значение в частоту и переведя в двоично-десятичный код выводит на
семисегментные индикаторы, которые подключаются к МК согласно разделу
1.4.2. Программа прошивки МК для реализации устройства измерителя частоты
на базе МК AT90S8515 приведена в ПРИЛОЖЕНИИ 3.
Последний рассмотренный пример представляет устройство «кодовый
замок». Реализованное на основе МК AT90S1200, оно содержит матричную
клавиатуру и два светодиода для индикации работы и правильности введенного
кода. Программа прошивки МК для реализации этого устройства приведена в
ПРИЛОЖЕНИИ 4.
3.3. Описание макета программатора.
Макет программатора состоит из общей платы и вспомогательных плат
реализующих необходимые функции заданий. Общая плата имеет разъем,
соединяющая программатора с параллельным портом компьютера. На общей плате
также расположены две контактных колодки (дип панели) для установки
программируемых микроконтроллеров. Они позволяют использовать МК следующих
типов: а) дип панель DIP2x20.2 для МК серий AT90S4414 и AT90S8515; б) дип
панель DIP2x10.1 для МК серии AT90S1200 AT90S2313.
Вспомогательные платы позволяют макетировать проектируемое устройство,
управляемое микроконтроллером, не подвергая нежелательным механическим
воздействиям сам программатор и микросхему контроллера. Вспомогательные
платы соединяются с общей платой через дополнительные разъемы, что
позволяет более прагматично использовать имеющиеся порты (выводы) МК.
Питание программатора обеспечивается от внешнего блока
стабилизированного питания МС9011.02 с выходным напряжением Vcc=+5В при
максимальном токе нагрузки Iн=1.5А.
Рис. 3.16. Принципиальная схема макета программатора.
На рис 3.16. приведена принципиальная схема макета программатора для
последовательного программирования МК серии AT90S1200 и AT90S8515 через
параллельный (LPT) порт компьютера. Подсоединение к компьютеру
осуществляется с помощью кабеля подключения изображенного на рис. 3.17.
Соединительный кабель для подключения макета программатора к
параллельному (LPT) порту компьютера состоит из двух разъемов DB25F и
BH10.1 и двух шлейфов по 26 и 10 жил соединенных между собой согласно
таблице 3.1. и таблице 3.2. Разъем DB25F (штырь) подсоединяется к
параллельному (LPT) порту компьютера, а BH10.1 (гнездо) к разъему BH10.2
(штырь) на макете программатора (см. рис. 3.16).
Рис. 3.17. Кабель подключения макета к LPT порту компьютера.
Таблица № 3.1. Соответствие номера контакта разъема DB25F и
порядкового номера 25 жильного шлейфа.
|5 |XTAL1 |4 |
|6 |RESET |5 |
|7 |MOSI |1 |
|8 |SCK |7 |
|10 |MISO |9 |
|19-25 |Gnd |10 |
На приведенной схеме макета программатора кроме соединительных
разъемов и контактных колодок МК находятся внешние элементы необходимые для
обеспечения работы тактового генератора. Это конденсаторы С2=С1=39 пФ,
С3=1000 пФ и кварц с частотой генерации колебаний 4 МГц. Кнопка В1
обеспечивает сброс МК в начальное состояние.
Подключение вспомогательных плат к макету программатора осуществляется
через штыревые разъемы PLS.1, PLS.2 и PLS.3. Так как разъем PLS.1 соединен
с дип панелью DIP2x10.1, в которую устанавливается МК серии AT90S2313 и
AT90S1200, а разъемы PLS.2 и PLS.3 соединены с дип панелью DIP2x20.2, в
которую устанавливается МК серий AT90S4414 и AT90S8515, то нумерация
выводов разъема PLS.1 соответствует нумерации ножек AT90S1200, а нумерация
выводов разъемов PLS.2 и PLS.3 соответствует нумерации ножек AT90S4414 и
AT90S8515.
В макете программатора при программировании и последующей работе
должен находиться только один (!) микроконтроллер, либо в панели DIP2x10.1
(AT90S1200 или AT90S2313), либо в панели DIP2x20.2 (AT90S4414 или
AT90S8515). К разъемам PLS.n (n=1,2,3) через соответствующую колодку можно
подсоединять любые внешние устройства: светодиоды, ССИ, кнопки, матричную
клавиатуру, подавать сигнал на какой либо порт (вывод) микроконтроллера или
считывать его. При этом надо помнить, что на контакт 20 разъема PLS.1 и на
контакт 40 разъема PLS.3 подается напряжение Vcc=+5В.
Макет программатора имеет два режима работы. Первый – непосредственное
программирование микроконтроллера с помощью компьютера. Как с подключенными
внешними устройствами, так и без них. Второй режим – автономный, когда
происходит работа с внешними устройствами, выполненными на вспомогательных
платах. При этом режиме макет программатора должен быть отсоединен от
компьютера.
Сначала обучающийся должен, получив задание, подготовить (написать и
отладить) программное обеспечение с помощью AVR Studio (см. раздел 3.1.),
согласно пп. 1-6 раздела 3.2. (Принципы выполнения заданий). Результатом
данного этапа является безошибочная трансляция разработанной программы.
Только после этого можно приступить к использованию макета программатора и
построению внешнего устройства на вспомогательной плате, если это
предусмотрено заданием.
ЗАКЛЮЧЕНИЕ
Разработанные методические указания содержат описания программного
обеспечения и аппаратных средств реализации набора примеров заданий,
предназначенных для изучения как непосредственной архитектуры МК, так и для
выработки конкретных навыков программирования.
Проведен анализ архитектуры современных микроконтроллеров. Уделено
внимание систематизации аппаратных средств и общим вопросом методам отладки
разрабатываемых программ.
Особое внимание уделено серийным МК фирмы ATMEL семейства AVR.
Рассмотрены их особенности построения и функционирования. Анализ системы
команд микроконтроллеров AVR и практические рекомендации работы в
интегрированной среде разработки «AVR Studio» позволяет эффективно
создавать и разрабатывать программы для AVR микроконтроллеров.
Представлен набор типовых примеров с наиболее распространенными
задачами программирования МК. Предложены классификация и принципы
выполнения заданий. Дано описание универсального макета программатора.
Изготовлен универсальный макет программатора, позволяющий проводить не
только прошивку МК AVR четырех типов (AT90S1200, AT90S2313, AT90S4414,
AT90S8515), но и управление проектируемыми внешними устройствами.
Реализован ряд задач по работе с памятью, по перекодировке, сложению и
делению чисел, по работе с динамической индикацией и матричной клавиатурой.
На основе этого смакетированы реальные устройства кодового замка на основе
AT90S1200 и измерителя частоты в звуковом диапазоне на основе AT90S8515.
Предлагаемая на этой основе методика обучения программирования и
применения МК позволяет ввести интересующихся в эту перспективную область.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Предко М. Руководство по микроконтроллерам. Том 1. / Пер. с англ. под
ред. И. И. Шагурина и С. Б. Лужанского – М.: Постмаркет, 2001. – 416
с.
2. Предко М. Руководство по микроконтроллерам. Том 2. / Пер. с англ. под
ред. И. И. Шагурина и С. Б. Лужанского – М.: Постмаркет, 2001. – 488
с.
3. Cady, Fredrick M. Microcontrollers and microcomputers: principles of
software
and hardware engineering. – New York – Oxford, Oxford University
Press,
1997. – 252 p.
4. Вуд А. Микропроцессоры в вопросах и ответах. / Пер. с англ. под ред.
Д. А. Поспелова. – М.: Энергоатомиздат. 1985. – 184 с.
5. Уильямс Г.Б. Отладка микропроцессорных систем: / Пер. с. англ. – М.:
Энергоатомиздат, 1988. – 253с.
6. Угрюмов Е.П. Цифровая схемотехника. – Спб.: БВХ – Санкт-Петербург,
2000. – 528 с.
7. Алексенко А.Г., Шагурин И.И. Микросхемотехника. – М.: Радио и связь,
1990. – 496 с.
8. Бродин Б.В., Шагурин И.И. Микроконтроллеры: Справочник. – М.: ЭКОМ,
1999. – 395 с.
9. Программируемые логические ИМС на КМОП-структурах и их применение. /
П.П. Мальцев, Н.И. Гарбузов, А.П. Шарапов, А.А. Кнышев. – М.:
Энергоатомиздат, 1998. – 158 с.
10. Соловьев В.В., Васильев А.Г. Программируемые логические интегральные
схемы и их применение. – Мн.: Беларуская наука, 1998. – 270 с.
11. Bursky D. Embedded Logic and Memory Find a Home in FPGA. – Electronic
Design, 1999, №14, pp. 43-56.
12. Chang D., Mazek-Sadowska M. Dynamically Reconfigable FPGA. – JEEE
Transition on Computers, 1999, №6, pp. 565 – 578.
13. Bursky D. Advanced CPLD Architectures Challenge FPGA, Gas. –
Electronic Design, 1998, №22, pp. 78 – 86.
14. Takai Y. a.o. 250 Mbytes Synchronous DRAM Using a 3-Stage-Pipeline
Architecture. – JEEE. Journal of Solid-Stage Circuits. – 1994, v.29,
№4,
pp. 426 – 429.
15. Лаптев В. Цифровой измеритель температуры на базе AVR
микроконтроллера и RC-цепочки. – Электронные компоненты, 2001. №2, с.
46 – 49.
16. http://www.atmel.ru/ - описание AVR микроконтроллеров, русскоязычный
сайт.
17. http://www.dontronics.com/atmel.html - программные проекты по AVR.
18. http://www.gaw.ru/, http://www.cec-mc.ru - информация о МК фирмы ATMEL
19. http://trush.da.ru/, http://avr.da.ru/ - описание МК AT90S1200 фирмы
Atmel
20. http://www.ln.com.ua/~real/avreal, http://www.chat.ru/~avreal: -
AVReAl: программа прошивки At90sXXXX через LPT порт
21. http://trush.pp.ru/avr/ - полезные ссылки по AVR.
ПРИЛОЖЕНИЕ 1
Инструкции процессоров AVR.
Ниже приведен набор команд процессоров AVR, более детальное описание их
можно найти в AVR Data Book [16,19].
Таблица А.1. Арифметические и логические инструкции.
|Мнемони|Опера|Описание |Операция |Флаги |Цик|
|ка |нды | | | |лы |
|ADD |Rd,Rr|Суммирование без переноса|Rd = Rd + Rr |Z,C,N,V|1 |
| | | | |,H,S | |
|ADC |Rd,Rr|Суммирование с переносом |Rd = Rd + Rr + C |Z,C,N,V|1 |
| | | | |,H,S | |
|SUB |Rd,Rr|Вычитание без переноса |Rd = Rd - Rr |Z,C,N,V|1 |
| | | | |,H,S | |
|SUBI |Rd,K8|Вычитание константы |Rd = Rd - K8 |Z,C,N,V|1 |
| | | | |,H,S | |
|SBC |Rd,Rr|Вычитание с переносом |Rd = Rd - Rr - C |Z,C,N,V|1 |
| | | | |,H,S | |
|SBCI |Rd,K8|Вычитание константы с |Rd = Rd - K8 - C |Z,C,N,V|1 |
| | |переносом | |,H,S | |
|AND |Rd,Rr|Логическое И |Rd = Rd · Rr |Z,N,V,S|1 |
| | | | | | |
|ANDI |Rd,K8|Логическое И с константой|Rd = Rd · K8 |Z,N,V,S|1 |
|OR |Rd,Rr|Логическое ИЛИ |Rd = Rd V Rr |Z,N,V,S|1 |
|ORI |Rd,K8|Логическое ИЛИ с |Rd = Rd V K8 |Z,N,V,S|1 |
| | |константой | | | |
|EOR |Rd,Rr|Логическое исключающее |Rd = Rd EOR Rr |Z,N,V,S|1 |
| | |ИЛИ | | | |
|COM |Rd |Побитная Инверсия |Rd = $FF - Rd |Z,C,N,V|1 |
| | | | |,S | |
|NEG |Rd |Изменение знака (Доп. |Rd = $00 - Rd |Z,C,N,V|1 |
| | |код) | |,H,S | |
|SBR |Rd,K8|Установить бит (биты) в |Rd = Rd V K8 |Z,C,N,V|1 |
| | |регистре | |,S | |
|CBR |Rd,K8|Сбросить бит (биты) в |Rd = Rd · ($FF - |Z,C,N,V|1 |
| | |регистре |K8) |,S | |
|INC |Rd |Инкрементировать значение|Rd = Rd + 1 |Z,N,V,S|1 |
| | |регистра | | | |
|DEC |Rd |Декрементировать значение|Rd = Rd -1 |Z,N,V,S|1 |
| | |регистра | | | |
|TST |Rd |Проверка на ноль либо |Rd = Rd · Rd |Z,C,N,V|1 |
| | |отрицательность | |,S | |
|CLR |Rd |Очистить регистр |Rd = 0 |Z,C,N,V|1 |
| | | | |,S | |
|SER |Rd |Установить регистр |Rd = $FF |None |1 |
|ADIW |Rdl,K|Сложить константу и слово|Rdh:Rdl = Rdh:Rdl +|Z,C,N,V|2 |
| |6 | |K6 |,S | |
|SBIW |Rdl,K|Вычесть константу из |Rdh:Rdl = Rdh:Rdl -|Z,C,N,V|2 |
| |6 |слова |K6 |,S | |
|MUL |Rd,Rr|Умножение чисел без знака|R1:R0 = Rd * Rr |Z,C |2 |
|MULS |Rd,Rr|Умножение чисел со знаком|R1:R0 = Rd * Rr |Z,C |2 |
|MULSU |Rd,Rr|Умножение числа со знаком|R1:R0 = Rd * Rr |Z,C |2 |
| | |с числом без знака | | | |
|FMUL |Rd,Rr|Умножение дробных чисел |R1:R0 = (Rd * Rr) |Z,C |2 |
| | |без знака | psw length
brge kpr_exceed
;then goto kpr_exceed
not_kpr_exceed: rjmp init_scan
kpr_exceed: brts psw_true
;if T=1 then password is true
ldi key_pr_count, psw_length
;else (T=0 password is false)
rjmp init_scan
psw_true: ldi temp, 3
green_flash:
cbi PORTD,GREEN ; rcall delay
sbi PORTD,GREEN
rcall delay
dec temp
brne green_flash
exit: rjmp reset ;scan ;ret
red_flash: sbi PORTD,RED
rcall delay
cbi PORTD,RED
rcall delay
dec temp
brne red_flash
rjmp init_scan
;****Time Delay Subroutine for ;****LED flash****
delay: ldi coarse,3;8 ;triple nested FOR loop
cagain: ldi medium,255 ;
magain: ldi fine,255 ;
fagain: dec fine
brne fagain
dec medium
brne magain
dec coarse
brne cagain
ret
;***Settling time delay for port ;***to stabilise****
settle:
cagain2: ldi medium,2 ;
magain2: ldi fine,255 ;
fagain2: dec fine
brne fagain2
dec medium
brne magain2
ret
|AT90S |1200 |2313 |4414 |8515 |2323 |4433 |
|Диапазон напряжений |2,7 - 6,0 |
|питания, В | |
|Тактовая частота, МГц *) |0 - 16 |0 - 20 |0 - 16 |0 - 20 |
|Количество линий |15 |32 |5 |18 |
|ввода/вывода (max) | | | | |
|Количество инструкций |89 |120 |
|Объем Flash ROM, байт |1K |2K |4K |8K |2K |4K |
|Объем EEPROM, байт |64 |128 |256 |512 |128 |256 |
|Объем внутренней SRAM, байт|- |128 |256 |512 |128 |128 |
|Объем внешней SRAM, байт |- |- |64K |64K |- |- |
|(max) | | | | | | |
|Объем регистрового файла, |32 |
|байт | |
|Количество |1 |2 |2 |2 |1 |2 |
|таймеров/счетчиков | | | | | | |
|ШИМ: Число |- |1/8-10|2/8-10|2/8-10|- |2/8-10 |
|каналов/разрядность | | | | | | |
|Количество модулей |- |1 |2 |2 |- |2 |
|захвата/сравнения | | | | | | |
|Аналоговый компаратор |+ |+ |+ |+ |- |+ |
|SPI (загрузка ROM и EEPROM)|+ |+ |+ |+ |+ |+ |
|SPI интерфейс (Master/Slave|- |- |+ |+ |- |+ |
|port) | | | | | | |
|Сторожевой таймер |+ |+ |+ |+ |+ |+ |
|Асинхронный |- |+ |+ |+ |- |+ |
|последовательный порт | | | | | | |
|Аналого - цифровой |- |- |- |- |- |+ |
|преобразователь | | | | | | |
|Количество битов защиты |2 |
|Число источников |2/1 |8/2 |10/2 |10/2 |2/1 |11/2 |
|прерывания: | | | | | | |
|внутренних/внешних | | | | | | |
|Тип корпуса |DIP20, |DIP40, PLCC44,|DIP8, |DIP28, |
| |SOIC20, |TQFP44 |SOIC8 |PLCC28 |
| |SSOP20 | | | |
ПРИЛОЖЕНИЕ 5.
Основные характеристики микроконтроллеров AVR
-----------------------
КC147
D2
1К
120
75
Д105
R2
Vcc
Кнопка ручного запуска RESET
К микроконтроллеру
R1 10К
D1
R3
К микроконтроллеру
R1
Внешний генератор
Внешние устройства
Кнопка (ключ)
R
К МК
V
t
“Звон” при замыкании ключа
Макет программатора
Симулятор
( ЭВМ )
Программа
Объект обучения
Типовая задача
220 Ом
|Микроко|
|нтролле|
|р |
Тактовые сигналы
Командный цикл
Один командный цикл
[pic]
| |SREG |
|Символьное |I |T |H |S |V |N |Z |C |
|обозначение | | | | | | | | |
|Бит |7 |6 |5 |4 |3 |2 |1 |0 |
|AVR |
| | |
| | |
| |XTAL1 |
| | |
| | |
| | |
| |XTAL2 |
|AVR |
| | |
| | |
| |XTAL1 |
| | |
| | |
| | |
| |XTAL2 |
|AVR |
| | |
| | |
| |RESET |
|15 |… | |0 |
| |5 |4 | |
| | |… | |
|КОП |Rd |
|РОН | |
| |R0 |
| |Rd |
| |R31 |
|15 |… |9 … |4 … |
| | |5 |0 |
|КОП |Rd |Rr |
|РОН | |
| |R0 |
| |Rr |
| | |
| |Rd |
| |R31 |
|15 | | |5 |
| | | | 0|
|КОП |Rd/R|P |
| |r | |
| |Регистры | |
| |ввода/выво| |
| |да | |
|0 | | $00|
| | | |
| | | |
|63 | | $3f|
|31 |20 |19 |16 |
|КОП |Rd/Rr |
|младшие 16 бит |
| |Единое адресное| |
| |пространство | |
| | | $00|
| | |00 |
| | | |
| | | |
| | | $ff|
| | |ff |
[pic]
[pic]
Передача данных
Адрес данных из индекса
Выполнение: R0 ( (Z)
PLS.2
PLS.3
PLS.1
BH10.2
Vcc
+5 В
Gnd
RESET
С3
SCK
С1
С2
XTAL1
XTAL2
7
5
9
1
4
10
XTAL1
Gnd
SCK
RESET
MISO
MOSI
Vcc
1 - 40
1 - 20
20
1
21 - 40
21
4???????????????????????????????????????????????????????????????????????????
??0
|RESET|
|XTAL2|
|XTAL1|
|MOSI |
|MISO |
|SCK |
|Gnd |
|9 |40 |
|18|DIP2|
| |x20.|
| |2 |
|19| |
|6 | |
|7 | |
|8 | |
|20| |
DB25F
BH10.1
1-25
13
1
14
25
9
20
1
|RESET|
|XTAL2|
|XTAL1|
|MOSI |
|MISO |
|SCK |
|Gnd |
|1 |20 |
|4 |DIP|
| |2x1|
| |0.1|
|5 | |
|17| |
|18| |
|19| |
|10| |
1 - 20
1
2
10
1-10
Страницы: 1, 2, 3, 4
|