- •«Инструментальные средства разработки аппаратно-программных систем»
- •Оглавление
- •7 Инструментальные средства разработки систем управления на
- •Введение. Управляющие системы на микроконтроллерах.
- •Характеристика микроконтроллеров семейства avr
- •1.1 Особенности микроконтроллеров
- •1.2 Характеристики микроконтроллера aTмega16
- •1.3 Условное графическое обозначение микроконтроллера
- •2 Архитектура микроконтроллера
- •2.1 Структура микроконтроллера
- •2.2 Организация программной памяти
- •Организация памяти данных
- •2.4 Арифметико-логическое устройство и регистр состояния процессора
- •Методы адресации. Форматы команд
- •Система команд
- •2.6.1 Команды передачи данных (пересылки)
- •2.6.2 Команды передачи управления
- •2.6.3 Команды арифметики и логики (вычислительные)
- •2.6.4 Команды сдвигов и операций с битами
- •2.7 Функционирование конвейера
- •3 Встроенные устройства
- •3. 1 Параллельные порты ввода/вывода
- •Подсистема прерываний микроконтроллера
- •Регистр флагов прерываний таймеров/счетчиков – tifr
- •Таймеры/счетчики
- •Общие сведения
- •Таймер/счетчик т0.
- •3.3.3 Таймер/счетчик т1.
- •Сторожевой таймер (Watchdog Timer).
- •3.4 Последовательные интерфейсы -spi и uart
- •3.4.1 Последовательный периферийный интерфейс - spi
- •3.4.2 Uart - универсальный последовательный порт
- •3.5 Аналоговый компаратор и ацп
- •3.5.1 Аналоговый компаратор
- •3.5.2 Аналого-цифровой преобразователь
- •3.6 Энергонезависимая память данных
- •4 Ассемблер микроконтроллеров avr
- •5 Взаимодействие микроконтроллера с объектом управления
- •5.1 Формирование временных интервалов (задержек)
- •5.1.1 Программный способ формирования временных интервалов
- •Ext_l: ldi r17, X ;х – число внутренних циклов
- •Ext_l: ldi r17, 53 ;Загрузка в r17 константы внутреннего цикла
- •5.2 Генерация импульсных сигналов управления с использованием программных задержек
- •5.2.1 Генерация последовательности импульсов с использованием программных задержек
- •5.2.2 Генерация пакета импульсов
- •5.2.3 Генератор заданного числа пакетов импульсов
- •Формирование импульсных сигналов управления с использованием таймеров микроконтроллера
- •5.4 Ожидание внешних событий
- •5.5 Обработка динамического дисплея
- •5.6 Особенности схемы дисплея в учебной системе управления.
- •5.7 Часы
- •5.8 Измерение временных параметров импульсов
- •5.9 Обработка клавиатуры
- •6 Программирование микроконтроллеров aТmega16
- •7 Инструментальные средства разработки сисТем управления на микроконтроллерах aTmega16
- •Дубров ф.И. Встроенные системы управления на микроконтроллере aTmega16
5.6 Особенности схемы дисплея в учебной системе управления.
1) В учебной системе управления (рисунок 62) на шине данных включен последовательный сдвиговый регистр DD2. Обработчик дисплея, кроме выполнения основных функций, должен обеспечить процедуру последовательной записи данных (семисегментного кода) в сдвиговый регистр DD2. Данные должны выдаваться в разряд РС0 микроконтроллера младшим битом семисегментного кода вперед. Запись и сдвиг бита в регистр должена производиться положительным импульсом в разряде РС.7 микроконтроллера (вход С регистра DD2). После выполнения этой процедуры семисегментный код из регистра DD2 через резисторы R1-R8 поступают на сегментные входы индикаторов.
2) Выбор (включение) разряда индикатора производится сигналом низкого уровня с соответствующего выхода дешифратора DD3. Этот уровень поступает на базу одного из ключей VT1-VT4 и открывает ключ. Напряжение +5В поступает через открытый транзистор и включает соответствующий разряд индикатора. Таким образом, обработчиком выбор разряда индикатора должен производиться двоичным кодом в разрядах РС0 и РС1. Соответственно разряд РС6 должен быть установлен в единицу.
Рисунок 62
3) При загрузке семисегментного кода в регистр DD2, во избежание подсветки включенного разряда, необходимо установить РС6 микроконтроллера в состояние логической единицы, что приведет к выключению всех разрядов.
Текст программы:
.include "m16def.inc"
.org 0
;***********Definition********************************
.equ Set_razr = 0b11000011
.def adr_cnt = r20
.def Num_segments = r22
Start:
ldi r16,low(RAMEND) ;установка указателя стека на
out SPL,r16 ;максимальный адрес SRAM ATmega16
ldi r16,high(RAMEND)
out SPH,r16
sbi PORTC,6 ;Выключение индикатора (см. схему)
ldi r16,Set_razr ;Линии 0,1,6,7 PORTC на вывод(см. схему)
out DDRC,r16 ;входы D и С регистра,входы дешифратора
Cikl: ldi adr_cnt,0 ; двоичный адрес разряда индикатора,и
;счетчик числа разрядов индикатора
ldi XH,$00 ;адрес первой ячейки области ОЗУ, в которой
;хранятся данные (ячейки $60-$63)
ldi XL,$60
Nxt_razr:
Ldi r31,High(Tab_code*2);загрузка старшей и младшей
ldi r30,Low(Tab_code*2) ;половин адреса начала таблицы
;кодов символов
ld r16,x+ ;загрузить в R16 первый байт данных из ячейки
;памяти, адрес которой находится в Х
add r30,r16 ;сложить содержимое регистров R30 и R16 для
;получения адреса ячейки таблицы
;перекодировки, в которой находится
;семисегментный код символа соответствующий ;содержимому отображаемой в данный момент ;ячейки дисплея
ldi r16,0
adc r31,r16;если адрес таблицы больше чем 255, то учтем
;перенос в регистр R31
lpm ;загрузить в R0 семисегментный код из таблицы ;перекодировки
ldi Num_segments, 8; Количество сегментов и
;одновременно счетчик загрузки
;семисегментного кода в регистр DD4
;****Процедура последовательной загрузки регистра DD2(см. схему)
Load_regist:MOV R16,R0 ;сохранить копию сегм. кода в R16
;будем загружать R16 в порт, (а на вход D регистра поступит через РС0
;только младший разряд кода из младшего разряда регистра R16). Перед
;выгрузкой R16 надо установить шестой разряд байта в R16(он через РС6
;микроконтроллера выключит индикатор, так как нулевой уровень
;сместится на один из неиспользуемых выходов дешифратора) и сбросить
;седьмой разряд в R16, чтобы на входе С регистра установился нуль.
SBR R16,$40 ;установить 1 на входе дешифратора для выкл.
;текущего разряда перед загрузкой регистра
;семисегментным кодом для след. разряда
CBR R16,$80 ;ноль на входе С регистра
out PORTC,r16 ;выключается индикатор и один разряд ;семисегментного кода через РС0 ;поступает на вход ;D регистра
sbi PORTC,Sinhr ;Запись разряда в регистр - посылаем ;синхроимпульс
cbi PORTC,Sinhr
roR r0 ;следующий разряд семисегментного кода ;в младшем разряде r0
dec Num_segments ;отсчет в сторону вычитания счетчика
;числа импульсов при последовательной
;записи семисегм. кода в регистр
brne Load_regist ;Пока не загрузятся все 8 разрядов
out portc,adr_cnt ;включить разряд индикатора
rcall Time_light ;Задержка свечения разряда индикатора
inc adr_cnt ;Переход на следующее знач. счетчика
;циклов дисплея
cpi adr_cnt,4 ;Он - последний?
brne Nxt_razr ;След разряд индикатора
rjmp Cikl
Time_light: ;*** Задержка 3,75 мс
ldi r16,2
m3: ldi r17,100
m2: ldi r18,100
m1: dec r18
brne m1
dec r17
brne m2
dec r16
brne m3
ret
Tab_code:
.Db 3,$9f,$25,$d,$99,$49,$41,$1f,1,9,$11,$c1,$63,$85,$61,$71