Начало работы с AVR Studio 4 (урок 2)

Итак, у нас из первого урока, уже имеется заготовка, которую мы сейчас используем для написания простенькой программы.
Измени программу инициализации и главную программу таким образом:


RESET:
 LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
; инициализировали стек

LDI R16,(1<DDD1)|(1<DDD0)
OUT DDRD,R16
LDI R17,0x01

MAIN:
EOR R17,R16 ; Исключающее ИЛИ между R17 И R16
OUT PORTD,R17 ; выводим в порт D

RJMP MAIN

Теперь все подробно.

У нашего мк есть тридцать два, восьмиразрядных РОН (Регистра Общего Назначения : R0-R31)
к регистрам R0-R15 идет ограниченное количество команд и их мы обычно не будем трогать.
регистры R16-R31 “полноценные”.

Мало того, последние шесть регистров, могут образовывать шестнадцати разрядные регистры
X = R27:R26
Y = R29:R28
Z = R31:R30
получается R27 – Старший байт, а R26 – Младший байт и так по аналогии для остальных четырех.

Еще, в мк Atmega8 есть три порта ввода/вывода:
PORTB = 8 разрядов (8 ног)
PORTC = 7 разрядов (7 ног)
PORTD = 8 разрядов (8 ног)

так же, у каждого порта, есть по три регистра (страница 65 даташита):
DDRx – определяет направление передачи данных (“1″ выход, “0” вход)
PINx – отсюда можно считать состояние ног (используется когда ноги определены как входы)
PORTx – имеет два назначения:
1) регистр порта вывода (если ноги запрограммированны как выходы);
2) регистр подтягивающих резисторов (если ноги используются как входы).
Для универсальности, можно запрограммировать часть ног порта как входы, а часть как выходы.

У каждой из ног, свой бит. для удобства программирования можно записать единицу или ноль непосредственно в ногу. Это делается примерно так: LDI R16,(1 Это значит, мы записали в регистр R16 такое число b00000011(двоичное), или 0x03(шестнадцатиричное)
А уже командой OUT DDD,R16 мы вывели в регистр направления информации значение, хранящиеся в регистре R16.
таким образом, мы имеем такое направление передачи данных в порту D:

PORTD0 = 1
PORTD1 = 1
PORTD2 = 0
PORTD3 = 0
PORTD4 = 0
PORTD5 = 0
PORTD6 = 0
PORTD7 = 0
1 – Выход, 0 – Вход

После этого, мы запишем командой LDI R17,0x01 в регистр R17 значение b00000001 или 0x01.
Все, на этом мы закончили с инициализацией мк и тут начинается код главной программы, который будет иметь бесконечный цикл. т.е. последняя команда, будет переходить на начало программы.

Командой EOR R17,R16 (исключающее или) мы запишем в регистр R17 результат операции (исключающее или) между регистрами R17 и R16
, по скольку у нас были значения такими b00000011 (0х03) и b00000001 (0Х01) то получим b00000010 (0х02)
а командой OUT PORTD,R17 выведем содержимое регистра R17 в порт D
после чего, командой относительного перехода RJMP MAIN перейдем в начало главной программы.
И снова у нас первая команда, это EOR R17,R16
но содержимое R17 у нас изменилось ведь!? теперь оно b00000010 (0х02), а значит и результат ореации будет другой.
после выполнения этой команды, в регитре r17 будет записано b00000001 (0Х01)
и это значение будет выведено в порт D
и так по замкнутому кругу.

Теперь нужно на главном окне AVRStudio4 найти вкладку “Build” и в ней нажать “Build and Run”.
После компиляции, с лева от кода (Processor), у тебя появится состояние процессора нашего МК и его РОН (регистров общео назначения). Тут можно не только просматривать состояние, но и насильно забивать в регистры свои значения с клавиатуры.

Расскажу немного о его содержимом:
Program Counter – Программный счетчик, счетчик адреса команд. Показывает адрес во Flash памяти МК, выполняемой команды.
Stack Pointer – Указатель стека, раскажу для чего он нужен в отдельной теме.
X pointer – Указатель состояния шестнадцатиразрядного регистра (R27:R26), сделан для удбства наблюдения за состояние процессора.
Y pointer – Тоже самое, что и X pointer, только для регистра Y
Z pointer – Тоже самое, что и X pointer, и Y pointer , только для регистра Z
Cycle Counter – Счетчик циклов, указывает сколько циклов прошло (за сколько циклов выполнена команда – код)
Frequency – Частота тактирования
Stop Watch – Секундомер работы программы (команды)
SREG – Регистр СЛОВОСОСТОЯНИЯ (тоже в оотдельной теме)
Registers[+] – РОН (Регистры общего назначения)

Это еще не все. С права от кода есть состояние портов ввода/вывода и периферийных устройств (I/O View).
Которые так же можно не только просматривать, но и редактировать в ходе процесса отладки.

Дальше, в панели с лева (Processor) раскрывай строчку “Registers“, а в панели справа (I/O View) ищи строчку “PORTC” и нажми на неё.
Теперь можно наблюдать за изменениями состояния регистров и портов мк. нажимай клавишу F11 на клавиатуре, или “Step Into” на панели “Debug” вверху и смотри как меняется состояние порта С.

На этом, я считаю, можно закончить второй урок, были рассмотрены основные моменты, изучив которые, можно приступать к самообучению.
Задание на дом: Изучить назначение клавиш в панели “Debug”.

Запись опубликована в рубрике AVR Studio 4 с метками , . Добавьте в закладки постоянную ссылку.

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>