ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.01.2025
Просмотров: 3651
Скачиваний: 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:
Регистры сравнения а таймеров/счетчиков - 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-разрядному регистру в основной программе будет неверным.
Выполнение основного задания
Ознакомиться со схемой платы лабораторного стенда и подключением клавиатуры и индикатора к выводам микроконтроллера.
Запустить на персональном компьютере интегрированную систему программирования 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 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