Добавил:
piter-i.narod.ru Программист ПЛИС Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

mps7

.docx
Скачиваний:
9
Добавлен:
24.06.2018
Размер:
171.52 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Федеральное Государственное образовательное бюджетное учреждение высшего профессионального образования (ФГОБУ ВПО)

Московский технический университет связи и информатики

Кафедра математической кибернетики и информационных технологий

Курсовая работа

по дисциплине:

«Микропроцессорные устройства»

Выполнил: студент группы

Проверил: преподаватель Кириллова Л. В.

Москва 2018

Цель работы:

Приобретение практических навыков проектирования цифровых устройств на основе микроконтроллеров.

Задание № 7.

Требуется разработать устройство, которое реализует следующие функции:

- преобразует, хранящиеся в памяти, числа в упакованном формате, в ASCII код;

- выводит в порт.

Программа выполнена на языке ассемблер в среде разработки AVR Studio 4.

Программа выполняет заполнение блока памяти SRAM микроконтроллера числами в упакованном BCD - формате. В цикле выполняет чтение записанных чисел, преобразует в ASCII код сначала старшую часть числа и выводит его на внешний 8-миразрядный порт А микроконтроллера и удерживает его на внешнем порту примерно на одну секунду. Затем преобразует в ASCII код младшую часть числа и также выводит его на внешний 8-миразрядный порт А микроконтроллера также с задержкой отображения.

Для визуализации работы микроконтроллера необходимо подключить к его внешнему порту А восемь светодиодов, которые будут моргать примерно один раз в секунду.

Алгоритм программы, реализующей заданные функции

Программа на языке ассемблер

;Программа для AVR RISC микроконтроллера по заданию 7

;дисциплины Микропроцессорные системы в МТУСИ

.nolist ;Отключить вывод в файл списка

.include "8515def.inc" ;Подключает файл с названиями всех регистров МК

.list ;Включить вывод в файл списка

.def buffer = r21 ;Присвоить регистру r21 имя buffer

.def count = r17 ;Присвоить регистру r22 имя count

.def temp = r19 ;Присвоить регистру r22 имя temp

.def x1 = r22 ;Присвоить регистру r22 имя x1

.def loop1 = r16 ;Младший регистр счётчика задержки

.def loop2 = r18 ;Средний регистр счётчика задержки

.def loop3 = r20 ;Старший регистр счётчика задержки

.cseg ;Начало сегмента кода

.org $000 ;Установить счётчик адреса в сегменте кода на адрес $000

rjmp RESET ;Обработчик вектора сброса

reti ;rjmp EXT_INT0 ;Обработчик IRQ0

reti ;rjmp EXT_INT1 ;Обработчик IRQ1

reti ;rjmp TIM1_CAPT ;Обработчик таймер1 захват

reti ;rjmp TIM1_COMPA ;Обработчик таймер1 сравнение в канале А

reti ;rjmp TIM1_COMPB ;Обработчик таймер1 сравнение в канале В

reti ;rjmp TIM1_OVF ;Обработчик по переполнению в таймер1

reti ;rjmp TIM0_OVF ;Обработчик по переполнению в таймер0

reti ;rjmp SPI_STC ;Обработчик по завершению передачи по SPI

reti ;rjmp UART_RXC ;Обработчик по завершению приёма UART

reti ;rjmp UART_DRE ;Обработчик если пустой UDR

reti ;rjmp UART_TXC ;Обработчик по завершению передачи UART

reti ;rjmp ANA_COMP ;Обработчик аналогового компаратора

RESET:

ldi YH,high(RAMEND) ;Установить вершину стека на конец SRAM

out SPH,YH ;

ldi YL,low(RAMEND) ;

out SPL,YL ;

ldi x1,$FF ;

out DDRA,x1 ;Настроить все разряды порта A на выход

out DDRB,x1 ;Настроить все разряды порта B на выход

out DDRC,x1 ;Настроить все разряды порта C на выход

out DDRD,x1 ;Настроить все разряды порта D на выход

ldi x1,$00 ;

out PORTA,x1 ;Все разряды порта A выключены

out PORTB,x1 ;Все разряды порта B выключены

out PORTC,x1 ;Все разряды порта C выключены

out PORTD,x1 ;Все разряды порта D выключены

ldi XH,high($0100) ;Занести в r27 старший байт указателя X

ldi XL,low($0100) ;Занести в r26 младший байт адреса указателя X

ldi temp,$01 ;Ввести в память SRAM n произвольных чисел

st X+,temp ;в упакованном формате через временный регистр

ldi temp,$23 ;

st X+,temp ;

ldi temp, $45 ;

st X+,temp ;

ldi temp,$67 ;

st X+,temp ;

ldi temp,$89 ;

st X+,temp ;

subi XL,5 ;Восстановить в X адрес $0000

main:

ldi count,5 ;Заности в r17 (счётчик цикла) число элементов массива

cycle:

ld temp,X+ ;Пересылать в r2 из первого блока памяти первую цифру

mov buffer,temp ;Сохранить считанное число в дополнительном регистре

swap temp ;Перености первую цифру из старшей тетрады в младшую

andi temp,$0F ;Выделить младшую тетраду

ori temp,$30 ;Преобразовать цифру в ASCII код

out PORTA,temp ;Вывести полученную цифру в порт A

nop ;Дополнительный такт чтобы данные появились на выходе

rcall delay ;Выполнить задержку в одну секунду

andi buffer,$0F ;Выделить младшую тетраду

ori buffer,$30 ;Преобразовать цифру в ASCII код

out PORTA,buffer ;Вывести полученную цифру в порт A

nop ;Дополнительный такт чтобы данные появились на выходе

rcall delay ;Выполнить задержку в одну секунду

dec count ;Уменьшить счётчик цикла на 1

brne cycle ;Переход к метке cycle, если результат в r17 не равен 0

subi XL,5 ;Восстановить в X адрес $0100

rjmp main ;Повтор вывода в порт А пока включено электропитание

delay:

ldi loop1,6 ;Цикл задержки = 1,000637 секунды при f = 1 мГц

z1:

ldi loop2,218 ;

z2:

ldi loop3,254 ;

z3:

dec loop3 ;

brne z3 ;

dec loop2 ;

brne z2 ;

dec loop1 ;

brne z1 ;

ret ;выход из программы

Принципиальная схема микроконтроллерного устройства

Соседние файлы в предмете Микропроцессорные системы