lab22
.docxФедеральное Государственное Бюджетное Образовательное Учреждение Высшего Профессионального Образования
"Омский Государственный Технический Университет"
Кафедра "Автоматизация и робототехника"
Отчет о выполнении лабораторной работы №2
по дисциплине : "Микропроцессорные системы управления"
Выполнил:
студент гр. А-518
Тезин А.О.
Проверил:
ст. преподаватель:
Клевакин В. В.
Омск 2012
Цель работы:
Изучение программирования ввода/вывода информации в МК в режиме программного управления портами портами.
Используемые команды:
Ldi Rd,K- загрузка константы в РОН
Out A,Rr – пересылка из РОН в РВВ
Ser Rd – установка всех разрядов РОН
Rcall – относительный выхов программы
Sbr Rd,k- установка разрядов в РОН
Brne k- переход по «не равно»
Cbi A,b – сброс разряда РВВ 0
Sbi A,b – установка разряда РВВ 1
In Rd,A – пересылка из РВВ в РОН
AND Rd,Rr – «Логическое И» двух РОН
Ход работы:
-
Создаем проект в AVR Studio.
Для создания нового проекта необходимо последовательно выбрать Project - New project. В окне Project Type выбираем ATMEL AVR Assembler, вводим имя проекта и его место расположения. Затем выбираем отладочную платформу (виртуальный отладчик) -AVR Simulator и модель микроконтроллера (AT90S8515).
-
Набираем текст программы на Ассемблере
.include"8515def.inc"
.include "MyLibSym.inc"
.cseg
.org 0
rjmp init
.org $0d
.include "MyLibPP.inc"
init:
ldi temp, low(RAMEND)
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp
rcall Config_Port
main:
clr temp
mov out ddra, temp
mov porta, temp
cbi portc, adr1
sbi portc, adr0
cbi portd, RD
in inl, pina
sbi portd, RD
cbi portc, adr0
sbi portc, adr1
cbi portd, RD
in inh, pina
sbi portd, RD
ser temp
mov ddra, temp
mov outh, inh
mov outl, inl
cbi portc, adr1
sbi portc, adr0
mov porta, outl
cbi portd, WR
sbi portd, WR
cbi portc, adr0
sbi portc, adr1
mov porta, outh
cbi portd, WR
sbi portd, WR
rcall delay1
rjmp main
; Содержание файла MyLibSym.inc
.equ adr0 =6
.equ adr1 =7
.equ WR =6
.equ RD =7
.def inl =r3
.def inh =r4
.def outl =r5
.def outh =r6
.def temp =r16
.def temp1 =r17
.def temp2 =r18
; Содержание файла MyLibPP.inc
Config_Port:
ser temp
mov DDRA, temp
ldi temp, (1<<adr0)+(1<<adr1)
out ddrc, temp
ldi temp, (1<<WR)+(1<<RD)
out ddrd, temp
out portd, temp
ret
delay1:
ldi temp2, 25
d0: ser temp1
d1: ldi temp, 209
d2: dec temp
brne d2
dec temp1
brne d1
dec temp2
brne d0
ret
-
Исправляем ошибки в программе при отладке
Для компиляции проекта необходимо последовательно нажать Build - Build или F7.
Программа выдает сообщение об ошибках (рис.1, рис 2)
Рис.1 сообщение об ошибках в проекте
Рис. 2 сообщения об ошибках в проекте
При нажатии на сообщение об ошибке программа показывает место, содержащее ее.
Код программы после исправления ошибок:
.include"8515def.inc"
.include "MyLibSym.inc"
.cseg
.org 0
rjmp init
.org $0d
.include "MyLibPP.inc"
init:
ldi temp, low(RAMEND)
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp
rcall Config_Port
main:
clr temp
out ddra, temp
out porta, temp
cbi portc, adr1
sbi portc, adr0
cbi portd, RD
in inl, pina
sbi portd, RD
cbi portc, adr0
sbi portc, adr1
cbi portd, RD
in inh, pina
sbi portd, RD
ser temp
out ddra, temp
mov outh, inh
mov outl, inl
cbi portc, adr1
sbi portc, adr0
out porta, outl
cbi portd, WR
sbi portd, WR
cbi portc, adr0
sbi portc, adr1
out porta, outh
cbi portd, WR
sbi portd, WR
rcall delay1
rjmp main
; Содержание файла MyLibSym.inc
; назначение символических имен
.equ adr0 =6
.equ adr1 =7
.equ WR =6
.equ RD =7
.def inl =r3
.def inh =r4
.def outl =r5
.def outh =r6
.def temp =r16
.def temp1 =r17
.def temp2 =r18
; Содержание файла MyLibPP.inc
Config_Port:
ser temp
out DDRA, temp
ldi temp, (1<<adr0)+(1<<adr1)
out ddrc, temp
ldi temp, (1<<WR)+(1<<RD)
out ddrd, temp
out portd, temp
ret
delay1:
ldi temp2, 25
d0: ser temp1
d1: ldi temp, 209
d2: dec temp
brne d2
dec temp1
brne d1
dec temp2
brne d0
ret
Запускаем компиляцию проекта (рис. 3)
Рис. 3 Сообщение об успешном завершении компиляции
-
Запускаем программу в пошаговом режиме
Для этого выбираем Debug - Start Debugging. Затем нажимая на F11 или F10 можно в пошаговом режиме проверить правильность выполнения программы.
Результат можно посмотреть в окне I/O View. Изменение содержимого регистров можно посмотреть во вкладке Processor - Registers, или View - register, или на панели инструментов выбрать Toggle Watch Windows и ввести имя переменной для просмотра.
-
Изменяем существующую программу таким образом, чтобы реализовать процедуру перемножения содержимого двух регистров.
.include"8515def.inc"
.include "MyLibSym.inc"
.cseg
.org 0
rjmp init
.org $0d
.include "MyLibPP.inc"
init:
ldi temp, low(RAMEND)
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp
rcall Config_Port
main:
clr temp
out ddra, temp
out porta, temp
cbi portc, adr1
sbi portc, adr0
cbi portd, RD
in inl, pina
sbi portd, RD
cbi portc, adr0
sbi portc, adr1
cbi portd, RD
in inh, pina
sbi portd, RD
ser temp
out ddra, temp
and inl, inh
mov outl, inl
cbi portc, adr1
sbi portc, adr0
out porta, outl
cbi portd, WR
sbi portd, WR
rcall delay1
rjmp main
; Содержание файла MyLibSym.inc
.equ adr0 =6
.equ adr1 =7
.equ WR =6
.equ RD =7
.def inl =r3
.def inh =r4
.def outl =r5
.def temp =r16
.def temp1 =r17
.def temp2 =r18
; Содержание файла MyLibPP.inc
Config_Port:
ser temp
out DDRA, temp
ldi temp, (1<<adr0)+(1<<adr1)
out ddrc, temp
ldi temp, (1<<WR)+(1<<RD)
out ddrd, temp
out portd, temp
ret
delay1:
ldi temp2, 25
d0: ser temp1
d1: ldi temp, 209
d2: dec temp
brne d2
dec temp1
brne d1
dec temp2
brne d0
ret
Заключение: В ходе выполнения лабораторной работы была изучена методика программирования ввода/вывода информации в МК в режиме программного управления портами AVR Studio. Успешно был реализован алгоритм заданной программы.