Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Примеры решения лабораторных работ / Программирование 8535 на СИ

.pdf
Скачиваний:
53
Добавлен:
26.01.2023
Размер:
2.19 Mб
Скачать

 

 

Рис. 5. Окно выбора платформы и устройства

 

 

В

пункте

«Debug platform» выбираем «AVR Simulator»,

в пункте «Device» -

тип контроллера,

который используется

в

стенде

(Atmega8535). Нажать

на кнопку

«Finish».

 

 

 

 

 

 

 

После этого появится окно отладки

программы (рис.

6), содержащее три

рабочих области:

 

 

 

 

 

 

-

в левой

части экрана откроется

окно «I/O

View» для

просмотра

регистров

ввода/вывода;

Рис. 6. Окно отладки программы

-в правой части экрана окно «Disassembler», в котором представлена

дизассемблированная программа -

исходная программа, представленная

в виде

команд ассемблера;

 

 

-

в нижней части экрана

будет представлено окно сообщений

«Message»,

комментирующих выполняемые действия.

Рассмотрим более подробно два первых окна. В окне дизассемблера (рис. 7) содержится информация о программе:

Рис. 7. Окно дизассемблера

-в каждой строке содержится одна инструкция, исполняемая контроллером;

- в первой колонке содержится шестнадцатеричное значение счетчика команд, под которым записана команда;

-во второй колонке шестнадцатеричный код команды;

-в третьей и четвертой колонках символическое имя команды и операнды;

-в последней пятой колонке краткий комментарий по выполняемой команде. В тех строчках, в которых записан код команды FFFF, команда отсутствует.

В левом верхнем углу окна размещается желтая стрелка текущей

исполняемой команды.

Окно регистров ввода/вывода

Окно регистров содержит дерево всех устройств. Напротив каждого устройства стоит знак «+». Раскрывая устройство, мы увидим все его регистры: управляющие регистры, регистры данных и т.д. Так, например, регистр ввода/вывода порта А содержит три регистра: регистр данных PORTA, регистр направления DDRA и выводы порта PINA (рис. 8). Справа от обозначения порта выведено его текущее состояние в виде шестнадцатеричного числа и битовое

изображение. Мышкой можно задавать значения битов «0» или

«1». Этим

эмулируется воздействие внешних сигналов.

 

Запуск эмулятора

 

Программа «AVR Studio» позволяет запустить программу

в реальном

времени и в пошаговом режиме. В меню отладки «Debug» находятся все варианты запуска программы, например:

- Run, запуск программы в реальном времени, результат будет виден только после остановки программы;

- Break, останов программы, после просмотра исполнение программы можно продолжить;

Рис. 8. Окно регистров ввода/вывода

- Reset, сброс программы установка счетчика команд на начало программы;

- Step Over, пошаговое исполнение, при этом программа останавливается после каждой команды, стрелка указывает на текущую команду;

 

- AutoStep, запуск программы на непрерывное исполнение с

 

 

возможностью просмотра текущих шагов исполнения.

 

 

 

 

В пошаговом режиме можно наблюдать

за

состоянием

регистров после

исполнения каждой команды, проверяя при этом правильность операций. Запустив

 

программу

кнопкой

AutoStep»,

получим

ее

непрерывное

исполнение

и

индикацию

регистров

во времени.

Желтая

стрелка в окне дизассемблера

показывает текущую исполняемую команду. Приостановив исполнение программы

кнопкой

«Break»,

можно

изменить значения регистров ввода/вывода,

т.е.

задать

разные

значения

входных

сигналов. И далее, снова запустив программу

кнопкой

«AutoStep», просмотреть реакцию микроконтроллера на эти воздействия (рис. 9).

 

 

Рис. 9. Запуск эмулятора на исполнение

Запись программы в микроконтроллер

После проверки программы на симуляторе ее необходимо записать непосредственно в микроконтроллер. Для записи программы в микроконтроллер в лабораторном стенде также используется программное обеспечение AVR Studio. Программа позволяет программировать микроконтроллер, считывать программу из микроконтроллера, записывать и читать внутреннее перепрограммируемое ПЗУ

микроконтроллера,

программировать

биты

защиты,

менять

режимы

работы

генератора тактовых импульсов и режимы

старта

микроконтроллера.

Входным

форматом

данных

для

программатора

является hex-файл

стандарта фирмы Intel

(Intel Standard или Intel Extended).

 

 

 

 

 

 

В

строке меню

программы AVR

Studio

необходимо

выбрать

пункт

«Tools ^

Program AVR ^ Auto Connect». Если модуль «Микроконтроллер» подключен к

персональному

компьютеру

и

установлены

соответствующие

драйверы,

то

происходит вызов окна программатора (рис. 10).

 

 

 

 

 

 

В этом окне необходимо выбрать во

вкладке

Main

программируемое

устройство - Atmega8535, проверить, что оно

соответствует

выбранному

нажатием

кнопки «Read Signature».

 

 

 

 

 

 

 

 

После этого можно переходить на вкладку

«Program» (рис. 11).

В

этой

вкладке можно

стереть

содержимое Flash

микроконтроллера

(кнопка

 

«Erase

Device»), а также запрограммировать Flash и EEPROM память микроконтроллера.

 

 

Рис. 10. Программатор AVR Studio. Вкладка «Main»

Рис. 11. Программатор AVR Studio. Вкладка «Program»

Запись .hex файла, полученного при написании и компиляции программы,

необходимо

осуществлять

во

Flash

память

микроконтроллера.

Для

этого

необходимо

выбрать записываемый

файл

с расширением

*.hex

и

нажать

 

на

кнопку

«Program» в окне по работе с Flash. Информация о ходе

программирования

отображается

в

нижней

части

окна.

При программировании

микроконтроллера

должен

мигать

светодиод

«Прог»,

расположенный

на

лицевой панели

модуля

«Микроконтроллер».

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Запуск и тестирование программы

 

 

 

 

 

После программирования микроконтроллера можно приступить к

отладке

программы непосредственно на микроконтроллере.

 

 

 

 

 

 

 

Вначале необходимо собрать схему: задать внешние воздействия и вывести

результат

на

требуемые

элементы индикации - соединить проводами

клеммы

тумблеров, кнопок, светодиодов и т.д. с необходимыми клеммами контроллера.

 

 

 

Далее

необходимо

проверить работоспособность программы. Для

этого

подаются

 

необходимые

входные

воздействия

(включаются

соответствующие

тумблеры,

нажимаются кнопки и

т.д.)

и

наблюдается реакция

элементов

индикации

и исполнительных устройств. Нажатие кнопки «Сброс» перезапускает программу.

Если в работе обнаружены отклонения от данной последовательности, то необходимо ввести коррективы в свою программу и вновь повторить процедуры

компиляции

и

записи

программы

в

микроконтроллер.

Работа

считается

выполненной, если программа выполняет все заданные функции.

 

 

Примеры

Пример 1. Рассмотрим простейшую программу для микроконтроллера AVR, которая изменяет состояние всех битов порта D при изменении состояния 2 бита

порта A. Введите ее и проверьте работоспособность.

//-------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

#include <iom8 53 5v.h>

//

включение файлов для контроллера ATmega8 53 5

#include <macros.h>

 

 

 

 

 

 

void port_init(void) // определение функции инициализации портов вв/выв

{

 

 

 

 

 

 

 

PORTA =

0xFF;

//

включение подтягивающих резисторов

порта А

DDRA =

0x00;

//

порт А

работает

на вход (DDRA=0000

0000)

PORTD =

0x00;

//

запись

в порт D

нулевого значения

 

DDRD =

0xFF;

//

порт D

работает

на выход (DDRD=1111 1111)

}

 

 

 

 

 

 

 

void init_devices(void)// инициализация всех периферийных устройств

 

{

 

 

 

 

 

 

 

CLI();

 

//

запрет действия прерываний

 

 

port_init();

//

вызов функции инициализации

портов

 

MCUCR =

0x00;

 

 

 

 

 

 

GICR =

0x00;

 

 

 

 

 

 

TIMSK =

0x00;

// нет прерываний от таймера

 

 

SEI();

 

// разрешение действия прерываний

 

 

}

 

 

 

 

 

 

 

void main(void)

// определение главной функции

 

{

 

 

 

init_devices();

//

вызов функции инициализации

периферийных устройств

while (1)

//

создание бесконечного цикла

работы контроллера

{

 

 

 

if ( (PINA&4)!=0)

//

если 2 бит на входе порта A

отличен от нуля,

PORTD=0xF0;

//

то на выходе PORTD=1111 0000

else

 

 

 

PORTD=0x0F;

// иначе PORTD=0000 1111

 

}

 

 

 

}

 

 

 

//-------------------------------------------------------------------------------------------------------------------

 

 

 

Пример 2. Рассмотрим программу «бегущий огонь», в которой простейшими

средствами реализуется

задержка времени (ввод в

программу цикла с пустым

оператором).

 

 

 

//-------------------------------------------------------------------------------------------------------------------

 

 

 

#include <iom8535v.h>

 

 

 

#include <macros.h>

 

 

 

void port_init(void)

 

 

 

{

 

 

 

PORTD = 0x01;

 

// Включить 0 бит порта D: PORTD=0000 0001

DDRD = 0xFF;

 

 

 

}

 

 

 

void init_devices(void)

{

CLI (); port_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x00;

SEI () ;

}

void main(void)

{

unsigned

int

i;

 

//Объявить переменную i.

 

 

 

 

init_devices();

 

 

while(1)

 

 

 

 

{

 

 

 

 

for

(i=1;i;i++)

{;}

//Пустой цикл.

PORTD=PORTD<<1;

 

//Задание нового значения порта D.

 

 

 

 

if (PORTD==0) PORTD=1; //Если значение равно 0, присвоить единичное

 

 

 

 

//значение

}

 

 

 

 

}

 

 

 

 

//

 

 

 

 

 

 

 

 

Задание на выполнение

1.

Наберите программу «Пример 1» и выполните все этапы составления

программы. Проверьте правильность исполнения программы на контроллере.

2.

Измените эту

программу следующим образом: входной сигнал - 0 бит

порта В, выход - порт С. В исходном состоянии при PB0=0 на выходе порта С

включены

два

младших

светодиода, при включении бита PB0=1 включаются два

старших разряда.

 

 

17

3.

Согласно указанному преподавателем варианту напишите

программу,

которая

реализует

следующую зависимость между

входными и

выходными

сигналами:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вариант

 

Выход

 

 

Состояние входов PD2:PD1

 

 

 

00

01

 

10

 

11

 

 

 

 

 

 

1

 

порт А

 

00000011

00001100

 

00110000

 

11000000

2

 

порт В

 

11111111

11110000

 

00001111

 

00000000

3

 

порт С

 

0х05

0x0A

 

0x50

 

0xA0

4

 

порт D

 

00010000

00100000

 

01000000

 

10000000

5

 

порт А

 

11000011

00111100

 

11000011

 

00111100

6

 

порт В

 

0х55

0x55

 

0xAA

 

0xAA

7

 

порт С

 

10000001

01000010

 

00100100

 

00011000

8

 

порт D

 

00011000

00110000

 

01100000

 

11000000

9

 

порт А

 

10

20

 

30

 

40

10

 

порт D

 

10000000

11000000

 

11100000

 

11110000

Примечание: обратите внимание - в вариантах 4, 8 и 10 порт D используется

ина вход, и на выход.

4.Реализуйте следующие простейшие логические элементы (входы/выходы выберите самостоятельно):

а) 3И-НЕ (трехвходовый элемент И-НЕ); б) 4ИЛИ-НЕ;

в) 3И;

г) 4ИЛИ; д) «Исключающее ИЛИ»;

е) «Эквивалентность» (равнозначность); ж) четыре отдельных независимых элемента НЕ; з) два независимых элемента 2И-НЕ; и) три независимых элемента 2ИЛИ-НЕ;

к) четыре независимых элемента «Исключающее ИЛИ».

5.Реализуйте следующие последовательностные элементы (входы/выходы выберите самостоятельно):

а) RS-триггер;

б) RS-триггер с инверсными входами; в) D-триггер;

г) JK-триггер;

д) два независимых RS-триггера;

е) два независимых D-триггера с общим тактируемым входом; ж) два независимых JK-триггера.

6.Составьте программу, которая выводит двоичное число, набранное на порту A (кнопками и тумблерами S1-S8), в порт D.

7.Составьте программу, которая преобразует число, набранное в порту А, и выводит его в порт С:

а) увеличивает число в два раза; б) уменьшает его в четыре раза; в) выводит инверсное число;

г) выводит число в дополнительном коде (старший разряд вводимого числа знаковый).

8. Составьте программу, которая вводит два двоичных четырехразрядных числа, задаваемых битами PA0-PA3 и PB0-PB3, и выводит результат в порт D:

а) арифметическую сумму чисел; б) произведение чисел;

в) поразрядное логическое сложение; г) поразрядное логическое умножение;

9.Наберите программу «Пример 2» и выполните все этапы составления программы. Используя программу “AVR-studio” рассчитайте время между переключениями разрядов.

10.Используя программу «Пример 2», напишите программу:

а) с уменьшенным в 2 раза временем задержки;

 

б) с увеличенным в 4 раза временем задержки;

 

 

11.

Используя

программу «Пример 2»

и

«AVR-studio», напишите программу,

в которой время переключения между разрядами равно:

 

а) 0,1с

б) 0,2с

в) 0,4с

г) 0,5с

д) 0,8с

е) 1 с

 

ж) 2с

з) 4с

и) 5с

 

к) 10с

12.

Реализуйте

программу

«Светофор»:

выход PD1 (красный свет) включен

3с, выход PD2 (желтый свет) включен 1 с, выход PD3 (зеленый свет) горит 3 с.

13.Реализуйте «бегущий огонь с накоплением», а именно: вначале загорается бит PD0, затем к нему добавляется PD1 и т.д. до тех пор, пока не загорятся все светодиоды порта D, далее цикл повторяется.

14.Составьте и введите программу «Инверсный бегущий огонь», которая включает светодиоды в обратном порядке - от старшего разряда к младшему.

Работа №2. Изучение восьмиразрядных таймеров ТО и Т2 микроконтроллера Atmega 8535

Цель работы

Познакомиться

с

таймерами

микроконтроллера

ATmega8535.

Работа

с

таймером Т0. Составить программы с использованием 8-ми разрядного

таймера

в

счетном режиме и режиме широтно-импульсной модуляции сигнала.

 

 

 

 

Пояснения к работе

 

 

 

Микроконтроллер

 

ATmega8535 содержит три таймера общего

назначения:

два восьмиразрядных

таймера Т0 и

Т2, один шестнадцатиразрядный

таймер

Т1.

Все таймеры имеют возможность работы в разных режимах:

 

 

 

-измерение промежутков времени;

-счет внешних событий (кроме Т2);

-преобразование выходного сигнала контроллера в сигнал с широтноимпульсной модуляцией (ТТТИМ);

-

возможность работы в качестве часов реального времени

(асинхронный

режим работы таймера Т2).

 

 

 

 

 

 

 

 

 

Альтернативные функции портов

 

 

Для

подключения

входов/выходов

таймеров

к

выводам

микросхемы

контроллера

(т.е.

соединения

таймеров

с

внешним

миром)

используются

альтернативные функции портов ввода/вывода. После включения

альтернативной

функции данный бит

порта

используется только

для

ввода

или вывода информации

втаймер, использовать этот бит для цифрового ввода/вывода невозможно.

Альтернативные функции

портов для

работы с

таймерами приведены в табл. 1.

При этом для реализации режима

счета внешних событий вход таймеров

необходимо подключить

к

выводам

микросхемы

- к

конкретному биту

порта

ввода/вывода. При работе

таймера

в режиме

ШИМ

выход таймеров

также

подключается к конкретному биту порта.

 

 

 

 

Табл 1. Альтернативные функции портов, используемые таймерами

Таймер

Обозначение

 

 

Описание

Вывод порта

Т0

Т0

Внешний вход таймера Т0

 

PB0

0C0

Внешний выход таймера Т0

PB3

 

 

Т1

Внешний вход таймера Т1

 

PB1

Т1

0C1A

Внешний выход A таймера Т1

PD5

 

0C1B

Внешний выход B таймера Т1

PD4

 

T0SC1

Внешний

вывод

1

для подключения резонатора

PC6

 

 

 

таймера Т2

 

 

 

 

 

 

 

 

 

 

Т2

T0SC2

Внешний

вывод

2 для

подключения резонатора для

PC7

 

таймера Т2

 

 

 

 

 

 

 

 

 

 

 

0C2

Внешний выход таймера Т2

PD7

 

 

 

 

 

 

 

Соседние файлы в папке Примеры решения лабораторных работ