ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.01.2025
Просмотров: 3697
Скачиваний: 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:
Разряд 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).
ВЫПОЛНЕНИЕ РАБОТЫ
Изучить функционирование последовательных портов микроконтроллера ATmega128.
Запустить на персональном компьютере интегрированную систему программирования AVRStudio. Командой ProjectNew 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 бит в сек. При приеме данных используется прерывание. Полученные данные отображаются на индикаторе в шестнадцатеричном формате.
Выполнить команду Project/Buildдля компиляции проекта, при получении сообщения об ошибке компиляции исправить ее и повторить этот пункт.
Соединить два лабораторных стенда, разъемы XP12, прилагаемым в комплекте кабелем (эти действия производить при выключенном питании стенда).
Включить питание стендов.
Загрузить программу lesson7.hex в каждый микроконтроллер по методике пункта 2.4 «ЗАПИСЬ ПРОГРАММЫ В МИКРОКОНТРОЛЛЕР».
После запуска программы в микроконтроллере, нажимая клавиши на клавиатуре стенда, убедится в передаче информации по 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 |