Лабораторная работа №1 Знакомство с программным обеспечением для разработки устройств на микроконтроллерах фирмы Atmel




Дата канвертавання25.04.2016
Памер220.63 Kb.
Лабораторная работа №1

Знакомство с программным обеспечением для разработки устройств на микроконтроллерах фирмы Atmel

Цель работы: усвоение основных принципов работы с программами эмуляции и отладки

устройств на микроконтроллерах AVR.
1 Знакомство с Proteus:

Proteus - это пакет программ класса САПР, объединяющий в себе две основных программы: ISIS - средство разработки и отладки в режиме реального времени электронных схем и ARES - средство разработки печатных плат.

Мы будем использовать только ISIS



Для первого знакомства с proteus, попробуем собрать простую схему.

Этот проект находится в папке с лабораторной работой\001lab\001.dsn

Для этого:

Запустим ISIS.exe

1)Создаём новый документ (при запуске он создаётся по умолчанию, как и в любой другой программе)

2)Заходим в библиотеку, для этого нажмём на кнопку «P»

В строку keywords вводим название нужного элемента, сначала Lamp (лампа) и нажимаем «ОК», затем снова заходим в библиотеку (кнопка «P») и в keywords вводим Sw-spdt-mom (переключатель) и нажимаем «ОК».


*При выборе элементов можно воспользоваться группами элементов (в библиотеке элементы сгруппированы по классам), а можно поиском для этого в строку keywords

необходимо ввести имя требуемого элемента, после выбора каждого элемента нажимаем OK, после чего снова заходим в библиотеку.



Два необходимых нам элемента появились в окне селектора элементов (библиотека проекта) и добавились к проекту.


3)Выделим в окне селектора нужный нам элемент и кликнем левой кнопкой мыши по пустому месту в рабочем окне, после чего кликнем второй раз по месту, в котором нужно расположить объект.





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

4)В окне выбора режима селектора нажмём на кнопку «Терминалы»(terminals) и выделим

Ground (земля), поместим её на рабочее поле так же как и элементы, затем выделим Power

(источник) и тоже поместим на рабочую зону.




5)Теперь двойным щелчком левой кнопки мыши по элементу Power (источник) откроем окно его свойств, в появившемся окне во вкладке Label в графе string пропишем «+5V»

, нажимаем «ОК»;

Когда всё это проделано нужно соединить элементы так, как показано на схеме,

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

Таким образом соединяем все элементы в схеме.



Теперь можно запустить симуляцию, нажав на кнопку «play» в окне управления симуляцией.

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



2 Знакомство с AVRstudio4

2.1 Первый взгляд

AVR Studio 4 - профессиональная интегрированная среда разработки (Integrated Development Environment - IDE), предназначенная для написания и отладки прикладных программ для AVR микропроцессоров в среде Windows. AVR Studio 4 содержит ассемблер и симулятор.

В режиме симулятора AvrStudio позволяет программисту наблюдать за логикой выполнения программы, т.е. видеть содержимое регистров, памяти, портов, наблюдать за выполнением команд и т.д.
Запустим AVRstudio, если у вас открылось такое окно, жмём на Cancel, это окно

прошлых проектов из которого их можно открыть, также из этого окна можно создать новый проект, процесс создания ничем не отличается от описанного ниже, для создания нового проекта из этого окна жмём на New Project.




Окно AVRstudio ничем не отличается от стандартных окон, например Delphi или CodeGear.Сверху служебные окна команд. Слева: направо

1)Окно проекта

2)Окно с кодом Ассемблера

3)Окно составляющих микроконтроллера.

Внизу лог событий.


*Язык ассемблера (автокод) — язык программирования низкого уровня. Команды языка ассемблера один к одному соответствуют командам процессора, но в отличие от языка машинных кодов, позволяют использовать более удобную для человека мнемоническую (символьную) запись.
2.2 Создание первого проекта

Для более полного знакомства напишем простую программу.

Для этого:

Создаём новый проект (в верхнем меню Project\new project или в стартовом окне



New Project)

В открывшемся окне в графе Project type выберем тип проекта Atmel AVR Assembler, в графе Project name указываем имя нового проекта, в строке Location необходимо указать путь к будущему проекту (путь не должен быть слишком длинным, содержать пробелов и иметь русских символов) также необходимо отметить галочкой Create folder (тогда проект будет создан в отдельной папке). Нажимаем «Finish».Если нажать «Next», то перед нами откроется окно выбора устройства, под которое мы будем писать программу, но пока что нам это не нужно.

Первую программу напишем для микроконтроллера Atmega16. Для начала его хватит на все эксперименты.



Постановка задачи:

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

С практической точки зрения это совершенно бессмысленная задача, т.к. можно обойтись без микропроцессора. Но в качестве примера подходит прекрасно.

Алгоритм:

1)настроить порты

2)прочитать состояние кнопки, если значение на кнопке «логический 0», то зажечь светодиод, а если значение на кнопке «логическая 1», то погасить светодиод

3)вернуться в начало цикла


Используемые команды:

ldi Rd,K Загрузка константы в регистр общего назначения

in Rd,P Пересылка из регистра ввода-вывода в регистр общего назначения

out P,Rd Пересылка из регистра общего назначения в регистр ввода-вывода

rjmp Относительный безусловный переход

Обозначения:

Регистр общего назначения(РОН), обозначается Rd (приёмник) или Rr (источник) где d и r номер регистра.

Регистр ввода-вывода(РВВ), обозначается P.

Константа обозначается K.


Текст возможного варианта программы реализующей поставленную выше задачу.



Данный проект находится в папке с лабораторной\001lab\001.aps
;***управление светодиодом***

.include "m16def.inc" ;подключение библиотеки для работы с ATmega16

.list ;включение листинга

.def temp=r16 ;определение главного рабочего регистра

;--------------------------------------------

.cseg ;выбор сегмента программного кода

.org 0 ;установка текущего адреса на ноль

;--------------------------------------------

ldi temp,0x80 ;выключение компаратора

out acsr,temp

;--------------------------------------------

ldi temp,0x00 ;записываем ноль в регистр temp

out ddrd,temp ;записываем этот ноль в ddrd(порт rd на ввод)

ldi temp,0xFF ;записываем 0xff в регистр temp

out ddrb,temp ;записываем temp в ddrb(порт rb на вывод)

out portb,temp ;записываем temp в portb(погасить светодиод)

out portd,temp ;записываем temp в portd(включаем внутренний резистор)

;---------------------------------------------

metka:

in temp,pind ;читаем содержимое порта pd



out portb,temp ;пересылаем в порт pb

rjmp metka ;переходим по метке к началу цикла


После написания программы необходимо её откомпилировать, для этого в AvrStudio в верхнем меню необходимо открыть вкладку Build и нажать опять же на build или можно воспользоваться горячей клавишей F7.

После компиляции если программа написана верно в логе событий мы увидим сообщение:

Assembly complete, 0 errors. 0 warnings”.

Теперь заходим в папку с нашим проектом и видим там некоторое количество файлов, пока что нам нужны только два:1)файл с расширением .asm, в нём собственно и находится исходный код программы.2)файл с расширением .hex – откомпилированный машинный код (именно его и прошивают в микропроцессор).


Теперь проверим нашу программу в действии, для этого в Proteus соберём простую схему.

Необходимые компоненты: ATmega16, Button, Led-green, земля (ground) и источник напряжения (power +5v).



Этот проект находится в папке с лабораторной работой\001lab\002.dsn


Питание микроконтроллера в Proteus подключать не надо, оно подключено по умолчанию.

После того как мы собрали схему, необходимо загрузить HEX-файл в микроконтроллер, для этого кликаем правой кнопкой мыши по микроконтроллеру и выбираем Edit properties(правка свойств), находим строку Program file и указываем в ней путь к нашему .hex, пока больше менять ничего не нужно.

После этого запускаем симуляцию и нажимаем кнопку(button), светодиод должен менять своё состояние.

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



Этот проект находится в папке с лабораторной работой\001lab\003.dsn


2.3 AvrStudio в режиме отладки программы

Основными функциями AvrStudio являются функция разработки и функция отладки программ для микроконтроллеров фирмы Atmel. С функцией разработки мы уже познакомились, теперь запустим режим отладки.

Для этого:

1)Запускаем AvrStudio(если ещё не запустили)

2)Создаём новый проект

3)Напишем простейшую программу для ATmega16 и откомпилируем её


;пример для эмуляции программы в AvrStudio

.include "m16def.inc";подключение библиотеки

.list;включение листинга

.def temp0=r16;определение рабочих регистров

.def temp1=r17

.def temp2=r18

.def temp3=r19

;--------------------------------------------

metka:

ldi temp0,0x00;записываем ноль в регистр temp0



ldi temp0,0xFF;записываем 0xff в регистр temp0

ldi temp1,0x00;записываем ноль в регистр temp1

ldi temp1,0xAA;записываем 0xAA в регистр temp1

ldi temp2,0x00;записываем ноль в регистр temp2

ldi temp2,0xCC;записываем 0xCC в регистр temp2

ldi temp3,0x00;записываем ноль в регистр temp3

mov temp3,temp2;пересылка данных из temp2 d temp3

rjmp metka;переход к метке


Данный проект находится в папке с лабораторной\002lab\002.aps
4)Настроим эмулятор

Для этого в верхнем меню откроем вкладку Debug и выберем select platform and device, в появившемся окне выберем платформу AVR simulator и устройство ATmega16 после чего нажмём Finish.




5)Запустим эмуляцию нажав Start debugging в той же вкладке Debug.

*Эмуляция в AvrStudio- пошаговое выполнение команд с возможностью контроля их выполнения непосредственно в структуре процессора.

В окне I/O view вы можете контролировать состояние портов, памяти и т.д., а в окне Processors видеть как изменяются значения регистров и следить за процессом эмуляции…

Жёлтая стрелка находящаяся слева от команды показывает что именно эта команда будет выполнена при следующем шаге эмуляции.

6)Начнём выполнение программы, для этого нажимаем на step Into(F11) во вкладке Debug

Так как в нашей программе мы изменяем только состояние регистров, то за ними мы и наблюдаем, таким образом мы можем контролировать выполнение программы, и если что-то пойдёт не так, сможем быстро устранить ошибку.



3 Лабораторное задание

1)Используя пример программы «управление светодиодом», задействуйте в микроконтроллере порты PA и PC, причём на PC подключите светодиод, а на PA кнопку,

Таким образом у вас должно получиться два светодиода и две кнопки.

2)Не изменяя полученную в результате выполнения пункта 1 схему, изменить программу так, чтобы кнопка находящаяся слева от микроконтроллера, управляла светодиодом находящимся слева, а кнопка справа соответственно диодом справа.

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

Лабораторная работа №2

Изучение команд работы с регистрами и памятью микроконтроллеров AVR

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


1.Используемые команды:

mov Rd,Rr перенос данных между РОН

ldi Rd,K загрузка константы в РОН

ld Rd,A чтение значения в РОН из памяти данных(SRAM) по адресу, содержащемуся в A

ld Rd,A+ чтение значения в РОН из памяти данных(SRAM) по адресу, содержащемуся в A, с постинкрементом адреса

ld Rd,-A чтение значения в РОН из памяти данных(SRAM) по адресу, содержащемуся в A, с преддекрементом адреса

st A,Rr запись значения в память данных(SRAM) из РОН по адресу , содержащемуся в А

st A+,Rr запись значения в память данных(SRAM) из РОН по адресу , содержащемуся в А, с постинкрементом адреса

st –A,Rr запись значения в память данных(SRAM) из РОН по адресу , содержащемуся в А, с преддекрементом адреса

lrm – загрузка данных из памяти программ в регистр R0 по байтовому адресу, находящемуся в двухбайтовом регистре Z(R30:R31)

in Rr,P загрузка значения РВВ в РОН

out P,Rr вывод значения РОН в РВВ

pop Rd извлечение значения верхушки стека в РОН

2.Лабораторное задание

На основе пункта 2.3 в лабораторной работе №1, в соответствии с вариантом произвести последовательность действий с помощью AVRstudio:

1)Записать константу K в регистр Rd1

2)Переслать константу K из регистра Rd1 в регистр Rd2

3)Вывести константу K на порт pt1

4)Записать константу K в ячейку памяти данных R с использованием адресации через X,Y или Z

5)Считать из памяти и вывести на порт pt2.



Вариант

Адресация

Rd1

Rd2

R

K

Pt1

Pt2

1

X

R16

R24

0060

0xFF

A

C

2

Y

R17

R23

0061

0xEE

B

C

3

Z

R18

R22

0062

0xDD

C

B

4

X

R19

R21

0063

0xCC

D

A

5

Y

R20

R20

0064

0xBB

A

B

6

Z

R21

R19

0065

0xAA

B

C

7

X

R22

R18

0066

0x99

C

D

8

Y

R23

R17

0067

0x88

D

C

9

Z

R24

R16

0068

0x77

A

D

10

X

R16

R19

0069

0x66

B

A

11

Y

R17

R20

006A

0x55

C

B

12

Z

R18

R21

006B

0x44

D

C

13

X

R19

R22

006C

0x33

A

B

14

Y

R16

R19

006D

0x22

D

A

15

X

R17

R22

006E

0x11

A

C


Обозначения:

Регистр общего назначения(РОН), обозначается Rd (приёмник) или Rr (источник) где d и r номер регистра.

Регистр ввода-вывода(РВВ), обозначается P.

Константа обозначается K.

A – имеется в виду то, что можно использовать любой из двухбайтовых регистров X,Y или Z
X,Y,Z Парные(2-байтовые) регистры используемые для адресации в адресном пространстве микроконтроллера, причём старшим байтом допустим X-регистра, является регистр R31,т.е. если в регистре R31 находится число 0xFF, а в регистре R30 число 0x00, то адрес будет выглядеть как 0xFF00

X-пара регистров R27:R26.

Y-пара регистров R29:R28.

Z-пара регистров R31:R30.




Для того чтобы посмотреть содержимое памяти микроконтроллера, необходимо в верхнем меню нажать на вкладку View и выбрать Memory, после чего в появившемся окне выбрать тип необходимой нам памяти(Program, Eeprom, I/O, Data, или Register)

Где Data и есть память SRAM, и находиться она по адресам от 0x0060 до 0x045F




Лабораторная работа №3

Изучение Арифметических и логических команд микроконтроллеров AVR

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



1.Краткий обзор

Используемые команды:

add Rd,Rr сложение двух РОН без учёта переноса

adc Rd,Rr сложение двух РОН с учётом переноса

adiw Rd,k сложение регистровой пары с константой

sub Rd,Rr вычитание двух РОН без учёта переноса

sbc Rd,Rr вычитание двух РОН с учётом переноса

sbiw Rd,k вычитание константы из регистровой пары

subi Rd,k вычитание константы из регистра

sbci Rd,k вычитание константы из регистра с учётом переноса

inc Rd увеличение содержимого регистра на единицу

dec Rd уменьшение содержимого регистра на единицу

clr Rd очистка регистра (операция «исключающее или» регистра с самим собой)

ser Rd установка регистра

and Rd,Rr логическое «и»

andi Rd,k логическое «и» с константой

or Rd,Rr логическое «или»

ori Rd,k логическое «или» с константой

eor Rd,Rr логическое исключающее «или»

com Rd побитная инверсия

neg Rd дополнительный код(инверсия знака)


Запустим AVRstudio в режиме эмуляции и попробуем использовать несколько команд из списка, при этом наблюдая за состоянием регистров
Программа:

.include "m16def.inc";подключение библиотеки

.list;включение листинга

.def temp0=r16;определение рабочих регистров

.def temp1=r17

.def temp2=r18

.def temp3=r19

.def temp4=r20

.def temp5=r21

.def temp6=r22

;--------------------------------------------

metka:


ldi temp0,0x00;записываем ноль в регистр temp0

ldi temp0,0xFF;записываем 0xff в регистр temp0

ldi temp1,0x00;записываем ноль в регистр temp1

ldi temp1,0xAA;записываем 0xAA в регистр temp1

ldi temp2,0x00;записываем ноль в регистр temp2

ldi temp2,0xCC;записываем 0xCC в регистр temp2

ldi temp3,0x00;записываем ноль в регистр temp3

mov temp3,temp2;пересылка данных из temp2 d temp3

add temp1,temp2;складываем temp1 и temp2 без учёта переноса

sbc temp0,temp1; вычитаем temp1 из temp0 с учётом переноса

subi temp4,0x11 ;вычитание константы из регистра temp4

inc temp5; увеличение содержимого регистра на единицу

inc temp5; увеличение содержимого регистра на единицу

inc temp5; увеличение содержимого регистра на единицу

dec temp5; уменьшение содержимого регистра на единицу

dec temp5; уменьшение содержимого регистра на единицу

dec temp5; уменьшение содержимого регистра на единицу

clr temp5 ;очистка регистра (операция "исключающее или" регистра с самим собой)

or temp0,temp1; логическое "или"

com temp6; побитная инверсия

neg temp6; дополнительный код(инверсия знака)

rjmp metka;переход к метке


Данный проект находится в папке с лабораторной\003lab\003.aps
2.Лабораторное задание

1)Напишите программы сложения и вычитания двух 8-ми разрядных чисел с записью результата в ячейку памяти

2) Напишите программы сложения двух 16-ти разрядных чисел

3)В соответствии с вариантом сложить содержимое Rd1 и Rd2, вычесть из результата константу K и проверить состояние бита отрицательности, после чего записать результат в ячейку памяти R.




Вариант

R

K

Rd1

Rd2

1

0060

0xFF

0x01

0x10

2

0061

0xEE

0x02

0x20

3

0062

0xDD

0x03

0x30

4

0063

0xCC

0x04

0x40

5

0064

0xBB

0x05

0x50

6

0065

0xAA

0x06

0x60

7

0066

0x99

0x07

0x70

8

0067

0x88

0x08

0x80

9

0068

0x77

0x09

0x90

10

0069

0x66

0x0A

0xA0

11

006A

0x55

0x0B

0xB0

12

006B

0x44

0x0C

0xC0

13

006C

0x33

0x0D

0xD0

14

006D

0x22

0x0E

0xE0

15

006E

0x11

0x0F

0xF0


Лабораторная работа №4

Вывод информации на 16-ти сегментные индикаторы

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



1.Краткий обзор

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



Нажата клавиша «+»


Данный проект находится в папке с лабораторной\004lab\0041.dsn
Программа:

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

.include "m16def.inc" ;подключение библиотеки для работы с ATmega16

;-------------------------------------------

.list ;включение листинга

;-------------------------------------------

.def temp=r16 ;определение рабочих регистров

.def tempv=r17

.def tempv0=r22

.def temp1=r18

.def temp2=r19

.def temp3=r20

.def temp4=r21
;Определение портов

ldi temp,0x00 ;записываем ноль в регистр temp

out ddrd,temp ;записываем этот ноль в ddrd (порт rd на ввод)

ldi temp,0xFF ;записываем 0xff в регистр temp

out portd,temp ;записываем temp в portd(включаем внутренний резистор)

out ddra,temp ;записываем temp в ddrb (порт rb на вывод)

out ddrb,temp ;записываем temp в ddrb (порт rb на вывод)

out ddrc,temp ;записываем temp в ddrb (порт rb на вывод)


;Задаём состояние рабочих регистров

ldi temp1,0b11111110

ldi temp2,0b11111101

ldi temp3,0b11111011

ldi temp4,0b11110111

;Программа проверки состояния порта для нулевой строки s0:

out portc,temp1;посылаем на портС содержимое temp1,0b11111110
sbis pind,0;проверяем состояние 0 бита(если установлен то пропускаем след строчку)

rjmp m00;если сброшен переходим к метке "вывода"


sbis pind,1;проверяем состояние 1 бита

rjmp m01
sbis pind,2;проверяем состояние 2 бита

rjmp m02
sbis pind,3;проверяем состояние 3 бита

rjmp m03


rjmp s1;если в нулевой строке ничего не нажато,то переходим к первой

;Программа вывода на индикатор

m00:

ldi tempv,0b00001111



ldi tempv0,0b0

out porta,tempv

out portb,tempv0

rjmp s0


m01:

ldi tempv,0b11111111

ldi tempv0,0b10001000

out porta,tempv

out portb,tempv0

rjmp s0


m02:

ldi tempv,0b10111111

ldi tempv0,0b10001000

out porta,tempv

out portb,tempv0

rjmp s0


m03:

ldi tempv,0b0

ldi tempv0,0b01000100

out porta,tempv

out portb,tempv0

rjmp s0


;Программа проверки состояния порта для первой строки

s1:


out portc,temp2

sbis pind,0

rjmp m10
sbis pind,1

rjmp m11
sbis pind,2

rjmp m12
sbis pind,3

rjmp m13


rjmp s2

m10:


ldi tempv,0b10001100

ldi tempv0,0b10001000

out porta,tempv

out portb,tempv0

rjmp s0

m11:


ldi tempv,0b10111011

ldi tempv0,0b10001000

out porta,tempv

out portb,tempv0

rjmp s0

m12:


ldi tempv,0b11111011

ldi tempv0,0b10001000

out porta,tempv

out portb,tempv0

rjmp s0

m13:


ldi tempv,0b0

ldi tempv0,0b11111111

out porta,tempv

out portb,tempv0

rjmp s0

;Программа проверки состояния порта для второй строки



s2:

out portc,temp3

sbis pind,0

rjmp m20
sbis pind,1

rjmp m21
sbis pind,2

rjmp m22
sbis pind,3

rjmp m23

rjmp s3


m20:

ldi tempv,0b1100

ldi tempv0,0b0

out porta,tempv

out portb,tempv0

rjmp s0


m21:

ldi tempv,0b01110111

ldi tempv0,0b10001000

out porta,tempv

out portb,tempv0

rjmp s0


m22:

ldi tempv,0b00111111

ldi tempv0,0b10001000

out porta,tempv

out portb,tempv0

rjmp s0


m23:

ldi tempv,0b0

ldi tempv0,0b10001000

out porta,tempv

out portb,tempv0

rjmp s0


;Программа проверки состояния порта для третьей строки s3:

out portc,temp4

sbis pind,0

rjmp m30
sbis pind,1

rjmp m31
sbis pind,2

rjmp m32
sbis pind,3

rjmp m33

rjmp s0


m30:

ldi tempv,0b11110011

ldi tempv0,0b0

out porta,tempv

out portb,tempv0

rjmp s0


m31:

ldi tempv,0b11111111

ldi tempv0,0b0

out porta,tempv

out portb,tempv0

rjmp s0


m32:

ldi tempv,0b00110011

ldi tempv0,0b10001000

out porta,tempv

out portb,tempv0

rjmp s0


m33:

ldi tempv,0b0

ldi tempv0,0b10101010

out porta,tempv

out portb,tempv0

rjmp s0


rjmp s0

;------end-------



Данный проект находится в папке с лабораторной\004lab\004.aps

2.Лабораторное задание

Используя пример, напишите программу для вывода на индикатор четырёх символов заданных для каждого индивидуального варианта с использованием схемы:




При нажатии первой кнопки должен выводиться символ1, при нажатии второй кнопки символ2 и т.д.
Данный проект находится в папке с лабораторной\004lab\0042.dsn


Вариант

Символ1

Символ2

Символ3

Символ4

1

Цифра «1»

Буква «E»

Цифра «5»

Буква«X»

2

Цифра «2»

Цифра «4»

Буква «E»

Буква «Z»

3

Цифра «3»

Цифра «7»

Буква «F»

Буква «y»

4

Цифра «4»

Буква «M»

Цифра «0»

Буква «C»

5

Цифра «5»

Буква «W»

Буква «C»

Цифра «8»

6

Цифра «6»

Буква «K»

Буква «L»

Цифра «1»

7

Цифра «7»

Буква «M»

Буква«X»

Цифра «2»

8

Цифра «8»

Буква «W»

Буква «Z»

Цифра «3»

9

Цифра «9»

Буква «K»

Буква «y»

Цифра «4»

10

Цифра «0»

Буква «L»

Буква«T»

Цифра «5»

11

Буква «A»

Цифра «1»

Цифра «6»

Буква «L»

12

Буква «b»

Цифра «2»

Цифра «7»

Буква«X»

13

Буква «C»

Цифра «3»

Цифра «8»

Буква «Z»

14

Буква «d»

Цифра «4»

Цифра «9»

Буква «y»

15

Буква «E»

Цифра «5»

Цифра «0»

Буква«T»

Разводка индикатора:



Лабораторная работа №5

Реализация динамической индикации в микроконтроллерах AVR

Цель работы: изучение методов динамического отображения информации на сегментных индикаторах .



1.Краткий обзор

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

Возьмём для примера микроконтроллер Atmega16, у него имеется 4 порта по 8 выводов.

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




Следовательно для того чтобы подключить допустим кнопку надо менять микроконтроллер, или использовать динамическую индикацию-это метод отображения целостной картины через быстрое последовательное отображение отдельных элементов этой картины. Причем, «целостность» восприятия получается благодаря инерционности человеческого зрения. То есть мы последовательно включаем индикаторы с частотой примерно 30 Гц(30 кадров в секунду).

Динамическая индикация на примере Attiny2313



Данный проект находится в папке с лабораторной\005lab\005.dsn
Программа:

.include "2313def.inc"

.def Temp1=R16

.def Temp2=R17

.def Temp3=R18

.def Temp4=R19

.def Temp=R20

.dseg


Digit: .byte 4

.cseg


.org 0

rjmp RESET ; Reset Handler

rjmp EXT_INT0 ; IRQ0 Handler

rjmp EXT_INT1 ; IRQ1 Handler

rjmp TIM_CAPT1 ; Timer1 Capture Handler

rjmp TIM_COMP1 ; Timer1 Compare Handler

rjmp TIM_OVF1 ; Timer1 Overflow Handler

rjmp TIM_OVF0 ; Timer0 Overflow Handler

rjmp UART_RXC ; UART RX Complete Handler

rjmp UART_DRE ; UDR Empty Handler

rjmp UART_TXC ; UART TX Complete Handler

rjmp ANA_COMP ; Analog Comparator Handler


EXT_INT0 : ret

EXT_INT1 : ret

TIM_CAPT1 : ret

TIM_OVF0 : ret

TIM_OVF1 : ret

UART_RXC : ret

UART_DRE : ret

UART_TXC : ret

ANA_COMP : ret

TIM_COMP1 : ret

reset: ldi Temp1,RamEnd ;инициализация стека

out SPL,Temp1

cli
ldi Temp,0b11111111 ;настройка портов

out ddrb,Temp


ldi Temp,0b00001111

out ddrd,Temp


ldi Temp,4

sts Digit ,Temp ;загрузка начальных сначений

ldi Temp,3

sts Digit+1,Temp

ldi Temp,2

sts Digit+2,Temp

ldi Temp,1

sts Digit+3,Temp

;*********************************************************

;MAIN


;*********************************************************

IndicCycle: rcall Display ;цикл индикации

rjmp IndicCycle

;*********************************************************

Display:

;последовательный вывод на индикацию содержимого

;переменной Digit
lds Temp1,Digit ;загружаем 0-ю ячейку

ldi Temp,0b00001110 ;активируем 0-й разряд

;индикации

out PortD,Temp

rcall Decoder ;вызываем 7-сегм. декодер

out PortB,Temp1 ;выводим значение в порт

rcall Delay1 ;ждем
lds Temp1,Digit+1 ;и .т.д

ldi Temp,0b00001101

out PortD,Temp

rcall Decoder

out PortB,Temp1

rcall Delay1


lds Temp1,Digit+2

ldi Temp,0b00001011

out PortD,Temp

rcall Decoder

out PortB,Temp1

rcall Delay1


lds Temp1,Digit+3

ldi Temp,0b00000111

out PortD,Temp

rcall Decoder

out PortB,Temp1

rcall Delay1


ret

;*********************************************************

Decoder:

;преобразование двоичного числа

;в код 7-сегментного индикатора

ldi ZL,Low(DcMatrix*2) ;инициализация массива

ldi ZH,High(DcMatrix*2)

ldi Temp2,0 ;прибавление переменной

add ZL,Temp1 ;к 0-му адресу массива

adc ZH,Temp2


lpm ;загрузка значения

mov Temp1,r0

ret

DcMatrix:



;массив - таблица истинности декодера

; hgfedcba hgfedcba

.db 0b00111111,0b00000110 ;0,1

.db 0b01011011,0b01001111 ;2,3

.db 0b01100110,0b01101101 ;4,5

.db 0b01111101,0b00000111 ;6,7

.db 0b01111111,0b01101111 ;8,9
;*********************************************************

Delay1:


;цикл задержки

push Temp1

push Temp2

ldi Temp1,0

ldi Temp2,50
d11: dec Temp1

brne d11


dec Temp2

brne d11


pop Temp2

pop Temp1

ret

Данный проект находится в папке с лабораторной\005lab\005.aps
2.Лабораторное задание

Используя пример вывести на индикатор число соответствующее вашему варианту




Вариант

Число

1

7658

2

5265

3

8849

4

2254

5

5472

6

4684

7

3657

8

2230

9

7698

10

6554

11

3483

12

2965

13

3998

14

4376

15

6097


Разводка индикатора:



База данных защищена авторским правом ©shkola.of.by 2016
звярнуцца да адміністрацыі

    Галоўная старонка