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 жильного шлейфа.
Порядковый номер 25 жильного шлейфа | 1 (крас-ный) | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
Номер контакта в разъеме DB25F | 1 | 14 | 2 | 15 | 3 | 16 | 4 | 17 | 5 | 18 | 6 | 19 | 7 |
Порядковый номер 25 жильного шлейфа | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
Номер контакта в разъеме DB25F | 20 | 8 | 21 | 9 | 22 | 10 | 23 | 11 | 24 | 12 | 25 | 13 | - |
Таблица № 3.2. Соответствие номеров контактов разъема
DB25F и разъема BH10.1.
Разъем DB25F | Символьное обозначение | Разъем BH10.1 |
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 микроконтроллеров.