ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.01.2025
Просмотров: 3707
Скачиваний: 8
СОДЕРЖАНИЕ
1. Структура и функционирование микроконтроллера aTmega128
Регистр управления делением частоты кварцевого генератора – xdiv
2. Интегрированная система программирования avr Studio v4.12
3.Описание лабораторного стенда лс-2.
Работа №1 микроконтроллер aTmega128: методы адресации, команды передачи данных и управления
Работа №2 микроконтроллер aTmega128: команды обработки данных
Работа №3 цифровые системы на базе микроконтроллерa aTmega128:
Регистр управления внешними прерываниями – eicra и eicrb
16-Разрядные таймеры/счетчики t/c1 и t/c3
Регистры сравнения а таймеров/счетчиков - ocRxA
Работа №6 цифровые системы на базе микроконтроллера aTmega128:
Передача данных - Передатчик usart.
Прием данных - Приемник usart.
Работа №7 цифровые системы на базе микроконтроллера aTmega128:
Рис. 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 (вытекающий ток) |
Выполнение основного задания
Ознакомиться со схемой платы лабораторного стенда и подключением клавиатуры и индикатора к выводам микроконтроллера.
Запустить на персональном компьютере интегрированную систему программирования AVRStudio. Командой ProjectNew 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