Сборка лекции, страница 4
Описание файла
Документ из архива "Сборка лекции", который расположен в категории "". Всё это находится в предмете "электроника" из , которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "электроника и микропроцессорная техника" в общих файлах.
Онлайн просмотр документа "Сборка лекции"
Текст 4 страницы из документа "Сборка лекции"
BST - Bit Store from Bit in Register to T flag in SREG
CBI - Clear Bit in I/O Register
SBI - Set bit to I/O Register
Последние 2 команды работают только с младшими 32 регистрами ввода/вывода.
Команды управления.
В группу команд управления входят команды безусловного и условного переходов, перехода в энергосберегающий режим, перезапуска сторожевого таймера и «холостая команда».
При запуске программ на языке ассемблера в мнемокодах команд RJMP и RCALL вместо приращения k указывается метка, записанная перед мнемокодом команды, к выполнению которой нужно перейти.
Группа команд условного перехода делится на 2 подгруппы.
В командах первой подгруппы в качестве условия используется состояние одного из битов регистра состояния. Если условие выполняется, то совершается переход по адресу, определяемому меткой, записанной перед мнемокодом команды, к выполнению которой следует перейти. Если условие не выполняется, происходит переход к следующей команде в программе.
Команды условного перехода второй подгруппы анализируют состояние регистров ОН и РВВ. В зависимости от результатов анализа происходит переход либо к очередной команде, либо к следующей за очередной.
Лекция 6. 03.10.2006.
RCALL – Relative Call to Subroutine.
В стек записывается содержимое программного счетчика + 1. После выполнения подпрограммы будет выполняться следующая за RCALL инструкция.
RJMP –Relative Jump.
Пример:
Bmt:
rjmp Bmt
Команды безусловных переходов:
Команды, которые анализируют состояние одного из признаков регистров состояния МК:
BREQ - Branch if Equal
Т.е. это уже категория команд условных переходов, в отличие от предыдущих.
Периферийные устройства AVR-МК.
В группу периферийных устройств входят:
• Параллельные порты ввода/вывода
• Последовательные порты ввода/вывода
• Таймеры счетчики общего назначения
• Сторожевой таймер
• АЦП
• Аналоговый компаратор
• Программируемый аппаратный модулятор
• Блок прерываний
Параллельные порты ввода/вывода (каналы связи):
ППВВ предназначены для обмена данными с внешними устройствами. AVR МК имеет в своем составе от 1 до 6 каналов, каждый из которых поддерживает от 3 до 8 линий связи. Выводы портов могут быть программно установлены на ввод, либо на вывод информации.
Некоторые выводы регистра, кроме функций ввода/вывода могут использоваться для выполнения альтернативных функций.
Работоспособность каждого канала связи обеспечивают регистра (DDRX, PORTX, PINX), входящих в адресное пространство (DDRX, PORTX, PINX). Регистр PINX не имеет аппаратной реализации. Это имя используется в командах.
Регистр с именем DDRX (X=A,B,C,D,E) служит для выбора направления обмена каждого вывода соответствующего порта. При записи 1 в соответствующий разряд регистра, вывод порта с таким же номером программируется на вывод, а при записи 0 на ввод.
В режиме ввода состояние разряда регистра PORTX определяет состояние вывода т.о., что при записи 1 в соответствующий разряд этого регистра вывод с таким же номером соединяется через внутренний резистор сопротивлением 30-120кОм с плюсом напряжения питания.
В этом же режиме (ввода) запись 0 в разряд регистра переводит вывод МК в высокоимпедансное (3-е Z) состояние.
В любом случае вывод МК в режиме ввода соединен с внутренней шиной данных.
В режиме вывода разряд регистра PORTX определяет значение выходного сигнала на соответствующем выводе микросхемы.
При пуске и перезапуске МК все разряды регистров DDRX и PORTX всех портов обнуляются и выводы портов работают в режиме ввода и находятся в Z-состоянии.
DDRX,Y | PORTX,Y | PX,Y |
0 | 0 | Ввод(z) |
0 | 1 | Ввод (r) |
1 | 0 | Вывод (0) |
1 | 1 | Вывод (1) |
X – канал
Y – линия этого канала
Значение входного сигнала на отдельном выводе порта может быть определено с использованием команд условного перехода с мнемокомандами SBIC PINX,Y или SBIS PINX,Y.
Команда In Rd, Pinx позволяет считывать информацию со всех выводов портов одновременно.
Задание значения выходного сигнала на отдельных выводах порта выполняется с использованием команд с мнемокодами CBI PORTX, Y и SBI PORTX,Y. Команда OUT PORTX, Rr позволяют установить все выводы порта одновременно.
SBIC - Skip if Bit I/O Register is Cleared
SBIS - Skip if Bit I/O Register is Set
Register Summary
Adress Name
0x3F | (0x5F) | SREG |
0x3E | (0x5E) | SPH |
0x3D | (0x5D) | SPL |
0x1B | (0x3B) | PORTA |
0x1A | (0x3A) | DDRA |
0x19 | (0x39) | PINA |
0x18 | (0x38) | PORTB |
0x17 | (0x37) | DDRB |
0x16 | (0x36) | PINB |
0x15 | (0x35) | PORTC |
0x14 | (0x34) | DDRC |
0x13 | (0x33) | PINC |
0x12 | (0x32) | PORTD |
0x11 | (0x31) | DDRD |
0x10 | (0x30) | PIND |
1-ое – адреса регистров ввода/вывода
2-ое – адреса в едином адресном пространстве
В 1-ом – 64 регистра
Во 2-ом – 32+64
DD3 – синтезатор частот
DD3 – цифровой потенциометр
МК=СРU
Необходимо задать направление портов B,C и D.
D – это ввод – «0»
B,C – это вывод – «1» → подсоединены к индикаторам
Порт b ответственен за выбор одного из 4 индикаторов,
порт с - за вывод информации на один из этих индикаторов.
DDRX, PORTX, PINX
DDRX (X = A,B,C,D,..)
PORTX,Y; PINX,Y; DDRX,Y ( Y = 0 -7)
port_init:
ser temp ; устанавливает все разряды регистра временного хранения данных в 1
out ddrc,temp ; канал с программируем на ввод
clr temp ; устанавливает все разряды регистра временного хранения данных в 0
out ddrd,temp ; канал в программируем на вывод
ret
Задание: Определить номер индикатора и данные, которые он отображает в процессе выполнения следующей программы.
Восьмисегментный светодиодный индикатор:
include "m8535def.inc" ;Подключить файл описаний имен РВВ
; Инициализация (начальная загрузка) указателя стека
ldi r25, LOW(RAMEND) ; Записать в регистр (16-31) младший байт адреса вершины стека
out spl, r25 ; Переслать его в регистр УС
ldi r25, HIGH(RAMEND) ; Записать в регистр (16-31) младший байт адреса вершины стека
out sph, r25; Переслать его в регистр УС
;
ldi r25,$ff ; запись в регистр 25 восьми единиц
out ddrb, r25 ; программируем канал b на вывод
out ddrc, r25 ; программируем канал с на вывод
main: ; метка
LDI r16,$7f ; R16 → 0111 1111 → 8
OUT portc, r16 ; записывает данные из R16 в порт с (ответственен за вывод)
LDI r16,$fe ; R16 → 1111 1110 → 1 индикатор
OUT portb, r16 ; записывает данные из R16 в порт b (ответственен за выбор индикатора)
rcall wait ; вызывает подпрограмму wait в пределах ±2К слов (4кБайт)
LDI r16,$06 ; R16 → 0000 0110 → 1
OUT portc, r16 ; записывает данные из R16 в порт с (ответственен за вывод)
LDI r16,$fd ; R16 → 1111 1101 → 2 индикатор
OUT portb, r16 ; записывает данные из R16 в порт b (ответственен за выбор индикатора)
rcall wait ; вызывает подпрограмму wait в пределах ±2К слов (4кБайт)
LDI r16,$5b ; R16 → 0101 1011 → 2
OUT portc, r16 ; записывает данные из R16 в порт с (ответственен за вывод)
LDI r16,$fb ; R16 → 1111 1011 → 3 индикатор
OUT portb, r16 ; записывает данные из R16 в порт b (ответственен за выбор индикатора)
rcall wait ; вызывает подпрограмму wait в пределах ±2К слов (4кБайт)
LDI r16,$4f ; R16 → 0100 1111 → 3
OUT portc, r16 ; записывает данные из R16 в порт с (ответственен за вывод)
LDI r16,$f7 ; R16 → 1111 0111 → 4 индикатор
OUT portb, r16 ; записывает данные из R16 в порт b (ответственен за выбор индикатора)
rcall wait ; вызывает подпрограмму wait в пределах ±2К слов (4кБайт)
Время выполнения каждой команды очень мало, поэтому заметить на индикаторе изменения информации невозможно, поэтому:
rjmp main ; относительный переход по адресу метки main в пределах ±2К слов (4кБайт)
; текущего состояния счётчика команд
wait: ; метка
LDI r17,10 ; R17 → 0A → 0000 1010
LDI r18,25 ; R18 → 19 → 0001 1001
m1: ; метка
DEC r18 ; уменьшение содержания R18 на 1: R18 → 18 → 0001 1000
brne m1 ; если бит регистра состояния Z не равен 0, переход по метке m1
m: ; метка
DEC r17 ; уменьшение содержания R17 на 1: R17 → 9 → 0000 1001
brne m ; если бит регистра состояния Z не равен 0, переход по метке m
ret ; возвращает туда, откуда был произведён вызов (rcall)
Посчитаем время задержки к этой части программы:
20МГц – тактовая частота микроконтроллера
10+25=35 – операций производит МК в процедуре wait
LDI – 1 цикл
DEC – 1 цикл
brne – 1 цикл, если бит регистра состояния Z не равен 0
2 цикла, если бит регистра состояния Z равен 1
ret – 4 цикла
За один вызов wait: