микропроцессорные системы

3 курс 1 семестр
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 306
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

микропроцессорные системы

Сообщение Артём Мамзиков » Вт апр 02, 2019 18:02 #1

Задание сделать Контрольную работу и тесты на сайте
Программа AVRStudio 4.18 мега 16
Архив 400руб
Содержимое архива
mikcro.procarx.jpg
содержимое архива 1
mikcro.procarx1.jpg
содержимое архива 2
1. Задание: Занести в EEPROM с нулевого адреса подряд восемь чисел (числа будут указаны). При нажатии на нулевую кнопку вывести число записанное в EEPROM по нулевому адресу, при нажатии на 1-ю кнопку – из 1-ой ячейки и т.д.

Решение
Программа на языке ассемблера:
.include <m16def.inc> ;Подключение файла для м.к. ATmega1.6
.cseg ;Переход в сегмент программного кода
.org $0000 ;Установка адреса
jmp Start ;Переход на начало основной программы
Start:
cli ;Глобальное запрещение прерываний!
;Отмена работы сторожевого таймера:
wdr
ldi R16, 0b00011000
out WDTCR, R16 ;Установка битов WDTE и WDE в EEAR 2 30рев. WDTCR
ldi R16, 0b00010000
out WDTCR, R16 ;Очистка бита WDE в рее. WDTCR
;Установка указания стека:
ldi R16, low (RamEnd) ;Константа RamEnd = 0x045f u
ldi R17, High(RamEnd) ;Определена в m16def.inc
out SPL, R16 ;SPL и SPH - регистры указателя стека
out SPH, R17 ;Адреса SPL и SPH определены в m16def.inc.
;Занести в EEPROM с нулевого адреса подряд восемь чисел (числа будут указаны).
;При нажатии на нулевую кнопку вывести число записанное в EEPROM по нулевому адресу,
;при нажатии на 1-ю кнопку – из 1-ой ячейки и т.д.
;sei ; разрешение прерываний
;Настройка порта А на ввод
ldi R16, 0b00000000
out DDRA, R16
;Порт В на вывод данных
ldi R16, 0b11111111
out DDRB, R16
;Настройка EEPROM
ldi R16, 0b00000001
out EEARH, R16
out EEARL, R16
ldi R17, 0b0100
out EECR, R17
ldi R18, 0xA0
main:
loop_EEPROM:
out EEDR, R18
ldi R17, 0b0100
out EECR, R17
out EEARL, R16
ldi R17, 0b0110
out EECR, R17
nop
nop
inc R18
lsl R16
cpi R16, 0b10000000
breq Loop
jmp main
Loop:
in R0, PORTA
out EEARL, R0
ldi R25, 1
out EECR, R25
in R1, EEDR
out PORTB, R1
nop
jmp Loop
Последний раз редактировалось Артём Мамзиков Вт апр 02, 2019 18:25, всего редактировалось 1 раз.

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 306
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

микропроцессорные системы

Сообщение Артём Мамзиков » Вт апр 02, 2019 18:19 #2

Задание: Установить указатель стека на ячейку памяти с адресом $045F. Используя стек скопировать 10 байт данных из области памяти с начальным адресом $0080 в область памяти с начальным адресом $0180.
Решение
mikcro.proc1.jpg
1
Рис.1 Блок-схема алгоритма

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

.include "m16def.inc" ; Подключение файла для м.к. ATmega16

.cseg ; Переход в сегмент программного кода

cli ; Отмена работы сторожевого таймера
wdr
ldi R16, 0b00011000
out WDTCR, R16 ; Установка битов WDTOE и WDE
ldi R16, 0b00010000
out WDTCR, R16 ; Очистка бита WDE в рег. WDTCR

//установка указателя стека
ldi R16, Low (RamEnd) ; Константа RamEnd = 0х045f
ldi R17, High (RamEnd) ; Определена в m16def.inc
out SPL, R16 ; SPL и SPH - регистры указателя стека
out SPH, R17 ; Адреса SPL и SPH определены в m16def.inc

//Установка порта D - PD6 на вывод сигнала
ldi R16, 0b01000000
out DDRD, R16 ;Настройка PD6 на вывод сигнала

jmp wait
wait:

//Проверка нажания первой кнопки
in r17,pinb ; чтение порта
bst r17,1 ; сохранить бит из регистра R17
brts wantleft ; перейти если флаг Т увстановлен

//Проверка нажания второй кнопки
in r17,pinb
bst r17,2
brts wantright

//Проверка отпускания кнопки
in r17,pinb
cpi r17,0b00000000
breq zero
jmp wait

//выполнение только одной операции за нажатие
wantleft:
left: //Сдвиг влево
rol r16 ; Циклический сдвиг влево регистра r16
out portd,r16 ; Запить в порт D содержимого регистра r16
ldi r18,$25 ; загрузить константу
jmp wait
cpi r18,$24 ; сравнить с константой
breq left ; перейти если равно
jmp wait
wantright:
right: //Сдвиг вправо
ror r16 ; Циклический сдвиг вправо регистра r16
out portd,r16 ; Запить в порт D содержимого регистра r16
ldi r18,$25 ; загрузить константу
jmp wait
cpi r18,$24 ; сравнить с константой
breq right ; перейти если равно
jmp wait

//Обнуление регистра отпущеной кнопки
zero:
ldi r18,$24 ; загрузить константу
jmp wait
.exit

Диалоговые окна, отображающие работу программы

Устанавливаем бит в порт B(«Нажимаем 1-ую кнопку»)
mikcro.proc2.jpg
2

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 306
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

микропроцессорные системы

Сообщение Артём Мамзиков » Вт апр 02, 2019 18:22 #3

Тесты скрины
mikcro.proc3.jpg
тесты

Ответить Вложения 5

Вернуться в «микропроцессорные системы»