МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
ДЕРЖАВНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Побудова інфрачервоних детекторів руху на AVR-мікроконтролерах
Лабораторна робота № 3
З курсу «Мікропроцесорні пристрої»
Львів 2010
Мета роботи – ознайомитись з побудовою інфрачервоних детекторів руху і їх програмно апаратною реалізацією на AVR-мікроконтролерах.
ЗАВДАННЯ
Домашня підготовка до роботи
1.Вивчити теоретичний матеріал.
2.Вивчити основні властивості МК необхідні для виконання лабораторної роботи.
3.Підготувати програму функціонування охоронної системи
Виконати в лабораторії
1.Створити проект в AVR Studio, ввести свою програму, провести її асемблювання.
2.В режимі покрокової відладки переконатися в правильності роботи програми.
3.Відкрити файл-схему у програмі Proteus, підключити до МК hex-файл.
4.Запустити режим симуляції схеми та перевірити правильність функціонування охоронної системи у всіх режимах роботи.
ТЕКСТ ПРОГРАМИ
.include "2313def.inc"
.def temp = r16
.def temp2 = r20
.equ LED = 1
.equ DOUT = 0
.equ SCLK = 1
.equ CS = 2
.equ SHDN = 3
.def Delay_b1 = r17;
.def Delay_b2 = r18;
.def Delay_b3 = r19;
.def Result_l=R21
.def Result_h=R22
.equ T_Scan = 1000
.equ T_Led =99900
.equ T_Start = 49
.equ N = 2000;
.equ V_N = 0x0339
.equ V_P = 0x4511
.cseg
;--адреси переривань---
.org 0
rjmp init;
.org 0x004
rjmp Timer;
;--початок виконання програми--
init:
ldi temp, low(RAMEND);стек в кінець
out SPL, temp
;налаштування портів на ввід і вивід
sbi DDRD, LED
sbi PORTD, LED
clr temp
ldi temp,(1<<SCLK)+(1<<CS)+(1<<SHDN)+(0<<DOUT);налаштування виходів та входу для АЦП
out DDRB, temp;
ldi temp,(0<<SCLK)+(1<<CS)+(0<<SHDN)+(0<<DOUT);налаштування...
out PORTB,temp;стану виходів для АЦП та непіддягування резистора!
cli;заблокувати переривання
ldi temp, high(N)
out OCR1AH, temp;завантажуємо число для порівняння...
ldi temp, low(N)
out OCR1AL, temp;у регістр порівняння таймера
ldi temp, (1<<OCIE1A);дозвіл переривання при співпадінні...
out TIMSK, temp;регістру із числом.
ldi temp, (1<<CTC1)+(0<<CS12)+(0<<CS11)+(1<<CS10);скид тамера лічильника при спрацюванні...
out TCCR1B, temp;і коефіцієнт ділення =1.
ldi temp, (1<<SE);дозвіл на режим сну.
out MCUCR, temp
wait:
sei;дозволити переривання
;sleep ;сон)
nop
rjmp wait;
;обробка переривання від таймера
;-------------------------------
Timer:
ldi temp, (0<<CS12)+(0<<CS11)+(0<<CS10);тамер зупинено.
out TCCR1B, temp;
rcall ACP;
ldi temp, low(V_P); якщо результат...
ldi temp2, high(V_P); більший за задане...
sub temp, result_l; число то...
sbc temp2, result_h; переходимо до сирени.
brcs Alarm
ldi temp, low(V_N); якщо результат...
ldi temp2, high(V_N); менший за задане...
sub temp, result_l; число то...
sbc temp2, result_h; переходимо до сирени.
brsh Alarm
sbi PORTD, LED; інакше залишаємо діод без змін
rjmp end; кінець обробки переривання.
Alarm:
cbi PORTD, LED; вмикаємо СД.
ldi Delay_b1, low(T_Led)
ldi Delay_b2, high(T_Led)
ldi Delay_b3, byte3(T_Led)
rcall Delay; затримка свічення СД.
sbi PORTD, LED; вимикаємо СД.
end:
ldi temp, (1<<CTC1)+(0<<CS12)+(0<<CS11)+(1<<CS10);налаштування таймера знову на роботу...
out TCCR1B, temp; по зрізу
reti;
;--процедура анал цифр зчитування------
ACP:
clr Result_l;очищуємо для запису результату перетворення
clr Result_h;очищуємо для запису результату перетворення
sbi PORTB, SHDN;вмикаємо АЦП
ldi Delay_b1, low(T_Start)
ldi Delay_b2, high(T_Start)
ldi Delay_b3, byte3(T_Start)
rcall Delay;затримка для повного вмикання АЦП
cbi PORTB, CS;запуск перетворення по спадаючому фронту
eoc:
sbis PINB, DOUT;чекаємо коли закінчиться перетворення
rjmp eoc
rcall Bit_Read;читаємо 11 біт результату перетворення
bld result_h,3;запис 11 біту у результат через прапорець t.
rcall Bit_Read;читаємо 10 біт результату перетворення
bld result_h,2;запис 10 біту у результат через прапорець t.
rcall Bit_Read;читаємо 9 біт результату перетворення
bld result_h,1;запис 9 біту у результат через прапорець t.
rcall Bit_Read;читаємо 8 біт результату перетворення
bld result_h,0;запис 8 біту у результат через прапорець t.
rcall Bit_Read;читаємо 7 біт результату перетворення
bld result_l,7;запис 7 біту у результат через прапорець t.
rcall Bit_Read;читаємо 6 біт результату перетворення
bld result_l,6;запис 6 біту у результат через прапорець t.
rcall Bit_Read;читаємо 5 біт результату перетворення
bld result_l,5;запис 5 біту у результат через прапорець t.
rcall Bit_Read;читаємо 4 біт результату перетворення
bld result_l,4;запис 4 біту у результат через прапорець t.
rcall Bit_Read;читаємо 3 біт результату перетворення
bld result_l,3;запис 3 біту у результат через прапорець t.
rcall Bit_Read;читаємо 2 біт результату перетворення
bld result_l,2;запис 2 біту у результат через прапорець t.
rcall Bit_Read;читаємо 1 біт результату перетворення
bld result_l,1;запис 1 біту у результат через прапорець t.
rcall Bit_Read;читаємо 0 біт результату перетворення.
bld result_l,0;запис 0 біту у результат через прапорець t.
sbi PORTB, CS;встановлюємо вихід DOUT у високоімпедансний стан
cbi PORTB, SHDN;вимикаємо АЦП
ret;
;--процедура читання біту і записую його в прапорець t--
Bit_Read:
sbi PORTB, SCLK;запуск тактового імпульсу
nop
nop
nop
cbi PORTB, SCLK;спад тактового імпульсу
nop
nop
in temp, PinB;зчитуєм ПОРТБ в тому й числі біт результату DOUT
bst temp, DOUT;встановлення прапорця t відносно біту DOUT
ret
;--процедура затримки-----
delay:
subi Delay_b1, 1;
sbci Delay_b2, 0;
sbci Delay_b3, 0;
brcc delay;
ret
СХЕМА
ВИСНОВОК
На даній лаболаторній роботі я ознайомився з послідовністю створення та відладки програмно-апаратних засобів на основі мікроконтролерів сімейства AVR в програмах AVR Studio та Proteus 7.