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

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

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

Добавлен: 23.01.2025

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

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

Разряд 0 - UCPOLx: Полярность синхронизации

Данный бит используется только в синхронном режиме. Если используется асинхронный режим, то в данный бит необходимо записать лог. 0. В синхронном режиме бит UCPOLx определяет соотношение между выборкой входящих данных и обновлением передаваемых данных и сигналом тактирования синхронной связи (XCKx).

Таблица 6.5. Установки бит UCPOLx

UCPOLx

Изменение передаваемых данных на выходе TxDx

Выборка принимаемых данных на входе RxDx

0

Нарастающий фронт XCKx

Спадающий фронт XCKx

1

Спадающий фронт XCKx

Нарастающий фронт XCKx

Регистры скорости связи USART - UBRRxL и UBRRxH

Разряд

7

6

5

4

3

2

1

0

-

-

-

-

UBRRx[11:8]

UBRRnH

UBRRx[7:0]

UBRRnL

Чтение/запись

Чт.

Чт.

Чт.

Чт.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Исх. значение

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0


Разряды 15:12 -Зарезервированные разряды

Разряды 11:0 - UBRRx11:0: Регистр скорости связи USART

UBRR - 12-разр. регистр, который задает значение скорости связи USART. Регистр UBRRxH содержит 4 старших разряда, а UBRRxL 8 младших разрядов значения скорости USART. Если во время передачи или приема изменить скорость связи, то сеанс связи будет нарушен. Запись в регистр UBRRxL инициирует обновление скорости связи.

Таблица 6.7 - Выражения для вычисления установок регистра скорости связи

BAUD - скорость связи (в битах в секунду, бод)

fOSC – тактовая частота микроконтроллера

UBRR - Содержимое регистров UBRRH и UBRRL (0 … 4095).

ВЫПОЛНЕНИЕ РАБОТЫ

  1. Изучить функционирование последовательных портов микроконтроллера ATmega128.

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

.device ATmega128

.include "m128def.inc"

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

.def temp =r16

.def u_in_data =r17

.def deley =r18

.def deley1 =r19

.def scan_kbd =r22

.def deleyk =r23

.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 Start ;пеpеход к основной части пpогpаммы

.org $0024

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

.org $0026

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

.org $0028

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

;***** Прерывание по завершению приема ********************************

UART_in:

in u_in_data,UDR0

reti

;*** Таблица констант в памяти программ ***************

seg_table:

.db $C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90,$88,$83,$C6,$A1,$86,$8E,$FF

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

Start:

ldi temp,High(RAMEND);инициализация стека

out SPH,temp ;


ldi temp,Low(RAMEND) ;

out SPL,temp ;

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

in temp,DDRE

sbr temp,(1<<razr1)+(1<<razr2)

out DDRE,temp

sbi PORTE,razr1

sbi PORTE,razr2

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

ldi temp,$FF

out DDRC,temp

out seg,temp

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

in temp,DDRD

sbr temp,(1<<row1)+(1<<row2)+(1<<row3)+(1<<row4)

out DDRD,temp

sbi PORTD,row1

sbi PORTD,row2

sbi PORTD,row3

sbi PORTD,row4

;устанавливаем скорость обмена 9600 для частоты кварца 8МГц

clr temp

sts UBRR0H,temp

ldi temp,51

out UBRR0L,temp

;Разрешение работы приемника и передатчика

ldi temp,(1<<RXEN0)|(1<<RXCIE0)|(1<<TXEN0)

out UCSR0B,r16

; Установка формата посылки: 8 бит данных, 1стоп-бита

ldi temp, (1<<UCSZ01)|(1<<UCSZ00)

sts UCSR0C,r16

clr u_in_data ;очистка регистра

sei ;разрешение всех прерываний

loop:

rcall keyboard

rcall Display

tst scan_kbd

breq loop

out UDR0,scan_kbd

rjmp loop

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

Display:

mov temp,u_in_data

cbr temp,$F0

rcall _rd_tbl

cbi PORTE,razr2

rcall _deley

sbi PORTE,razr2

mov temp,u_in_data

swap temp

cbr temp,$F0

rcall _rd_tbl

cbi PORTE,razr1

rcall _deley

sbi PORTE,razr1

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

;Подпрограмма задержки для индикатора

_deley:

ldi deley1,2

_deley1:

dec deley

brne _deley1

dec deley1

brne _deley1

ret

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

Keyboard:

cbi PORTD,row1

rcall del_key

in temp,kbd

sbi PORTD,row1

swap temp

com temp

cbr temp,$F8

breq _row2

rcall key_calc

cpi temp,0

breq _no_key

mov scan_kbd,temp

rjmp _ret_kbd

_row2:


cbi PORTD,row2

rcall del_key

in temp,kbd

sbi PORTD,row2

swap temp

com temp

cbr temp,$F8

breq _row3

rcall key_calc

cpi temp,0

breq _no_key

inc temp

inc temp

inc temp

mov scan_kbd,temp

rjmp _ret_kbd

_row3:

cbi PORTD,row3

rcall del_key

in temp,kbd

sbi PORTD,row2

swap temp

com temp

cbr temp,$F8

breq _row4

rcall key_calc

cpi temp,0

breq _no_key

inc temp

inc temp

inc temp

inc temp

inc temp

inc temp

mov scan_kbd,temp

rjmp _ret_kbd

_row4:

cbi PORTD,row4

rcall del_key

in temp,kbd

sbi PORTD,row4

swap temp

com temp

cbr temp,$F8

breq _no_key

rcall key_calc

cpi temp,0

breq _no_key

inc temp

inc temp

inc temp

inc temp

inc temp

inc temp

inc temp

inc temp

inc temp

mov scan_kbd,temp

rjmp _ret_kbd

_no_key:

clr scan_kbd

_ret_kbd:

ret

;Подпрограмма определения нажатой клавиши в ряду

key_calc:

cpi temp,1

brne _key2

ret

_key2:

cpi temp,2

brne _key3

ret

_key3:

cpi temp,4

brne _err_key

ldi temp,3

ret

_err_key:

clr temp

ret

;Подпрограмма задержки для клавиатуры

del_key:

ldi deleyk,50

_del_key1:

dec deleyk

brne _del_key1

ret

.EXIT

Эта программа демонстрирует работу универсального приемопередатчика USART микроконтроллера ATmega128. Последовательный обмен проходит со скоростью 9600 бит в сек. При приеме данных используется прерывание. Полученные данные отображаются на индикаторе в шестнадцатеричном формате.

  1. Выполнить команду Project/Buildдля компиляции проекта, при получении сообщения об ошибке компиляции исправить ее и повторить этот пункт.

  2. Соединить два лабораторных стенда, разъемы XP12, прилагаемым в комплекте кабелем (эти действия производить при выключенном питании стенда).

  3. Включить питание стендов.

  4. Загрузить программу lesson7.hex в каждый микроконтроллер по методике пункта 2.4 «ЗАПИСЬ ПРОГРАММЫ В МИКРОКОНТРОЛЛЕР».

  5. После запуска программы в микроконтроллере, нажимая клавиши на клавиатуре стенда, убедится в передаче информации по USART. При правильной настройке параметров порта USART на индикаторе другого стенда будет отображаться код нажатой клавиши (см табл.6.8).


Таблица 6.8 – Соответствие кодов клавишам клавиатуры стенда.

Клавиша

1

2

3

4

5

6

7

8

9

*

0

#

Код

01

02

03

04

05

06

07

08

09

0A

0b

0C