Материал: ИДЗ_1

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра БТС

ИДЗ №1

ТЕМА: Программирование портов ввода-вывода

Студент гр. 7501

 

Исаков А.О.

Преподаватель

 

Анисимов А.А.

 

 

 

 

 

Санкт-Петербург

2020

Цель работы: Исследование принципов работы микроконтроллера

ATtiny104 на базе отладочной платы “ATtiny104 - Xplained Nano”. Получение начальных навыков программирования МК на языке Assembler и C,

пользования средой разработки AVR Atmel Studio 7.

Используемые инструменты: Отладочная плата ATtiny104 - Xplained Nano; интегрированная среда разработки AVR Atmel Studio 7; методические указания к выполнению работы.

Теоретическое обоснование темы работы

Мигание светодиодом при помощи микроконтроллера подразумевает собой попеременную подачу на один из выходов МК сигналов разных логических уровней.

Логические элементы оперируют сигналами двух типов: "высокий логический уровень" (1) и "низкий логический уровень" (0), которые характеризуются различным уровнем напряжения: полное напряжение питания принимается в качестве уровня "логической единицы", а нулевое напряжение - в качестве уровня "логического нуля".

Видеальном случае все сигналы логических элементов существовали бы

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

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

Элементы ТТЛ работают при номинальном напряжении питания 5

вольт, +/- 0,25 вольт. В идеале, сигнал высокого логического уровня должен быть равен ровно 5,00 В, а сигнал низкого уровня - ровно 0,00 вольт. Однако в реальных элементах ТТЛ не могут быть обеспечены подобные точные уровни

напряжения, поэтому они могут принимать сигналы высокого и низкого уровней даже при значительном отклонении напряжения от идеальных величин. "Приемлемые" напряжения входного сигнала лежат в диапазоне от 0

до 0,8 вольт для низкого логического уровня, и от 2 до 5 вольт для высокого логического уровня. "Приемлемые" напряжения выходного сигнала (уровни напряжения, гарантируемые производителем элемента в указанных вариантах нагрузки) лежат в диапазоне от 0 до 0,5 вольт для низкого логического уровня,

и от 2,7 до 5 вольт для высокого логического уровня.

Временные задержки в МК, программно, могут быть реализованы по-

разному (например, с помощью счетчика, пропуском команды, библиотек задежрки, либо циклов вычисления). В данной работе был выбран наиболее простой тип задержки – при помощи цикла декрементирования переменных для Assembler и библиотека «delay» для языка С.

Вид используемой платы приведен на рисунке 1.

Рисунок 1 – Схема отладочной платы ATtiny104 Xplained Nano

Ход выполнения лабораторной работы

Автоматическое мигание светодиода (Assembler) для ATTINY104

LDI R16,0b00100000

OUT DDRA,R16

OUT PORTA,R16

MAIN:

LDI R16, 0b11011111 OUT PORTA,R16 RCALL Delay

LDI R16,0b00100000 OUT PORTA,R16 RCALL Delay

rjmp MAIN

.equ Lowbyle=255

.equ Medbyte=255

.equ Hightbyte=2

Delay:

LDI R16,Lowbyte

LDI R17,Medbyte

LDI R18,Hightbyte

loop:

DEC R16 BRNE loop DEC R17 BRNE loop DEC R18 BRNE loop RET

Рисунок 2 – Светодиод горит

Рисунок 3 – Светодиод погас

Как можно понять из кода, задержка при мигании светодиодом в данном случае происходит из-за лагов МК во время выполнения операций декрементирования DEC. Количество арифметических операций, для получения различимой глазом задержки должно быть велико, так как тактовая частота равна 1МГц. В данном случае это число равно 255 * 255 * 2 = 130050.

Мигание светодиодом по нажатию на кнопку (Assembler) для ATTINY104

LDI r16, 0b00000000

; устанавливаем все нули в РОН r16

 

 

 

OUT DDRB, r16

 

; присваем регистру DDRB значение r16

 

 

 

LDI r16, 0b00000010

; устанавливаем 1 во 1 разр. в РОН r16

 

 

 

OUT PUEB, r16

 

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

 

 

LDI r16, 0b00100000 ; устанавливаем 1 во 5 разр. в РОН r16

 

 

 

OUT DDRA, r16

 

; присваем регистру DDRA значение r16

 

 

 

Main:

 

 

; начало главного цикла

 

 

 

IN r16, PINB

 

; считываем значения с PINB в r16

 

 

SBRC r16, 1

 

; если в 1 разр. в r16 единица

 

 

LDI r17, 0b00100000

; присваеваем r17 единицу в 5 разр.

 

 

SBRC r16, 1

 

; если в 1 разр. в r16 единица

 

 

OUT PORTA, r17

; присваем регистру PORTA значение r17

 

 

SBRS r16, 1

 

; если в 1 разр. в r16 ноль

 

 

LDI r17, 0b00000000

; присваеваем r17 нули во всех разр.

 

 

SBRS r16, 1

 

; сли в 1 разр. в r16 ноль

 

 

 

OUT PORTA, r17

; присваем регистру PORTA значение r17

 

 

RJMP Main

 

 

 

 

 

 

 

 

Во

избежание

того,

чтобы

вывод

находился

в

режиме

высокоимпедансного входа Hi-Z, мы включаем подтяжку для используемой

кнопки «OUT PUEB, r16»

Мигание светодиодом по нажатию на кнопку (C) для ATTINY2313

#include <avr/io.h>

Источник: https://studfile.net/preview/16557549/