МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра «Захист інформації»
/
Звіт
до лабораторної роботи № 2
на тему:
«Вивчення внутрішніх модулів та режимів роботи
AVR-мікроконтролерів»
з курсу
«Мікропроцесори в системах технічного захисту інформації»
Львів – 2016
Мета роботи − ознайомитись з роботою периферійних модулів (аналогового компатора, EEPROM-пам’яті), системою переривань та внутрішніми режимами роботи AVR-мікроконтролерів. Розширити навики створення та відладки програмно-апаратних засобів на основі мікроконтролерів сімейства AVR в програмах AVR Studio та Proteus 7.
1. Завдання:
Підготувати програму згідно індивідуального завдання у Табл. 1.
Створити проект в AVR Studio, ввести свою програму, провести її асемблювання.
В режимі покрокової відладки переконатися в правильності роботи програми, перевірити дотримання заданих в завдані часових параметрів.
Відкрити файл LR_2.dsn в програмі Proteus, внести зміни у схемі відповідно до свого індивідуального завдання, підключити до МК отриманий в AVR Studio hex-файл.
Запустити режим симуляції схеми та перевірити правильність функціонування охоронної системи у всіх режимах роботи: відсутність спрацювання, спрацювання аналогового давача, спрацювання цифрового давача.
№
Напруга спрацювання аналогового давача Ux, B
Виводи підкл. охоронних шлейфів з цифровими давачами
Тип цифрового давача
Вивід для підкл. світлодіода
Адреса в EEPROM Addr_1
Адреса в EEPROM Addr_2
18
3.5
INI1
НЗМ
PB6
67
109
2. Результат виконання роботи:
Код програми:
; *******************************************
; Автор: ПІБ *
; Дата: 01.09.2010 *
; Версія: 1.0 *
; Ім'я файлу: LR_2.asm *
; Тип МК: AT90S2313 *
; Тактова частота: 7.3728 MГц *
; *******************************************
;
; Параметри системи:
; Рівень спрацювання аналогового давача: 3.5 В
; Тип цифрового давача: НЗМ
; Вивід для підключення цифрового давача: PD3/INT1
; Вивід для підключення світлодіоду: РВ6
; Адреса комірки ЕЕPROM для зберігання кількості спрацювань цифрового давача: 0x43
; Адреса комірки ЕЕPROM для зберігання кількості спрацювань аналогового давача: 0x6D
; Режим пониженого енергоспоживання: Idle
; Напруга живлення: 5 В
;////////////////////////////////////////////////////////////////////////////
.include "2313def.inc"
;////////////////////////////////////////////////////////////////////////////
.def temp = r16 ; Робочий регістр
.def EE_Addr_Reg = r17 ; Регістр зберігання адреси EEPROM
.def EE_Data_Reg = r18 ; Регістр зберігання даних EEPROM
;////////////////////////////////////////////////////////////////////////////
.equ Analog_Addr = 0x43 ; Адреса EEPROM для аналогового давача
.equ Digital_Addr = 0x6D ; Адреса EEPROM для цифрового давача
.equ LED_DDR = DDRB
.equ LED_PORT = PORTB
.equ LED_PIN = PB6
;////////////////////////////////////////////////////////////////////////////
.cseg ; Початок сегменту Flash-пам'яті
.org 0 ; Адреса початку програми
rjmp RESET ; Вектор скиду
reti ; Вектор зовнішнього переривання 0 з виводу PD2
rjmp INT1_EXT ; rjmp INT1_EXT
reti ; rjmp TIM_CAPT1
reti ; rjmp TIM_COMP1
reti ; rjmp TIM_OVF1
reti ; rjmp TIM_OVF0
reti ; rjmp UART_RXC
reti ; rjmp UART_DRE
reti ; rjmp UART_TXC
rjmp ANA_COMP ; Вектор переривання від аналогового компаратора
;////////////////////////////////////////////////////////////////////////////
.org 0x0B ; Початок основної програми
RESET:
; Ініціалізація стеку
ldi temp, low(0xDF)
out SPL, temp
; Налаштування виводів аналогового компаратора
cbi DDRB, PB0 ; Вивід РВ0 - вхід
cbi DDRB, PB1 ; Вивід РВ1 - вхід
cbi PORTB, PB0 ; Відключити внутрішній підтягуючий резистор для РВ0
cbi PORTB, PB1 ; Відключити внутрішній підтягуючий резистор для РВ1
; Налаштування виводів світлодіода
sbi LED_PORT, LED_PIN ; Світлодіод виключений
sbi LED_DDR, LED_PIN ; Вивід LED_PIN - вихід
; Налаштування виводу для підключення цифрового давача
cbi DDRD, PD3 ; Вивід РD2 - вхід
cbi PORTD, PD3 ; Відключити внутрішній підтягуючий резистор для РD2
ldi temp, (1<<ACIE) | (1<<ACIS1) | (1<<ACIS0) ; Дозволити переривання від АК,
; переривання генерується при
; переході з 0 в 1
out ACSR, temp ; Сконфігурувати аналоговий компаратор
; Налаштувати режим пониженого енергоспоживання і умову генерації переривання INT0
ldi temp, (1<<ISC11)| (1<<ISC10) | (1<<SE) ; Режим енергоспоживання Idle: SM ;= 0,
; зовнішні переривання по спадаючому фронту
out MCUCR, temp ; Сконфігурувати регістр MCUCR
; Дозволити зовнішнє переривання INT0
ldi temp, (1<<INT1)
out GIMSK, temp
; Дозволити зовнішнє переривання INT1
ldi temp, (1<<INTF1)
out GIFR, temp
; Загальний дозвіл переривань: І = 1
sei
Loop:
sleep ; Перехід в режим пониженого енергоспоживання
rjmp Loop ; Після спрацювання давача знову перейти в режим
; пониженого енергоспоживання
;////////////////////////////////////////////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////
INT1_EXT: ; П/п обробки переривання INT0
cbi LED_PORT, LED_PIN ; Включити світлодіод
ldi EE_Addr_Reg, Digital_Addr ; Завантажити в регістр адреси EEPROM адресу
; цифрового давача
rcall EEPROM_Read ; Прочитати з EEPROM кількість спацювань
; цифрового давача
inc EE_Data_Reg ; Збільшити кількість спрацювань на 1
rcall EEPROM_Write ; Зберегти кількість спацювань цифрового
; давача в EEPROM
reti ; Вийти з переривання
;////////////////////////////////////////////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////
ANA_COMP: ; П/п обробки переривання від аналогового компаратора
cbi LED_PORT, LED_PIN ; Включити світлодіод
ldi EE_Addr_Reg, Analog_Addr ; Завантажити в регістр адреси EEPROM адресу
; аналогового давача
rcall EEPROM_Read ; Прочитати з EEPROM кількість спацювань
; аналогового давача
inc EE_Data_Reg ; Збільшити кількість спрацювань на 1
rcall EEPROM_Write ; Зберегти кількість спрацювань аналогового
; давача в EEPROM
reti ; Вийти з переривання
;////////////////////////////////////////////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////
EEPROM_Write: ; П/п запису байту в EEPROM
sbic EECR, EEWE ; Чекати, доки прапорець EEWE не буде скинутий
rjmp EEPROM_Write
out EEAR, EE_Addr_Reg ; Завантажити адресу для запису
out EEDR, EE_Data_Reg ; Завантажити дані для запису
sbi EECR, EEMWE ; Встановити мастер-біт дозволу запису
sbi EECR, EEWE ; Встановити біт дозволу запису
ret ; Вихід з п/п запису байту в ЕEPROM
;////////////////////////////////////////////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////
EEPROM_Read: ; П/п читання байту з EEPROM
sbic EECR, EEWE ; Чекати, доки прапорець EEWE не буде скинутий
rjmp EEPROM_Read
out EEAR, EE_Addr_Reg ; Завантажити адресу для читання
sbi EECR, EERE ; Встановити прапорець дозволу читання
in EE_Data_Reg, EEDR ; Прочитати дані
ret ; Вихід з п/п читання байту з ЕEPROM
;////////////////////////////////////////////////////////////////////////////
Схема: