Методические указания

Варианты задания

Порядок выполнения работы

 

5.3.1 Выполняется при подготовке к работе.

а) Изучить теоретические сведения;

б) Подготовить алгоритм программы в виде блок-схемы;

в) Подготовить исходный текст программы;

г) Отладить программу в среде AvrStudio;

д) подготовить текстовый файл программы на электронном носителе.

5.3.2 Выполняется на лабораторном занятии.

а) Отладить программу в среде AvrStudio (если это не удалось при подготовке к работе)

б) Продемонстрировать работу программу в среде AvrStudio

в) Со своего рабочего места ввести программу в компьютер, скомпилировать и записать в микроконтроллер

г) Продемонстрировать работу программы на лабораторном стенде;

д) Подготовить распечатку программы с комментариями.

 

 

Настроить на вход линии:

1) A0, A1 2) B1, B7 3) C2, D5 4) C2, C4, С6 5) A3, B1, D7 6) D2

7) B0, B7, C3 8) C3, D1, D2 9) B0, B1, B2, B7 10) A4, B2,C2, D7

Настроить на выход линии:

1) A2, A5 2) B3, B5 3) C0, D3 4) C0, C5, С7 5) A7, B3, D0 6) D3

7) B5, B6, C1 8) C5, D0, D6 9) B3, B4, B5, B6 10) A7, B5,C5, D6

 

 

 

Для выполнения работы необходимо знать структуру и функционирование микроконтроллера AT90S8535 (ATmega8535), методы адресации и систему команд.

Программирование порта ввода/вывода заключается в записи определенного числа в соответствующий этому порту регистр DDR. Для записи данных, которые в микроконтроллере представляют целые числа, в область регистров I/O (а именно там находятся регистры DDR) используются два варианта.

Первый вариант: воздействовать на каждый бит регистра DDR по отдельности, используя команды «установить бит в регистре I/O» (SBI) и «очистить бит в регистре I/O» (CBI).

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

На практике в основном используется второй вариант, т.к. он более универсален, а в случае программирования более двух линий используется меньше команд.

Например, необходимо настроить на вход линии С0, С1, а на выход линию С6.

Последовательность команд при первом варианте:

 

CBI DDRС,0 ;Запись 0 в бит 0 регистра DDRC

CBI DDRС,1 ;Запись 0 в бит 1 регистра DDRC

SBI DDRС,6 ;Запись 1 в бит 6 регистра DDRC

 

При втором варианте необходимо вначале определить, какое число будет записано в регистр DDR. Для этого рекомендуется изобразить регистр DDR в виде таблицы с восемью ячейками (каждая ячейка представляет отдельный бит), и проставить в каждой ячейке необходимые значения битов, как это показано ниже

С7 С0

         

 

Остальные линии порта, кроме С0, С1, С6 не задействованы. Если к ним ничего не подключено, то их состояние безразлично. Но т.к. в лабораторном стенде ко всем выводам что-то подключено, то не используемые линии необходимо запрограммировать на вход. Таким образом, состояние регистра DDRC должно быть следующим:

С7 С0

 

Двоичное число, которое должно быть записано в регистр 0100000. Для более рационального способа записи обычно двоичные числа переводятся в шестнадцатеричную форму т. к. перевод двоичного числа в шестнадцатеричное занимает меньше времени, чем перевод из двоичного в десятичное.

01000000 2 = 40 16. Напрямую данные в регистры I/O записать нельзя, поэтому данные сначала помещают в один из регистров общего назначения R16...R31, а потом перемещают в регистр DDRC.

Последовательность команд при втором варианте:

 

LDI R16,$40 ;Записать число 40 16 в регистр R16

OUT DDRC,R16 ;Переместить число 40 16 из регистра R16 в DDRC.

 

Как видно, при втором варианте программирования используется меньше команд. Следует отметить, что команды SBI и CBI доступны только для 32 регистров I/O с младшими адресами. Для программирования 32 регистров I/O со старшими адресами используется второй способ, а для работы с отдельными битами можно использовать, как промежуточный, бит Т регистра STATUS.

Для тренировки в программировании портов предлагается следующий шаблон текста программы. Вместо многоточия необходимо вставить команды для программирования портов в соответствии со своим вариантом.

 

.include "8535def.inc" ; подключить файл описания AT90S8535

.cseg ; определение начала сегмента программы (кода)

.org 0 ; определение вектора прерывания по сбросу и подаче питания

 

rjmp programma ; переход на метку programma

.org $30 ; определение начального адреса программы

 

programma:

rjmp programma ; перейти на метку programma