ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.01.2025
Просмотров: 3663
Скачиваний: 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:
breq _row2
sbr temp,(1<<row1)
rjmp _ret_kbd
_row2:
cbi PORTD,row2
rcall del_key
in temp,kbd
sbi PORTD,row2
com temp
cbr temp,$8F
breq _row3
sbr temp,(1<<row2)
rjmp _ret_kbd
_row3:
cbi PORTD,row3
rcall del_key
in temp,kbd
sbi PORTD,row3
com temp
cbr temp,$8F
breq _row4
sbr temp,(1<<row3)
rjmp _ret_kbd
_row4:
cbi PORTD,row4
rcall del_key
in temp,kbd
sbi PORTD,row4
com temp
cbr temp,$8F
breq _no_key
sbr temp,(1<<row4)
_ret_kbd:
cp temp,scan_kbd
breq _no_key
mov scan_kbd,temp
rcall key_det
mov dig1,dig2
mov dig2,dig3
mov dig3,temp
ret
_no_key:
ret
;===================================================================
;Подпрограмма определения нажатой клавиши
;===================================================================
key_det:
cpi temp,0b00010001
brne _key2
ldi temp,1
ret
_key2:
cpi temp,0b00100001
brne _key3
ldi temp,2
ret
_key3:
cpi temp,0b01000001
brne _key4
ldi temp,3
ret
_key4:
cpi temp,0b00010010
brne _key5
ldi temp,4
ret
_key5:
cpi temp,0b00100010
brne _key6
ldi temp,5
ret
_key6:
cpi temp,0b01000010
brne _key7
ldi temp,6
ret
_key7:
cpi temp,0b00010100
brne _key8
ldi temp,7
ret
_key8:
cpi temp,0b00100100
brne _key9
ldi temp,8
ret
_key9:
cpi temp,0b01000100
brne _key10
ldi temp,9
ret
_key10:
cpi temp,0b00011000
brne _key11
ldi temp,10
ret
_key11:
cpi temp,0b00101000
brne _key12
ldi temp,11
ret
_key12:
cpi temp,0b01001000
brne _err_key
ldi temp,12
_err_key:
ret
;===================================================================
;Подпрограмма задержки для клавиатуры
;===================================================================
del_key:
ldi deley,5
_del_key1:
dec deley
brne _del_key1
ret
;===================================================================
;Подпрограмма задержки для индикатора
;===================================================================
_deley:
ldi deley1,1
_deley1:
dec deley
brne _deley1
dec deley1
brne _deley1
ret
;===================================================================
RESET:
;инициализация стека
ldi temp,High(RAMEND)
out SPH,temp ;устанавливаем указатель стека
ldi temp,Low(RAMEND) ;на конечный адрес ОЗУ контроллера
out SPL,temp
;очищаем регистры
clr dig1
clr dig2
clr dig3
clr scan_kbd
;настройка выходных линий разрядов и их выключение
in temp,DDRE
sbr temp,(1<<razr1)+(1<<razr2)+(1<<razr3)
out DDRE,temp
in temp,PORTE
sbr temp,(1<<razr1)+(1<<razr2)+(1<<razr3)
out PORTE,temp
;настройка выходных линий сегментов и их выключение
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
ldi temp,$FF
out PORTD,temp
;===================================================================
;Основная программа
;===================================================================
main:
rcall Display
rcall Keyboard
rjmp main
;===================================================================
;Таблица констант в памяти программ
;===================================================================
seg_table:
.db $C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90,$88,$83,$C6,$A1,$86,$8E,$FF
.EXIT
Программа Lesson4 определяет факт нажатия одной из клавиш 12-кнопочной клавиатуры, организованной в виде матрицы 4 строки х 3 столбца, заносит номер нажатой клавиши в регистр scan_kbd и отображает номер нажатой клавиши в шестнадцатеричном формате на семисегментном индикаторе макета. Подразумевается, что в каждый момент времени может быть нажата только одна клавиша. Код нажатой клавиши заносится в регистр temp и по нему определяется номер клавиши в подпрограмме key_det (это удобно при дальнейшем анализе и выполнении операций управления), который выводится на индикатор.
Выполнить команду Project/Buildдля компиляции проекта.
Загрузить программу lesson4.hex в микроконтроллер по методике пункта 2.4 «ЗАПИСЬ ПРОГРАММЫ В МИКРОКОНТРОЛЛЕР».
Задания
1. Составить программу, которая анализирует номер нажатой клавиши и формирует соответствующий десятичный номер на двух семисегментных индикаторах. (Кодировка клавиш задается преподавателем).
2. Разработать и реализовать различные варианты подавления дребезга контактов клавиатуры.
3. Составить программу, осуществляющую считывание трех последовательно вводимых с клавиатуры чисел и их вывод на три семисегментных индикатора.
4. Составить программу опроса клавиатуры, имеющую защиту от одновременного нажатия двух и более клавиш.
5. Составить программу опроса клавиатуры, которая рассматривает некоторые клавиши как служебные, изменяющие действие нажатых основных клавиш.
6. Составить программу опроса клавиатуры, которая наращивает значение в ячейке памяти, соответствующей клавише, если клавиша нажата и удерживается. Результат должен наблюдаться на семисегментных индикаторах.
7. Провести отладку разработанных программ на лабораторном стенде с использованием интегрированной системы программирования. Проверить правильность выполнения программ на макете, продемонстрировать результаты преподавателю.
Работа №5
ЦИФРОВЫЕ СИСТЕМЫ НА БАЗЕ МИКРОКОНТРОЛЛЕРА ATmega128:
реализация таймерных функций
Цель работы: изучение функционирования таймеров/счетчиков микроконтроллера ATmega128, получение практических навыков программирования микроконтроллерных систем для работы в реальном масштабе времени.
Введение
Микроконтроллер ATmega128 имеет четыре таймера/счетчика: два 8-разрядных Таймер 0, Таймер 2 и два 16-разрядных Таймер1, Таймер 3. Таймер 0, в дополнение к обычному режиму, может тактироваться асинхронно от внешнего генератора. Этот генератор оптимизирован под использование кварцевого кристалла на частоту 32768 кГц, что позволяет использовать Таймер 0 как часы реального времени (Real Time Clock - RTC).
8-разрядные таймеры/счетчики Т/С0 и Т/С2.
Таймеры/счетчики T/C0 и T/C2 предназначены для отсчета и измерения временных интервалов, генерации сигналов с широтно-импульсной модуляцией (ШИМ), а также как счетчик внешних событий.
Таймеры/счетчики T/C0 и T/C2 отличаются только наличием асинхронного режима работы в таймере/счетчике T/C0.
В состав таймеров/счетчиков входят 3 регистра ввода/вывода:
счетный регистр TCNT0 (TCNT2)
регистр управления TCCR0 (TCCR2)
регистр сравнения OCR0 (OCR2)
регистр ASSR в таймере/счетчике T/C0 для управления в асинхронном режиме.
В регистре флагов прерывания таймеров/счетчиков TIFR хранятся различные флаги состояния (переполнения, совпадения при сравнении и захвата события). Разрешение и запрещение прерываний производится посредством регистра масок прерываний таймеров/счетчиков TIMSK.
Точность и разрешение 8-разрядных таймеров/счетчиков растет с уменьшением коэффициента предварительного деления. Высокий коэффициент предварительного деления удобно использовать при реализации медленных операций или точной синхронизации редко происходящих действий.
Оба таймера/счетчика поддерживают две функции сравнения выхода, используя регистры сравнения выходов OCR0 и OCR2 как источники данных, сравниваемых с содержимым таймеров/счетчиков. В функции сравнения выхода входит очистка счетчика при совпадении, а также формирование, при совпадении, активных сигналов на выводах PB4(OC0/PWM0) и PB7(OC2/PWM2).
Таймеры/счетчики 0 и 2 можно использовать как 8-разрядные широтно-импульсные модуляторы. В этом режиме таймер/счетчик, совместно с регистром совпадения выхода, работает как автономный ШИМ с центрированными импульсами без ложных выбросов.
Регистр состояния асинхронного режима таймера/счетчика T/C0 - ASSR
|
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$30 ($50) |
- |
- |
- |
- |
AS0 |
TCN0UB |
OCR0UB |
TCR0UB |
TCCR0 |
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Разряд 4-7 - Зарезервированные биты
Разряд 3 – AS0: Разрешение асинхронного режима таймера/счетчика T/C0. При установленном (= 1) бите на вход предделителя таймера/счетчика 0 поступают импульсы с внешнего кварцевого генератора. В этом режиме выводы TOSC1 и TOSC2 используются для подключения кварцевого резонатора.
Разряд 2 – TCN0UB: Состояние обновления регистра TCNT0
Разряд 1 – OCR0UB: Состояние обновления регистра OCRT0
Разряд 0 – TCR0UB: Состояние обновления регистра TCRT0
Регистр управления таймером/счетчиком - TCCR0
|
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$33 ($53) |
FOC0 |
WGM00 |
COM01 |
COM00 |
WGM01 |
CS02 |
CS01 |
CS00 |
TCCR0 |
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$25 ($45) |
FOC2 |
WGM20 |
COM21 |
COM20 |
WGM21 |
CS22 |
CS21 |
CS20 |
TCCR2 |
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|