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

mps6

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

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

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

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

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

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

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

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

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

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

Москва 2018

Цель работы:

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

Задание № 6.

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

- вводит m однобайтных слов;

- формирует для каждого слова признак чётности;

- заносит его в n – й (n = 7) разряд того же слова.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.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 ZL,low($010A) ;Занести в r30 младший байт указателя Z

ldi ZH,high($010A) ;Занести в r31 старший байт указателя Z

ldi temp,$6A ;Ввести в память SRAM n однобайтных чисел

st X+,temp ;через временный регистр

ldi temp,$04 ;

st X+,temp ;

ldi temp,$12 ;

st X+,temp ;

ldi temp,$4C ;

st X+,temp ;

ldi temp,$55 ;

st X+,temp ;

ldi temp,$37 ;

st X+,temp ;

ldi temp,$77 ;

st X+,temp ;

ldi temp,$7F ;

st X+,temp ;

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

ldi temp,$80 ;Задать константу для операции сложения по модулю (XOR)

ldi number,8 ;Занести в r25 счётчик количества байт

common:

mov parity,temp ;Задать исходное значение чётности равное единице

ldi count,8 ;Занести в r17 счётчик цикла количество бит в байте

ld binary,X+ ;

mov buffer,binary ;

cycle:

clc ;Сбросить флаг переноса

lsl binary ;Сдвинуть влево

brcc cycle2 ;

eor parity,temp ;

cycle2:

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

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

or buffer,parity ;

st Z+,buffer ;

dec number ;

brne common ;

main:

subi ZL,8 ;Восстановить в Z адрес $010A

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

output:

ld temp,Z+ ;Прочитать цифру из SRAM во временный регистр

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

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

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

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

brne output ;Переход к метке output, если результат в 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 ;Выход из программы

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

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