Урок
2 - Формирование статических
логических сигналов на выводах
микроконтроллера
Итак,
напишем первую программу на
ассемблере. Ниже изображена схема с
использованием микроконтроллера
AT90S8515. Целью первой программы будет
– включать и выключать светодиоды.
В
качестве DD1 используйте панельку
типа DIP40, ZQ1 – 4 МГц; C1, C2 – 30 пФ; VD1,2
– АЛ307 или аналогичные; R1,2 – 270 Ом; SA1
– любая кнопка.
Сейчас
последовательно рассмотрим, как
пишется программа на ассемблере.
Создайте новый проект с помощью AVR
Studio. В качестве Debug Platform выберите AVR
Simulator, а в качестве Device – AT90S8515.
Начнем
создавать текст программы. Запишем
следующие строки:
.include
"8515def.inc" ; подключим файл с описаниями
регистров
rjmp
RESET
; вектор перехода при сбросе
Первоначально
мы подключили файл с символьными
именами регистров для
используемого микроконтроллера, а
потом сформировали переход при
сбросе.
Теперь
необходимо выбрать некоторый
регистр из регистрового файла. Сним
мы будем производить операции, а
затем выдавать результаты в порт PC
для управления светодиодами. Пусть
это будет r16 и присвоим ему
символьное имя «temp»:
.include
"8515def.inc" ; подключим файл с описаниями
регистров
rjmp
RESET
; вектор перехода при сбросе
.def
temp =r16
Теперь
необходимо определить выводы порта
PC как вход или выход. Поскольку
требуется управление светодиодами
по битам 0 и 1, то их необходимо
запрограммировать на выход.
Состояние остальных бит значения не
имеет.
.include
"8515def.inc" ; подключим файл с описаниями
регистров
rjmp
RESET
; вектор перехода при сбросе
.def temp =r16
RESET:
ldi temp,0b00000011 ; определим PC<0> и PC<1> как
выходы
out
DDRC,temp
Для
управления исполнительным
устройством, работающим по принципу
включено/выключено, на
соответствующей выходной линии
порта микроконтроллера (МК)
необходимо сформировать
статический сигнал 0 или 1.
Например,
если необходимо установить в
состояние логической «1» нулевой
бит порта PC (нулевой бит порта PC
условно записывается как PC<0>), то
можно записать требуемое значение в
переменную temp, а затем вывести ее в
порт.
.include
"8515def.inc" ; подключим файл с описаниями
регистров
rjmp
RESET
; вектор перехода при сбросе
.def temp =r16
RESET:
ldi temp,0b00000011 ;
определим PC<0> и PC<1> как выходы
Out DDRC,temp
ldi temp,0b00000001 ;
зажигаем светодиод VD1
out PORTC,temp
И,
наконец, необходимо создать цикл
основной программы. В настоящем
примере в нем ничего делаться не
будет. Однако в дальнейших примерах
там будет выполняться некоторая
программа.
.include
"8515def.inc" ; подключим файл с описаниями
регистров
rjmp RESET
; вектор перехода при сбросе
.def temp =r16
RESET:
ldi temp,0b00000011 ;
определим PC<0> и PC<1> как выходы
out DDRC,temp
ldi temp,0b00000001 ;
зажигаем светодиод VD1
out PORTC,temp
loop:
; основной цикл программы
rjmp loop
Откомпилируйте
программу с помощью команды Project ->
Build (F7). Запрограммируйте
микроконтроллер и убедитесь, что
программа работает правильно (должен
загореться светодиод VD1 после
сброса микроконтроллера при
нажатии на кнопку SA1).
Вопросы
и задачи.
-
Напишите
команды для установки в «1» бита 2
порта PORTA.
-
Напишите
команды для установки битов порта
PORTB в следующие состояния: бит 0 –
1; бит 1 – 1; бит 2 – 0; бит 3 – 1.
-
Напишите
и испытайте на макете
работоспособность программы,
которая зажигает светодиод VD2, а VD1
- нет.
-
Напишите
и испытайте на макете
работоспособность программы,
которая зажигает оба светодиода
(VD1 и VD2)
Скачать
урок в WORD .