ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 23.01.2025

Просмотров: 3701

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Оглавление

Введение

1. Структура и функционирование микроконтроллера aTmega128

Указатель стека – sp.

Регистр управления делением частоты кварцевого генератора – xdiv

2. Интегрированная система программирования avr Studio v4.12

2.1. Создание проекта.

2.2. Компиляция проекта.

3.Описание лабораторного стенда лс-2.

Работа №1 микроконтроллер aTmega128: методы адресации, команды передачи данных и управления

Введение

Команды передачи данных приведены в Табл.1.1. Из таблицы видно, что набор этих команд представляет собой сочетание восьми операций с различными методами адресации.

Из табл.1.1 и табл.1.2 видно, что команды пересылки данных и команды переходов значения флагов регистра sreg не изменяют.

Работа №2 микроконтроллер aTmega128: команды обработки данных

Введение

Задания

Работа №3 цифровые системы на базе микроконтроллерa aTmega128:

Введение

Регистр управления внешними прерываниями – eicra и eicrb

Выполнение основного задания

Задания

Работа №4 цифровые системы на базе микроконтроллера aTmega128: работа с внешними устройствами через параллельные порты ввода вывода – работа с клавиатурой и светодиодным индикатором

Введение

Выполнение основного задания

Задания

Работа №5

16-Разрядные таймеры/счетчики t/c1 и t/c3

Регистры сравнения а таймеров/счетчиков - ocRxA

Выполнение основного задания

Задания

Работа №6 цифровые системы на базе микроконтроллера aTmega128:

Введение

Универсальный синхронный и асинхронный приемопередатчик usart предназначен для организации последовательной связи.

Инициализация usart.

Передача данных - Передатчик usart.

Прием данных - Приемник usart.

Описание регистров usart.

Задания

Работа №7 цифровые системы на базе микроконтроллера aTmega128:

Аналоговый компаратор.

Задания

Задания

Приложение 1.

Приложение 2.

Рис. 4.1 Схема подключения клавиатуры на плате лабораторного стенда ЛС-2.

Для определения текущего состояния клавиатуры микроконтроллер должен периодически считывать состояния выводов PD4 – PD6, последовательно устанавливая на выводах PD0 – PD3 состояние "0". Для этого служит процедура опроса клавиатуры, посредством выполнения которой микроконтроллер определяет позицию нажатой кнопки. В реальных системах опрос клавиатуры производится периодически по сигналам таймера или осуществляется по запросу прерывания, формируемому клавиатурой. Основной проблемой при обслуживании клавиатуры является защита от дребезга контактов, который может привести к формированию ложной информации. Для защиты применяются как аппаратные, так и программные средства. На плате лабораторного макета аппаратных средств защиты от дребезга контактов нет, поэтому должны применяться исключительно программные методы, все варианты которых сводятся к повторному чтению состояния клавиатуры.

Нажатие клавиши должно вызывать ввод в цифровую систему определенного 8-разрядного символа. Кодировка клавиш, которая должна быть реализована при выполнении данной работы на лабораторном макете, задается преподавателем.

Порты ввода-вывода.

У микроконтроллеров ATmega128 имеется 6 универсальных параллельных портов ввода/вывода A, B, C, D, E, F и G.

Все порты ввода-вывода микроконтроллера работают по принципу чтение-модификация-запись при использовании их в качестве портов универсального ввода-вывода. Это означает, что изменение направления ввода-вывода одной линии порта командами SBI и CBI будет, происходит без ложных изменений направления ввода-вывода других линий порта. Данное распространяется также и на изменение логического уровня (если линия порта настроена на вывод) или на включение/отключение подтягивающих резисторов (если линия настроена на ввод). Каждый выходной буфер имеет симметричную характеристику управления с высоким втекающим и вытекающим выходными токами. Выходной драйвер обладает нагрузочной способностью, которая позволяет непосредственно управлять светодиодными индикаторами. Ко всем линиям портов может быть подключен индивидуальный выборочный подтягивающий к плюсу питания резистор, сопротивление которого не зависит от напряжения питания. На всех линиях порта установлены защитные диоды, которые подключены к VCC и Общему (GND).


Регистры портов ввода-вывода.

Ссылки на регистры и биты регистров даны в общей форме. При этом символ “х” заменяет наименование порта A, B, C, D, E, F и G, а символ “n” заменяет номер разряда порта от 0 до 7.

Для каждого порта ввода-вывода в памяти ввода-вывода зарезервировано три ячейки: одна под регистр данных – PORTx, другая под регистр направления данных – DDRx и третья под состояние входов порта – PINx. Ячейка, хранящая состояние на входах портов, доступна только для чтения, а регистры данных и направления данных имеют двунаправленный доступ. Кроме того, установка бита выключения подтягивающих резисторов PUD регистра SFIOR отключает функцию подтягивания на всех выводах всех портов.

Регистр данных порта PORTx

7

6

5

4

3

2

1

0

PORTx7

PORTx6

PORTx5

PORTx4

PORTx3

PORTx2

PORTx1

PORTx0

Исходное значение

0

0

0

0

0

0

0

0

Регистр направления данных порта - DDRx

7

6

5

4

3

2

1

0

DDx7

DDx6

DDx5

DDx4

DDx3

DDx2

DDx1

DDx0

Исходное значение

0

0

0

0

0

0

0

0


Регистр входных данных порта - PINx

7

6

5

4

3

2

1

0

PINx7

PINx6

PINx5

PINx4

PINx3

PINx2

PINx1

PINx0

Исходное значение

0

0

0

0

0

0

0

0

Таблица 4.1 – Адреса регистров портов ввода-вывода.

ПОРТ

РЕГИСТР

A

B

C

D

E

F

G

PINx

$19($39)

$16($36)

$13($33)

$10($30)

$01($21)

$00($20)

($63)

DDRx

$1A($3A)

$17($37)

$14($34)

$11($31)

$02($22)

($61)

($64)

PORTx

$1B($3B)

$18($38)

$15($35)

$12($32)

$03($23)

($62)

($65)

Настройка выводов.

Режим и состояние для каждого вывода определяется значением соответствующих разрядов трех регистров: DDxn, PORTxn и PINxn.


Биты DDxn регистра DDRx определяют направленность линии ввода-вывода. Если DDxn=1, то Pxn конфигурируется на вывод. Если DDxn=0, то Pxn конфигурируется на ввод.

Если PORTxn = 1 при конфигурации линии порта на ввод, то разрешается подключение подтягивающего резистора. Для выключения данного резистора необходимо записать в PORTxn лог. 0 или настроить линию порта на вывод. Во время сброса все линии портов находятся в третьем (высокоимпедансном) состоянии.

Таблица 4.2 – Настройка вывода порта.

DDxn

PORTxn

PUD (в SFIOR)

Ввод-вывод

Подтягивающий резистор

Комментарий

0

0

X

Ввод

Нет

Третье состояние (Z-состояние)

0

1

0

Ввод

Да

Pxn будет источником тока при подаче внешнего низкого уровня

0

1

1

Ввод

Нет

Третье состояние (Z-состояние)

1

0

X

Вывод

Нет

Вывод лог. 0 (втекающий ток)

1

1

X

Вывод

Нет

Вывод лог. 1 (вытекающий ток)


Выполнение основного задания

  1. Ознакомиться со схемой платы лабораторного стенда и подключением клавиатуры и индикатора к выводам микроконтроллера.

  2. Запустить на персональном компьютере интегрированную систему программирования AVRStudio. Командой ProjectNew Project создать новый проект Lesson4. С использованием редактора текста создать демонстрационную программу:

.device ATmega128

.include "m128def.inc"

;===================================================================

;Определения регистров и битов

;===================================================================

.def temp =r16

.def dig1 =r17

.def dig2 =r18

.def dig3 =r19

.def deley =r20

.def deley1 =r21

.def scan_kbd =r22

.equ razr1 =PE4

.equ razr2 =PE5

.equ razr3 =PE6

.equ seg =PORTC

.equ kbd =PIND

.equ row1 =PD0

.equ row2 =PD1

.equ row3 =PD2

.equ row4 =PD3

.equ col1 =PD4

.equ col2 =PD5

.equ col3 =PD6

;===================================================================

;********* Вектор сброса ********************

;===================================================================

.CSEG

.org $0000 ;начальный адpес пpогpаммы

rjmp RESET

;===================================================================

;Вывод показаний на индикатор из регистров dig1, dig2 и dig3

;===================================================================

Display:

mov temp,dig1

rcall _rd_tbl

cbi PORTE,razr1

rcall _deley

sbi PORTE,razr1

mov temp,dig2

rcall _rd_tbl

cbi PORTE,razr2

rcall _deley

sbi PORTE,razr2

mov temp,dig3

rcall _rd_tbl

cbi PORTE,razr3

rcall _deley

sbi PORTE,razr3

ret

;===================================================================

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

;===================================================================

_rd_tbl:

ldi ZH,High(seg_table*2) ;загpужаем указатель на таблицу

ldi ZL,Low(seg_table*2)

add ZL,temp ;вычисляем адpес

lpm ;читаем байт в r0

out seg,r0 ;включаем нужные сегменты

ret

;===================================================================

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

;===================================================================

Keyboard:

cbi PORTD,row1

rcall del_key

in temp,kbd

sbi PORTD,row1

com temp

cbr temp,$8F