Смекни!
smekni.com

Методические указания к лабораторным работам со стендом (стр. 4 из 9)

.include "m16def.inc"

.def Temp =r16 ; Temporary register ;объявление регистров

.def Delay =r17 ; Delay variable 1

.def Delay2 =r18 ; Delay variable 2

;***** Инициализация панели светодиодов

RESET:

ser Temp ; Установить биты (т.е. Регистр Temp=11111111 )

out DDRB,Temp ; Настраиваем Порт B на вывод

;**** Тестируем Порт B (Вывод) и Порт D (Ввод)

LOOP:

out PORTB,temp ; Запись регистра temp в порт B

sbis PIND,0x00 ; If (Port D, pin0 == 0) Если бит 0 в порт B установлен

inc Temp ; то увеличение значения регистра temp на 1

;**** Задержка, сделана для того чтобы обновление светодиодов проходило «плавно», и по нажатию кнопки выполнялся один цикл.

; Если не использовать задержку, то возможно выполнение нескольких циклов за одно нажатие кнопки.

DLY:

dec Delay

brne DLY

dec Delay2

brne DLY

rjmp LOOP

Индивидуальные задания

1. Занести в регистр R16 двоично-десятичное число 0Х, в регистр R17 двоично-десятичное число Х0, отобразить сумму чисел на панели светодиодов в двоичном виде.

2. Занести в регистр R16 двоично-десятичное число ХХ отобразить его на панели светодиодов в двоичном виде.

3. Занести в регистр R16 двоичное число, при нажатии кнопки SW0 инвертировать его и выводить на панель светодиодов.

Порядок выполнения лабораторной работы:

  1. Разработать алгоритм для выполнения индивидуального задания.
  2. Изучить программно-отладочные средства AVRStudio
  3. Написать программу индивидуального задания на ПК.
  4. С помощью ПОС проанализировать выполнение индивидуальной программы.

5. Загрузить программу в стенд ОЭВМ. Убедиться в правильном выполнении индивидуального задания, при отрицательном результате осуществить изменение алгоритма либо программы. Повторить загрузку

программы в стенд STK500.

  1. Сохранить листинг правильно работающей программы.
  2. Показать результат выполнения программы преподавателю и ответить на контрольные вопросы.

Контрольные вопросы:

1. Время выполнения команд (понятие такта, машинного цикла).

2. Типы данных. Формат команд. Команды прямой и косвенной адресации.

3. Команды сдвига. Арифметические команды. Логические команды.

4. Регистр признаков, команды вызывающие изменение регистра признаков.

5. Команды работы со стеком, последовательность действий (команд) при работе со стеком.

6. Назначение внутренних узлов МК.

7. Назначение и работа с внутренней памятью данных МК.

8. Система прерывания ОЭВМ. Назначение портов МК.

9. Физические характеристики выходных сигналов МК.

Лабораторная работа №2

Тема: Система прерываний. Работа с таймером/счетчиком 0

Цель: Изучить систему прерываний МК ATmega16. Изучить работу таймера/счетчика 0.

Для выполнения данной лабораторной работы нужно знать:

  • Что такое прерывание.
  • Как организовано обслуживание прерываний.
  • Изучить систему прерывания ATmega16, особенности опроса дискретных датчиков с механическими контактами.
  • Особенности функционирования и программирования Таймера/Счетчика 0.

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

Система прерываний Atmega16

Сброс и обработка прерываний

В ATmega16 предусмотрен 21 источник прерываний. Эти прерывания и сброс имеют различные векторы в области памяти программ. Каждому из прерываний присвоен отдельный бит, разрешающий данное прерывание при установке бита в 1, если бит I регистра состояния SREG разрешает общее обслуживание прерываний.

Самые младшие адреса памяти программ определены как векторы сброса и прерываний. Полный список векторов прерываний приведен в таблице 2. Этот список определяет и приоритет различных прерываний. Меньшие адреса соответствуют более высокому уровню приоритета. Самый высокий уровень у RESET (сброс), следующий приоритет у INT0 - внешнего запроса прерывания 0 и т.д.

Таблица 5. Сброс и векторы прерываний.

Номер вектора

Адрес

Источник

Описание прерывания

1

$000

RESET Вывод сброса и сброс от сторо­жевого таймера

2

$002

INT0 Внешнее прерывание 0

3

$004

INT1 Внешнее прерывание 1

4

$006

TIMER2 COMP Совпадение таймера/счетчика 2

5

$008

TIMER2 OVF Переполнение таймера/счетчика 2

6

$00A

TIMER1 CAPT Захват таймера/счетчика 1

7

$00С

TIMER1 COMPA Совпадение таймера/счетчика 1

8

$00E

TIMER1 COMPB Совпадение таймера/счетчика 1

9

$010

TIMER1 OVF Переполнение таймера/счетчика 1

10

$012

TIMER0 OVF Переполнения таймера/счетчика 0

11

$014

SPI, STC Полная последовательная передача

12

$016

USART, RXC Usart, Rx complete

13

$018

USART, UDRE Usart регистр данных пустой

14

$01A

USART, TXC Usart, Tx complete

15

$01C

ADC Аналого-цифровой преобразователь

16

$01E

EE_RDY EEPROM Ready

17

$020

ANA_COMP Аналоговый компаратор

18

$022

TWI Двух - проводной последовательный интерфейс

19

$024

INT2 Внешнее прерывание 2

20

$026

TIMER0 COMP Совпадение таймера/счетчика 0

21

$028

SPM_RDY Загрузка программной памяти готова

Чаще всего используется следующая установка векторов прерываний в программе:

Адрес Метка Код Комментарий

$000 jmp RESET ; Reset Handler

$002 jmp EXT_INT0 ; IRQ0 Handler

$004 jmp EXT_INT1 ; IRQ1 Handler

$006 jmp TIM2_COMP ; Timer2 Compare Handler

$008 jmp TIM2_OVF ; Timer2 Overflow Handler

$00A jmp TIM1_CAPT ; Timer1 Capture Handler

$00C jmp TIM1_COMPA ; Timer1 CompareA Handler

$00E jmp TIM1_COMPB ; Timer1 CompareB Handler

$010 jmp TIM1_OVF ; Timer1 Overflow Handler

$012 jmp TIM0_OVF ; Timer0 Overflow Handler

$014 jmp SPI_STC ; SPI Transfer Complete Handler

$016 jmp USART_RXC ; USART RX Complete Handler

$018 jmp USART_UDRE ; UDR Empty Handler

$01A jmp USART_TXC ; USART TX Complete Handler

$01C jmp ADC ; ADC Conversion Complete Handler

$01E jmp EE_RDY ; EEPROM Ready Handler

$020 jmp ANA_COMP ; Analog Comparator Handler

$022 jmp TWSI ; Two-wire Serial Interface Handler

$024 jmp EXT_INT2 ; IRQ2 Handler

$026 jmp TIM0_COMP ; Timer0 Compare Handler

$028 jmp SPM_RDY ; Store Program Memory Ready Handler

;

$02A RESET: ldi r16,high(RAMEND ) ; Main program start

$02B out SPH,r16 ; Set Stack Pointer to top of RAM

$02C ldi r16,low(RAMEND)

$02D out SPL,r16

$02E sei ; Enable interrupts

$02F <instr> xxx

... ... ...

Обработка прерываний

ATmega16 регистр управления прерыванием GIСR - Общий регистр управления прерывания, регулирует размещение вектора прерывания. Когда возникает прерывание, общий бит разрешения прерываний I очи­щается (ноль) и прерывания запрещаются. Программа пользователя может установить этот бит для разрешения прерываний. Флаг разрешения преры­ваний I устанавливается в 1 при выполнении команды выхода из прерыва­ния - RETI.

Для прерываний включаемых статическими событиями (т.е. переключа­емыми уровнем) (например совпадение значения счетчика/таймера 1 с регистром совпадения) флаг прерывания взводится, когда происходит событие. Ес­ли флаг прерывания очищен и присутствует условие возникновения преры­вания, флаг не будет установлен, пока не произойдет следующее собы­тие.

Когда программный счетчик устанавливается на текущий вектор пре­рывания для обработки прерывания, соответствующий флаг, сгенерированный прерыванием, аппаратно сбрасывается. Некоторые флаги прерывания могут быть сброшены записью логической единицы в бит соответствующий флагу.

Бит Чт./зап. (R/W) Начальн. знач.

7

6

5

4

3

2

1

0

INT1

INT0

INT2

-

-

-

IVSEL

IVCE

GICR

R/W

R/W

R

R

R

R

R/W

R/W

0

0

0

0

0

0

0

0

Бит 1 - IVSEL: Выбор вектора прерывания