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

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

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

Добавлен: 23.01.2025

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

Скачиваний: 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.

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

7

6

5

4

3

2

1

0

MSB

OCRxAH

LSB

OCRxAL

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

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

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

7

6

5

4

3

2

1

0

MSB

OCRxBH

LSB

OCRxBL

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

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0


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

7

6

5

4

3

2

1

0

MSB

OCRxCH

LSB

OCRxCL

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

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

16-разрядные регистры сравнения выхода обеспечивают и чтение и запись.

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

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

Регистр захвата таймеров/счетчиков – ICRx.

7

6

5

4

3

2

1

0

MSB

ICRxH

LSB

ICRxL

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

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0


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

При обнаружении на выводе ICx нарастающего или cпадающего фронта сигнала (определяемого установкой ICESx в регистре TCCRxB) текущее состояние таймера/счетчика (значение регистра TCNTx) пересылается в регистр ICRx. Одновременно устанавливается флаг ICFx.

Обращение к 16-разрядным регистрам.

Каждый 16-разрядный регистр таймеров/счетчиков физически разме­щается в двух 8-разрядных регистрах. Соответственно для обращения к ним требуется выполнить по две операции чтения или записи. Для того чтобы запись или чтение обоих байт содержимого 16-разрядного регистра проис­ходила одновременно, в составе каждого таймера/счетчика имеется специ­альный 8-разрядный регистр TEMP, предназначенный для хранения стар­шего байта значения (этот регистр используется только процессором и программно недоступен).

Для выполнения цикла записи 16-разрядного регистра первым должен быть загружен старший байт, который помещается в регистр ТЕМP. При последующей записи младшего байта он объединяется с содержимым реги­стра TEMP, и оба байта одновременно (в одном и том же машинном цикле) записываются в 16-разрядный регистр. Если требуется изменить несколько 16-разрядных регистров таймера/счетчика, а старшие байты всех записы­ваемых значений одинаковы, загрузку старшего байта достаточно выпол­нить только один раз.

Для выполнения цикла чтения 16-разрядного регистра первым должен быть прочитан младший байт. При его чтении содержимое старшего байта помещается в регистр TEMP. При последующем чтении старшего байта воз­вращается значение, сохраненное в регистре TEMP. Исключение составля­ют только регистры сравнения OCR1A/B/C (OCR3A/B/C), при чтении ко­торых регистр TEMP не задействуется.

При выполнении цикла обращения к 16-разрядному регистру тайме­ра/счетчика прерывания должны быть запрещены. В противном случае, ес­ли прерывание произойдет между двумя командами обращения к 16-раз­рядному регистру, а в подпрограмме обработки этого прерывания тоже будет произведено обращение к какому-либо из 16-разрядных регистров того же таймера/счетчика, содержимое регистра TEMP будет изменено. Как следст­вие, результат обращения к 16-разрядному регистру в основной программе будет неверным.


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

  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 beep =r21

.equ razr1 =PE4

.equ razr2 =PE5

.equ razr3 =PE6

.equ seg =PORTC

;*****таблица векторов прерываний**************************************

.CSEG

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

rjmp Start ;пеpеход к pабочей части пpогpаммы (вектоp Reset)

.org $0002

reti ;Внешнее пpеpывание Int0

.org $0004

reti ;Внешнее пpеpывание Int1

.org $0006

reti ;Внешнее пpеpывание Int2

.org $0008

reti ;Внешнее пpеpывание Int3

.org $000A

reti ;Внешнее пpеpывание Int4

.org $000C

reti ;Внешнее пpеpывание Int5

.org $000E

reti ;Внешнее пpеpывание Int6

.org $0010

reti ;Внешнее пpеpывание Int7

.org $0012

rjmp comp2 ;Совпадение таймера/счетчика T2

.org $0014

rjmp ovf2 ;Переполнение таймера/счетчика T2

.org $0016

reti ;Захват таймера/счетчика T1

.org $0018

rjmp comp1a ;Совпадение "А" таймера/счетчика T1

.org $001A

reti ;Совпадение "В" таймера/счетчика T1

.org $001C

reti ;Переполнение таймера/счетчика T1

.org $001E

reti ;Совпадение таймера/счетчика T0

.org $0020

rjmp ovf0 ;Переполнение таймера/счетчика T0

.org $0022

reti ;Передача по SPI завершена

.org $0024

reti ;USART0, прием завершен

.org $0026

reti ;Регистр данных USART0 пуст

.org $0028

reti ;USART0, передача завершена

.org $002A

reti ;Преобразование АЦП завершено

.org $002C

reti ;Запись в EEPROM завершена

.org $002E

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

.org $0030

reti ;Совпадение "C" таймера/счетчика T1


.org $0032

reti ;Захват таймера/счетчика T3

.org $0034

reti ;Совпадение "А" таймера/счетчика T3

.org $0036

reti ;Совпадение "В" таймера/счетчика T3

.org $0038

reti ;Совпадение "C" таймера/счетчика T3

.org $003A

rjmp ovf3 ;Переполнение таймера/счетчика T3

.org $003C

reti ;USART1, прием завершен

.org $003E

reti ;Регистр данных USART1 пуст

.org $0040

reti ;USART1, передача завершена

.org $0042

reti ;Прерывание от модуля TWI

.org $0044

reti ;Готовность SPM

;***** Обработка прерывания Таймера0 ********************************

ovf0:

inc dig3

cpi dig3,10

brne ovf_ret

clr dig3

inc dig2

cpi dig2,10

brne ovf_ret

clr dig2

inc dig1

cpi dig1,10

brne ovf_ret

clr dig1

ovf_ret:

reti

;***** Обработка прерывания Таймера1 сравнение***********************

comp1a:

;инверсия линии выхода на пьезоизлучатель

sbis PORTD,PD7

rjmp comp2_1

cbi PORTD,PD7

reti

comp2_1:

sbi PORTD,PD7

reti

;***** Обработка прерывания Таймера2 ********************************

ovf2:

;включение светодиода

cbi PORTE,PE7

reti

;***** Обработка прерывания Таймера2 сравнение***********************

comp2:

;выключение светодиода

sbi PORTE,PE7

reti

;***** Обработка прерывания Таймера3 ********************************

ovf3:

inc beep

inc beep

out OCR1AL,beep ;изменение частоты генерируемого сигнала

out OCR2,beep ;изменение яркости светодиода

reti

;***** Основная программа********************************************

Start:

;инициализация стека

ldi temp,High(RAMEND)

out SPH,temp

ldi temp,Low(RAMEND)

out SPL,temp

;очищаем регистры

ldi dig1,0

ldi dig2,0

ldi dig3,0

ldi beep,0

;настройка линии выхода на пьезоилучатель

sbi DDRD,PD7

cbi PORTD,PD7

;настройка линии выхода на светодиод

sbi DDRE,PE7

cbi PORTE,PE7

;настройка выходных линий разрядов и их выключение

in temp,DDRE

sbr temp,(1<<razr1)|(1<<razr2)|(1<<razr3)

out DDRE,temp

sbi PORTE,razr1

sbi PORTE,razr2

sbi PORTE,razr3

;настройка выходных линий сегментов и их выключение

ldi temp,$FF

out DDRC,temp