Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект мпсу.doc
Скачиваний:
90
Добавлен:
22.09.2019
Размер:
6.71 Mб
Скачать

Урок №45 Лабораторная работа №10 Исследование логики прерывания от внешнего устройства

Цель работы: Приобретение навыков исследования устройств МК

1 Краткие сведения из теории

Внешние прерывания вызываются сигналами на внешних выводах МК:

INT0

PD.2

INT1

PD.3

INT2

PB.2

Уровень сигнала прерывания от внешних источников INT0, INT1 задается битами в регистре управления микроконтроллера MCUCR.

ISC01

ISC00

Вход INT0

0

0

Низкий уровень (лог.0)

0

1

1

0

Спадающий фронт

1

1

Нарастающий фронт

Разрешение прерываний от внешних источников устанавливается в регистре масок внешних прерываний GICR (GIMSK).

2 Практические задания и методические указания по их выполнению

Задание 1 Исследуйте влияние уровня сигнала прерывания INT0 в окне отладчика

Создайте в программе AVR Studio проект int_2.asm

Введите и откомпилируйте текст программы:

;==========int_2.asm======

.include "m8535def.inc"

.org 0

rjmp start

.org $001

rjmp prer

;==========

start:

ldi r16,$61

out spl,r16

ldi r16,$00

out sph,r16

ldi r16,0b00000010

out mcucr,r16

ldi r16,0b01000000

out gicr,r16

sei

loop:

rjmp loop

;===========

prer:

inc r0

reti

Запустите отладчик

    1. Имитируйте поступление на вход PD.2 сигнала прерывания со спадающим фронтом. Проанализируйте поведение программы

    2. Измените уровень сигнала прерывания в программе: установить нарастающий фронт. Откомпилируйте программу и проанализируйте ее действие в окне отладчика

    3. Измените уровень сигнала прерывания в программе: установить низкий уровень. Откомпилируйте программу и проанализируйте ее действие в окне отладчика

    4. Объясните результаты проведения исследование

Задание 2

Исследование логики работы прерываний по сбросу и от внешнего источника INT0.

На стенде «Микроконтроллеры и автоматизация» соберите схему, изображенную на рисунке 1.

Рисунок 1

Введите, откомпилируйте и запишите в память МК программу int_1.asm

;============int_1.asm==========

.include "m8535def.inc" ;включение в программу файла описания имен

;==========таблица векторов=====

.org 0 ;вектор сброса

rjmp start

.org 0001 ;вектор int0

rjmp prer

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

.org $0020 ;начало основной программы

start:

;организуем стек

ldi r16,$00

out sph,r16

ldi r16,$61

out spl,r16

; настраиваем уровень сигнала прерывания по нарастающему фронту

ldi r16,0b00000011

out mcucr,r16

; разрешаем прерывание от int0 (частное разрешение)

ldi r16,0b01000000

out gicr,r16

;глобальное разрешение прерывания

Sei

ldi r16,$ff

out ddra,r16 ;настроить порт A на вывод

sbi ddrb,0 ;настроить на вывод линию PB.0

ldi r16,$с0 ;код символа «0»

out porta,r16 ;вывести код на выходы порта A

sbi portb,0 ;подключить общий анод индикатора ;к питанию

;фоновая команда, бесконечный цикл, мы ожидаем прерывания

loop:

rjmp loop

;=====подпрограмма обработки прерывания=====

prer:

ldi r16,$6d ;код символа «5»

out porta,r16 ;вывести код на выходы порта A

reti

Исследуйте действие прерывания по сбросу и от внешнего источника INT0.

Измените настройки уровня сигнала прерывания INT0: а) спадающий фронт, б) низкий уровень и уловите разницу в действии программ.

Задание 3*

Запишите в память МК следующую программу. Инициируйте внешнее прерывание INT0. Наблюдайте, что происходит со светодиодом. Измените настройку уровня сигнала прерывания на уровень лог.0. Объясните поведение светодиода.

.include "m8535def.inc"

.org 0

rjmp start

.org $001

rjmp prer

;==========

start:

sbi ddrc,0

sbi portc,0

ldi r16,$61

out spl,r16

ldi r16,$00

out sph,r16

ldi r16,0b00000011 ;б)ldi r16,0b00000000

out mcucr,r16

ldi r16,0b01000000

out gicr,r16

sei

loop:

rjmp loop

;===========

prer:

sbis portc,0

rjmp ind

cbi portc,0

reti

ind:

sbi portc,0

reti