Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦМПУ / Новая папка / Лаб3ЦМПУ.docx
Скачиваний:
17
Добавлен:
16.04.2015
Размер:
325.85 Кб
Скачать

Программа:

.include "C:\VMLAB\include\m128def.inc"

.def temp0 = r16

.def temp2 = r18

reset:

rjmp start

reti ; Addr $01

reti ; Addr $02

reti ; Addr $03

reti ; Addr $04

reti ; Addr $05

reti ; Addr $06 Use 'rjmp myVector'

reti ; Addr $07 to define a interrupt vector

reti ; Addr $08

reti ; Addr $09

reti ; Addr $0A

reti ; Addr $0B This is just an example

reti ; Addr $0C Not all MCUs have the same

reti ; Addr $0D number of interrupt vectors

reti ; Addr $0E

reti ; Addr $0F

reti ; Addr $10

start:

ldi temp0,$13 ;Загрузить в temp0 $13

ldi temp2,$01 ;Загрузить в temp1 $01

SBRC temp0, 7 ;Проверяет состояние разряда

inc temp2 ;Если в разряде 0, след команда пропустится

SBRC temp0, 6 ;Если в разряде 1,

inc temp2 ;посчитается место

SBRC temp0, 5

inc temp2

SBRC temp0, 4

inc temp2

SBRC temp0, 3

inc temp2

SBRC temp0, 2

inc temp2

SBRC temp0, 1

inc temp2

SBRC temp0, 0

inc temp2

.exit

Описание команд:

LDI Rd,K (загрузка константы в РОН) – загружает 8-разрядное число в регистр общего назначения Rd. Данная команда применима только к старшей половине РОН (адреса 16…31).

SBRC Rr,b (пропустить команду, если разряд РОН сброшен) – проверяет состояние разряда b регистра общего назначения Rr. Если разряд сброшен, команда, следующая за SBRC Rr,b, пропускается.

Выполнение программы:

№ вар.

5

Задание

Выполнить непосредственную загрузку из памяти данных по адресу $60.

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

Начало

Подключение файла m128def.inc

.include "C:\VMLAB\include\m128def.inc"";

Описание символьного имени

.def temp0 = r16

Загрузить temp0, значением

ldi temp0,$11

Инициализация стека (старший байт)

out SPH,temp0

Загрузить temp0 в память

sts $60,temp0

Загрузить temp0 в стек

push temp0

Загрузить данные из памяти

lds temp0,$60

Загрузить temp0 из стека

pop temp0

Конец

Листинг программы

.include "C:\VMLAB\include\m128def.inc"";

;Основная программа

.def temp0 = r16;Описание символьного имени

reset:

rjmp start

reti ; Addr $01

reti ; Addr $02

reti ; Addr $03

reti ; Addr $04

reti ; Addr $05

reti ; Addr $06 Use 'rjmp myVector'

reti ; Addr $07 to define a interrupt vector

reti ; Addr $08

reti ; Addr $09

reti ; Addr $0A

reti ; Addr $0B This is just an example

reti ; Addr $0C Not all MCUs have the same

reti ; Addr $0D number of interrupt vectors

reti ; Addr $0E

reti ; Addr $0F

reti ; Addr $10

start:

ldi temp0,$11 ;Загрузить переменные значениям

out SPH,temp0

sts $60,temp0 ;Записать переменные в память по адресу $60

push temp0 ;Поместить temp0 в стек

lds temp0,$60 ;Загрузить данные из памяти с адресом $60

pop temp0 ;Загрузить temp0 из стека

.exit ; Выход из подпрограммы;

Соседние файлы в папке Новая папка