.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 инвертировать его и выводить на панель светодиодов.
Порядок выполнения лабораторной работы:
5. Загрузить программу в стенд ОЭВМ. Убедиться в правильном выполнении индивидуального задания, при отрицательном результате осуществить изменение алгоритма либо программы. Повторить загрузку
программы в стенд STK500.
Контрольные вопросы:
1. Время выполнения команд (понятие такта, машинного цикла).
2. Типы данных. Формат команд. Команды прямой и косвенной адресации.
3. Команды сдвига. Арифметические команды. Логические команды.
4. Регистр признаков, команды вызывающие изменение регистра признаков.
5. Команды работы со стеком, последовательность действий (команд) при работе со стеком.
6. Назначение внутренних узлов МК.
7. Назначение и работа с внутренней памятью данных МК.
8. Система прерывания ОЭВМ. Назначение портов МК.
9. Физические характеристики выходных сигналов МК.
Лабораторная работа №2
Тема: Система прерываний. Работа с таймером/счетчиком 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: Выбор вектора прерывания