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

mps

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

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

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

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

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

Контрольная работа

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

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

Выполнил: студент группы 2БВМ15025, Иванюк П. Г.

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

Москва 2018

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

Исходная программа на ассемблере по заданию для демонстрации работы микроконтроллера на AVR симуляторе в среде разработки

AVR Studio 4.

;Программа для AVR RISC микроконтроллера по заданию дисциплины МПС в МТУСИ

.device AT90S8515 ;сообщает ассемблеру о типе микроконтроллера

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

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

.org $00 ;устанавливает счётчик адреса в сегменте кода на адрес $00

clr r26 ;устанавливает в r26 0 (младший байт адреса указателя X)

ldi r27,$01 ;заносит в r27 старший байт указателя X

ldi r30,$0A ;заносит в r30 младший байт указателя Z

ldi r31,$01 ;заносит в r31 старший байт указателя Z

ldi r17,$0A ;заносит в r17 (счётчик цикла) число элементов массива

ldi r19,$3A ;загружает в r19 1-й элемент массива

St X+,r19 ;пересылает содержимое r19 в память.

ldi r19,$1D ;

St X+,r19 ;

ldi r19, $23 ;

St X+,r19 ;

ldi r19,$52 ;

St X+,r19 ;

ldi r19,$05 ;

St X+,r19 ;

ldi r19,$37 ;

St X+,r19 ;

ldi r19,$4E ;

St X+,r19 ;

ldi r19,$2C ;

St X+,r19 ;

ldi r19,$3A ;

St X+,r19 ;

ldi r19,$4D ;

St X+,r19 ;

Subi r26,$09 ;восстанавливает в X адрес А0

Cycl:

ld r2,X+ ;пересылает в r2 из памяти i-й элемент массива Ai

Mov r3,r2 ;пересылает Ai в r3 на хранение

Lsl r2 ;удвоение Ai

Add r2,r3 ;вычисление 3Ai

St Z+,r2 ;сохранение Yi в памяти

Dec r17 ;уменьшение счётчика цикла на 1

Brne cycl ;переход к метке cycl, если результат в r17 не равен 0;

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

Данная программа выполняет заполнение памяти SRAM МК произвольными, константными числами. Затем, циклически, выполняет чтение записанных чисел и переписывает их в ячейки SRAM МК по другим адресам.

При прошивке этой программы на реальный МК невозможно визуально наблюдать его работу.

В следующую программу внесены изменения для вывода данных, которые считываются из SRAM в цикле, на внешний, 8-миразрядный порт. Для визуализации работы МК необходимо подключить к его выходному порту восемь светодиодов, которые будут моргать примерно один раз в секунду.

Изменённая программа на ассемблере для демонстрации работы микроконтроллера на реальной схеме.

;Программа для AVR RISC микроконтроллера по заданию дисциплины МПС в МТУСИ

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

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

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

.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 ;Настроить все разряды порта A на выход

out DDRA,x1 ;

ldi x1,$00 ;

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

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

out DDRB,x1 ;

ldi x1,$00 ;

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

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

out DDRC,x1 ;

ldi x1,$00 ;

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

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

out DDRD,x1 ;

ldi x1,$00 ;

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

clr r26 ;устанавливает в r26 0 (младший байт адреса указателя X)

ldi r27,$01 ;заносит в r27 старший байт указателя X

ldi r30,$0A ;заносит в r30 младший байт указателя Z

ldi r31,$01 ;заносит в r31 старший байт указателя Z

ldi r19,$3A ;загружает в r19 1-й элемент массива

St X+,r19 ;пересылает содержимое r19 в память.

ldi r19,$1D ;

St X+,r19 ;

ldi r19, $23 ;

St X+,r19 ;

ldi r19,$52 ;

St X+,r19 ;

ldi r19,$05 ;

St X+,r19 ;

ldi r19,$37 ;

St X+,r19 ;

ldi r19,$4E ;

St X+,r19 ;

ldi r19,$2C ;

St X+,r19 ;

ldi r19,$3A ;

St X+,r19 ;

ldi r19,$4D ;

St X+,r19 ;

Subi r26,$09 ;восстанавливает в X адрес А0

main:

ldi r17,$0A ;заносит в r17 (счётчик цикла) число элементов массива

Cycl:

ld r2,X+ ;пересылает в r2 из памяти i-й элемент массива Ai

Mov r3,r2 ;пересылает Ai в r3 на хранение

Lsl r2 ;удвоение Ai

Add r2,r3 ;вычисление 3Ai

St Z+,r2 ;сохранение Yi в памяти

out PORTA,r2 ;Вывести записанный в SRAM байт в порт A

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

Dec r17 ;уменьшение счётчика цикла на 1

Brne cycl ;переход к метке cycl, если результат в r17 не равен 0;

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 ;выход из программы

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