close

Вход

Забыли?

вход по аккаунту

?

мпс лаб2

код для вставкиСкачать
 федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
"Вологодский государственный технический университет"
"Электроэнергетический факультет"
"Управляющие и вычислительные системы"
ЛАБОРАТОРНАЯ РАБОТА №2
Дисциплина: "Микропроцессорные системы"
Наименование темы: "Изучение системы команд и директив AVR Assembler"
Преподаватель Кузнецов М.С.
Выполнил (а) студент Емельянов Иван
Чешков Роман Группа, курс ЭВ-51 Вологда
2013 г.
Лабораторная работа №2:
Задание 1: Зарезервировать в памяти данных один байт. Записать в зарезервированную ячейку памяти число $7D.
Задание 2: Зарезервировать в памяти данных двенадцать байт, начиная с адреса $0100. Записать в зарезервированные ячейки памяти числа от $00 до $0B (задание выполнить в виде подпрограммы).
Задание 3: Зарезервировать в памяти данных две области объемом по $10 байт. Записать в одну из областей любые числа. Переписать данные из одной области в другую. Запретить листинг программы задания №3.
Задание 4: Написать макрос, выполняющий сложение и вычитание двух переменных и помещающий результат в ячейки памяти данных. Адреса исходных переменных памяти данных указать в качестве параметров макроса.
Задание 5: В сегменте программного кода Flash-памяти микроконтроллера, начиная с адреса $0200, загрузить числовые константы $01, $02, $03, ... $0F.
Начиная с адреса $40, разместить числовые константы $21, $22, $23, ... $2F в сегменте энергонезависимой памяти EEPROM микроконтроллера.
Задание 6: В регистр R16, R17 и R20 загрузить любые числа. Если число в регистре R20 больше $80, то в регистр R0 поместить число $1F, в противном случае поместить в регистре R1 число $50. Если третий бит R20 равен 0, то помесить в R18 сумму регистров R16 и R17, в противном случае в R19 поместить разность R16 и R17.
;Лабораторная работа №2. ;Микропроцессорные системы.
;
.include "m16def.inc" ;Подключение файла для м.к. ATmega16
;для задания 1
.dseg
MyVarTask1: .byte 1
;для задания 2
.org $100
TableTask2: .byte 12
.org $120
TableTask2A: .byte 12
;для задания 3
.org $140
TableTask3: .byte $10
.org $160
TableTask3A: .byte $10
.cseg ;Переход в сегмент программного кода
.org $0000 ;Установка адреса
jmp Start ;Переход на начало основной программы
;
;В следующих лабораторных работах по адресам с $0002
;по INT_VECTORS_SIZE будут находиться вектора прерываний!
;
;Константа INT_VECTORS_SIZE = 42($2A) и определена в m16def.inc!
.org INT_VECTORS_SIZE ;Установка адреса
Start:
cli ;Глобальное запрещение прерываний!
;Отмена работы сторожевого таймера:
wdr
ldi R16, 0b00011000
out WDTCR, R16 ;Установка битов WDTOE и WDE в рег. WDTCR
ldi R16, 0b00010000 out WDTCR, R16 ;Очистка бита WDE в рег. WDTCR
;Установка указателя стека:
ldi R16, Low (RamEnd) ;Константа RamEnd = 0x045f и
ldi R17, High(RamEnd) ;определена в m16def.inc
out SPL, R16 ;SPL и SPH - регистры указателя стека. out SPH, R17 ;Адреса SPL и SPH определены в m16def.inc.
;Отмена работы сторожевого таймера и установка указателя стека
;необходимы для всех последующих программ!
;
;Задание №1:
ldi R16, $7D
sts MyVarTask1, R16
;Задание №2:
ldi R16, $00
sts TableTask2+0, R16
ldi R16, $01
sts TableTask2+1, R16
ldi R16, $02
sts TableTask2+2, R16
ldi R16, $03
sts TableTask2+3, R16
ldi R16, $04
sts TableTask2+4, R16
ldi R16, $05
sts TableTask2+5, R16
ldi R16, $06
sts TableTask2+6, R16
ldi R16, $07
sts TableTask2+7, R16
ldi R16, $08
sts TableTask2+8, R16
ldi R16, $09
sts TableTask2+9, R16
ldi R16, $0A
sts TableTask2+10, R16
ldi R16, $0B
sts TableTask2+11, R16
;Задание №2 (цикл в подпрограмме)
call MyFunc1
nop
;Задание №3:
ldi XL, Low(TableTask3)
ldi XH, High(TableTask3)
ldi R16, $00
CycleTask3:
cpi R16, 16
brcc EndTask3
st X, R16
adiw XH:XL, 1
inc R16
jmp CycleTask3
EndTask3:
ldi YL, Low (TableTask3A)
ldi YH, High(TableTask3A)
ldi XL, Low (TableTask3) ;$40
ldi XH, High(TableTask3) ;$01
ldi R16, $00
CycleTask3A:
cpi R16, 16
brcc EndTask3A
ld R17, X+
st Y+, R17
inc R16
jmp CycleTask3A
EndTask3A:
;Задание №4:
.macro Task4
lds R16, @0
lds R17, @1
mov R18, R16
mov R19, R17
add R18, R19
sub R16, R17
sts @2, R18
sts @3, R16
.endmacro
ldi R16, 18
sts $180,R16
ldi R17, 10
sts $181,R17
Task4 $180, $181, $182, $183
;Задание №5:
.cseg
.org $200
my_const1: .db 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F
.eseg
.org $40
my_const2: .db $21, $22, $23, $24, $25, $26, $27, $28, $29, $2A, $2B, $2C, $2D, $2E, $2F
.cseg
;Задание №6:
ldi R16, 18
ldi R17, 18
ldi R20, 200
mov R19, R20
cpi R20, $80
brcs EndTask6
breq EndTask6_2
ldi R20, $1F ;R20>$80
mov R0, R20
jmp EndTask6_1
EndTask6:
EndTask6_2:
ldi R20, $50 ;R20<=$80
mov R1, R20
EndTask6_1:
andi R19, 0b00000100
cpi R19, $0
brne EndTask6_3
sub R16, R17 ;Третий бит равен нулю
mov R19, R16
jmp EndTask6_4
EndTask6_3:
add R16, R17 ;Третий бит не равен нулю
mov R18, R16
EndTask6_4:
;Бесконечный цикл:
Cycle: ;При завершения лабораторной работы необходимо
nop ;зациклить программу!!!
nop
rjmp Cycle
;
;
;Подпрограмма для задания №2
MyFunc1:
ldi XL, Low(TableTask2A)
ldi XH, High(TableTask2A)
ldi R16, $00
CycleTask2:
cpi R16, 12
brcc EndTask2
st X, R16
adiw XH:XL, 1
inc R16
jmp CycleTask2
EndTask2:
ret
Вывод: В ходе лабораторной работы была изучена система команд и директив AVR Assembler, а также выполнены практические задания, с помощью которых закрепили теоретические знания.
Документ
Категория
Рефераты
Просмотров
62
Размер файла
47 Кб
Теги
лаб2, мпс
1/--страниц
Пожаловаться на содержимое документа