Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
«Московский государственный технический университет имени Н.Э. Баумана»
(МГТУ им. Н.Э. Баумана)
Факультет «Информатика и системы управления»
Кафедра «Компьютерные системы и сети»
по курсу «Микпроцессорные системы»
ТАЙМЕРЫ МИКРОКОНТРОЛЛЕРА ATx8515
Исполнители,
студ. гр. ИУ 6-71 ___________ М.И. Жильников
студ. гр. ИУ 6-71 ___________ В.Э. Подольский
Преподаватель
___________ В.Я. Хартов
2011
Лабораторная работа №3
Таймеры микроконтроллеров ATx8515
Цель работы - изучение основных режимов работы таймеров и их программирование, анализ схем включения таймеров для проведения исследований.
Задание 1. Подготовить программу для исследования таймера/счётчика Т0 в режиме счётчика событий. Событием в данном случае может быть замыкание одной из кнопок SWx на плате STK500. Результат работы программы отобразить средствами индикации.
Проведена следующая коммутация шлейфами: порт PBSW, порт PD-LED. В программе 1 событие это нажатие кнопки SW0. Светодиоды включаются после четвертого нажатия на кнопку SW0.
Также инкремент счётчика будет происходить после выполнения команд программы, эмулирующих положительный перепад напряжения на PB0.
Программа 1:
.include "8515def.inc" ;файл определений AT90S8515
.def temp = r16 ;временный регистр
;***Таблица векторов прерываний
.org $000
rjmp INIT ;обработка сброса
.org $007
rjmp T0_OVF ;обработка переполнения таймера T0
;***Инициализация МК
INIT: ldi temp,low(RAMEND) ;установка
out SPL,temp ; указателя стека
ldi temp,high(RAMEND) ; на последнюю
out SPH,temp ; ячейку ОЗУ
clr temp ;инициализация выводов порта PB
out DDRB,temp ; на ввод
ldi temp,0x01 ;включение подтягивающего резистора
out PORTB,temp ; входа PB0
ser temp ;инициализация выводов порта PD
out DDRD,temp ; на вывод
out PORTD,temp ;выключение светодиодов
ldi temp,0x20 ;SE=1 - разрешение перехода
out MCUCR,temp ; в режим Idle
;***Настройка таймера Т0 на режим счётчика событий
ldi temp,0x02 ;разрешение прерывания по
out TIMSK,temp ; переполнению таймера
ldi temp,0x07 ;переключение таймера Т0
out TCCR0,temp ; по положительному перепаду напряжения
sei ;глобальное разрешение прерываний
ldi temp,0xFC ;$FC=-04 для
out TCNT0,temp ; отсчёта 4-х нажатий
LOOP: sleep ;переход в режим пониженного
;nop ;энергопотребления
cbi PORTB, 0 ;положительный перепад напряжения на PB0
sbi portb, 0
rjmp DELAY
rjmp LOOP
;***Обработка прерывания при переполнении таймера T0
T0_OVF: clr temp
out PORTD,temp ;включение светодиодов
rcall DELAY ;задержка
ser temp
out PORTD,temp ;выключение светодиодов
ldi temp,0xFC ;$FC=-04 для
out TCNT0,temp ; отсчёта 4-х нажатий
reti
;*** Задержка ***
DELAY: ldi r19,10
ldi r20,255
ldi r21,255
dd: dec r21
brne dd
dec r20
brne dd
dec r19
brne dd
ret
Задание 2. Подготовить программу для исследования таймера/счётчика Т0 в режиме таймера.
На плате STK500 были соединены: PD2,PD3SW2,SW3; PB-LED.
Программа 2:
.include "8515def.inc" ;файл определений AT90S8515
.def temp = r16 ;временный регистр
.equ SW2 = 2 ;2-ой вывод порта PD
.equ SW3 = 3 ;3-ий вывод порта PD
;***Таблица векторов прерываний
.org $000
rjmp INIT ;обработка сброса
.org $007
rjmp T0_OVF ;обработка переполнения таймера T0
;***Инициализация МК
INIT: ldi temp,low(RAMEND) ;установка
out SPL,temp ; указателя стека
ldi temp,high(RAMEND) ; на последнюю
out SPH,temp ; ячейку ОЗУ
clr temp ;инициализация 2 и 3 выводов порта PD
out DDRD,temp ; на ввод
ldi temp,0x0C ;включение подтягивающих резисторов
out PORTD,temp ; порта PD
ser temp ;инициализация выводов порта PB
out DDRB,temp ; на вывод
out PORTB,temp ;выключение светодиодов
;***Настройка таймера Т0 на режим таймера
ldi temp,0x02 ;разрешение прерывания по
out TIMSK,temp ; переполнению таймера Т0
clr temp ;таймер Т0
out TCCR0,temp ; остановлен
sei ;глобальное разрешение прерываний
clr temp ;отсчёт
out TCNT0,temp ; начинается с 0
;***Ожидание нажатия кнопок
WAITSET_0: sbic PIND,SW2 ;проверка нажатия
rjmp WAITSET_1 ; кнопки SW2
;***Обработка нажатия кнопки SW2
ldi temp,0x01 ;источник тактового сигнала - CK
rcall LED_ON ;включение светодиодов
WAITSET_1: sbic PIND,SW3 ;проверка нажатия
rjmp WAITSET_0 ; кнопки SW3
;***Обработка нажатия кнопки SW3
ldi temp,0x02 ;источник тактового сигнала - CK/8
rcall LED_ON ;включение светодиодов
rjmp WAITSET_0
;***Обработка прерывания при переполнении таймера T0
T0_OVF: ser temp
out PORTB,temp ;выключение светодиодов
clr temp ;останов
out TCCR0,temp ; таймера Т0
clr temp
out TCNT0,temp ; установка 0
reti
;***Включение светодиодов
LED_ON: out TCCR0,temp ;настройка источника тактового сигнала
clr temp ;включение
out PORTB,temp ; светодиодов
ret
Для наблюдений таймера Т0 в режиме таймера выставлена частота тактового генератора CK=512Гц. При нажатии на SW2 на вход счётчика поступают сигналы с частотой CK, при нажатии на SW3 - CK/8. В первом случае время с начала счёта до переполнения (выключения светодиодов) - 0,5с, во втором - 4с.
Задание 3. Подготовить программу для исследования функции сравнения таймера/счётчика Т1.
Частота тактового генератора устанавливается равной 256 Гц. Коммутация осуществляется 2-проводными шнурами: LED0 PE2, LED1 PD5, SW0 PD0, SW1 PD2.
Программа 3:
.include "8515def.inc" ;файл определений AT90S8515
.def temp = r16 ;временный регистр
.equ START = 0 ;0-ой вывод порта PD
.org $000
rjmp INIT ;обработка сброса
.org $003
rjmp STOP_PRESSED ;обработка внешнего прерывания INT0 - ; нажатие STOP
;***Инициализация МК
INIT: ldi temp,low(RAMEND) ;установка
out SPL,temp ; указателя стека
ldi temp,high(RAMEND) ; на последнюю
out SPH,temp ; ячейку ОЗУ
ldi temp,0x20 ;инициализация выводов порта PD:
out DDRD,temp ; 0,2 - на ввод, 5 - на вывод
ldi temp,0x05 ;включение подтягивающих
out PORTD,temp ; резисторов порта PD и выключение СД
;ldi temp,0x04 ;для ATmega8515 инициал-ция вывода порта
;out DDRE,temp ;PE2 (OC1B) на вывод!
ldi temp,0x40 ;разрешение прерывания INT0
out GIMSK,temp ; в регистре GIMSK (или GICR)
clr temp ;обработка прерывания INT0
out MCUCR,temp ; по низкому уровню
;***Настройка функции сравнения таймера Т1
ldi temp,0x00 ;запрещение прерываний
out TIMSK,temp ; от таймера
cli ;глобальное запрещение прерываний
ldi temp,0x50 ;при равенстве состояния выводов OC1A и
out TCCR1A,temp ; OC1B изменяются на противоположные
ldi temp,0x00 ;таймер
out TCCR1B,temp ; остановлен
ldi temp,0x00 ;запись числа в
out OCR1BH,temp ; регистр сравнения,
ldi temp,0x80 ; первым записывается
out OCR1BL,temp ; старший байт
ldi temp,0x00 ;запись числа в
out OCR1AH,temp ; регистр сравнения,
ldi temp,0xFF ; первым записывается
out OCR1AL,temp ; старший байт
clr temp ;обнуление
out TCNT1H,temp ; содержимого
out TCNT1L,temp ; счётного регистра
sei ;глобальное разрешение прерываний
WAITSTART: sbic PIND,START ;ожидание нажатия
rjmp WAITSTART ; кнопки START
ldi temp,0x09 ;запуск таймера, при
out TCCR1B,temp ; совпадении с OCR1A - сброс
LOOP: nop ;во время цикла происходит
rjmp LOOP ; увеличение содержимого счётного регистра
;***Обработка прерывания от кнопки STOP
STOP_PRESSED:
ldi temp,0x08 ;остановка
out TCCR1B,temp ; таймера
WAITSTART_2: ;ожидание
sbic PIND,START ; нажатия
rjmp WAITSTART_2 ; кнопки START
ldi temp,0x09 ;запуск
out TCCR1B,temp ; таймера
reti
При нажатии на SW0 (START) происходит инкремент счётчика с частотой CK, при нажатии на SW1 (STOP) счётчик останавливается. ;При совпадении содержимого счётчика и регистра сравнения OCR1B происходит переключение светодиода LED0, счётного регистра и регистра сравнения OCR1A - LED1.
Результат работы программы соответствует диаграммам на рисунке 1.
При нажатии на кнопку SW0 светодиоды работают в следующей последовательности: оба светодиода погашены, далее включается LED0, затем LED1, выключается LED0, затем LED1 и т.д. В любой момент процесс можно остановить нажатием кнопки SW1.
Рисунок 1 Временные диаграммы работы таймера/счётчика Т1 при исследовании функции сравнения
Задание 4. Подготовить программу для исследования функции захвата таймера/счётчика Т1. Захват должен происходить при нажатии соответствующей кнопки.
Выставлена частота тактового генератора CK=256 Гц. Коммутация кнопок с выводами микроконтроллера осуществляется 2-проводными шнурами: SW0 PD0, SW1 PD1, SW2 - PD2, SW3 PE0. Светодиоды подключаются к выводам порта PB 10-проводным шлейфом.
При моделировании программы в AVR Studio: вывод ICP в микроконтроллере AT90S8515 является выделенным, а в микроконтроллере ATmega8515 это линия порта ввода/вывода PE0, т.е. в AT90S8515 инициализация PE не нужна.
Программа 4:
.include "8515def.inc" ;файл определений AT90S8515
.def temp = r16 ;временный регистр
.def H_byte = r17 ;для хранения старшего байта
.def L_byte = r18 ;для хранения младшего байта
.equ START = 0 ;0-ой вывод порта PD
.equ SHOW_L = 1 ;1-ый вывод порта PD
.equ SHOW_H = 2 ;2-ой вывод порта PD
;***Векторы прерываний
.org $000
rjmp INIT ;обработка сброса
.org $003
rjmp CAPT_PRESSED ;обработка внешнего прерывания INT0 - ;нажатие CAPT
;***Инициализация МК
INIT: ldi temp,low(RAMEND) ;установка
out SPL,temp ; указателя стека
ldi temp,high(RAMEND) ; на последнюю
out SPH,temp ; ячейку ОЗУ
ldi temp,0x00 ;инициализация выводов
out DDRD,temp ; порта PD на ввод
ldi temp,0x07 ;включение подтягивающих
out PORTD,temp ; резисторов порта PD
;ldi temp,0x00 ;для ATmega8515 инициал-ция вывода порта
;out DDRE,temp ;PE0 (ICP) на ввод!
ser temp ;инициализация выводов
out DDRB,temp ; порта PB на вывод
out PORTB,temp ;выключение светодиодов
cli ;глобальное запрещение прерываний
ldi temp,0x00 ;отключение от таймера
out TCCR1A,temp ; выводов
ldi temp,0x00 ;таймер
out TCCR1B,temp ; остановлен
ldi temp,0xFF ;запись числа в
out OCR1AH,temp ; регистр сравнения,
ldi temp,0xFF ; первым записывается
out OCR1AL,temp ; старший байт
clr temp ;обнуление
out TCNT1H,temp ; содержимого
out TCNT1L,temp ; счётного регистра
ldi L_byte,0xF0 ;начальные значения
ldi H_byte,0x0F ; для проверки
sei ;глобальное разрешение прерываний
WAITSTART: sbic PIND,START ;ожидание нажатия
rjmp WAITSTART ; кнопки START
ldi temp,0x08 ;разрешение прерывания
out TIMSK,temp ; по событию "захват" таймера
ldi temp,0xC9 ;запуск таймера, при
out TCCR1B,temp ; совпадении с OCR1A - сброс
WAIT_L: sbic PIND,SHOW_L ;ожидание нажатия
rjmp WAIT_H ; кнопки SHOW_L - показать младший байт
out PORTB,L_byte ;вывод на СД
WAIT_H: sbic PIND,SHOW_H ;ожидание нажатия
rjmp WAIT_L ; кнопки SHOW_H - показать старший байт
out PORTB,H_byte ;вывод на СД
rjmp WAIT_L
;***Обработка прерывания от кнопки CAPT
CAPT_PRESSED:
in L_byte,ICR1L ;считывание младшего байта
in H_byte,ICR1H ;считывание старшего байта
com L_byte ;инвертирование для вывода
com H_byte ;инвертирование для вывода
reti
При нажатии на SW0 (START) на вход счётчика поступает сигнал с частотой CK, при нажатии на SW3 (CAPT) происходит захват состояния таймера. При совпадении содержимого счётчика и регистра сравнения OCR1A происходит сброс таймера. При нажатии на SW1 (SHOW_L) на светодиоды выводится значение младшего байта регистра захвата, SW2 (SHOW_H) - старшего байта регистра захвата.
Через t=5,783 c: SW1_L=0010 0000; SW2_H=0000 0110.
Задание 5. Подготовить программу для исследования работы таймера Т1 в режиме ШИМ.
Для наглядности необходимо выставить частоту тактового генератора = 2048 Гц. Выводы OC1A (PD5) и OC1B (PE2) необходимо подключить к светодиодам (PD5-LED0, PE2-LED1), выводы порта PD0-PD3 к кнопкам общего назначения SW0-SW3 соответственно.
Программа 5:
.include "8515def.inc" ;файл определений AT90S8515
.def temp = r16 ;временный регистр
;***Выводы порта PD
.equ SHOW_0 = 0
.equ SHOW_F1 = 1
.equ SHOW_F2 = 2
.equ SHOW_3 = 3
.org $000
rjmp INIT ;обработка сброса
;***Инициализация МК
INIT: ldi temp,low(RAMEND) ;установка
out SPL,temp ; указателя стека
ldi temp,high(RAMEND) ; на последнюю
out SPH,temp ; ячейку ОЗУ
ldi temp,0x20 ;инициализация выводов порта PD:
out DDRD,temp ; 0-3 - на ввод, 5 - на вывод
ldi temp,0x0F ;включение подтягивающих
out PORTD,temp ; резисторов порта PD
;ldi temp,0x04 ; для ATmega8515 инициал-ция вывода порта
;out DDRE,temp ;PE2 (OC1B) на вывод!
cli ;глобальное запрещение прерываний
ldi temp,0xB3 ;настройка таймера на ШИМ и работу с
out TCCR1A,temp ; выводами OC1A и OC1B
clr temp ;обнуление
out OCR1AH,temp ; регистров
out OCR1AL,temp ; сравнения и
out OCR1BH,temp ; ...
out OCR1BL,temp ; ...
out TCNT1H,temp ; счётного
out TCNT1L,temp ; регистра
ldi temp,0x01 ;таймер
out TCCR1B,temp ; запущен: частота = СК
sei ;глобальное разрешение прерываний
WAIT_0: ;ожидание
sbic PIND,SHOW_0 ; нажатия
rjmp WAIT_F1 ; кнопки SHOW_0,устойчивые состояния 0 и 1
;***Перевод в устойчивые состояния выводов OC1A=0, OC1B=1
clr temp ;запись числа в
out OCR1AH,temp ; регистр сравнения, первым
out OCR1AL,temp ; записывается старший байт
out OCR1BH,temp ;запись числа в регистр сравнения, первым
out OCR1BL,temp ; записывается старший байт
WAIT_F1: sbic PIND,SHOW_F1 ;ожидание нажатия
rjmp WAIT_F2 ; кнопки SHOW_F1 -режим ШИМ скважностью F1
;***Настройка таймера на режим ШИМ со скважностью F1
ldi temp,0x00 ;запись числа в
out OCR1AH,temp ; регистры сравнения,
out OCR1BH,temp ; первым записывается
ldi temp,0xFF ; старший байт
out OCR1AL,temp
out OCR1BL,temp
WAIT_F2: sbic PIND,SHOW_F2 ;ожидание нажатия
rjmp WAIT_3 ; кнопки SHOW_F2 -режим ШИМ скважностью F2
;***Настройка таймера на режим ШИМ со скважностью F2
ldi temp,0x02 ;запись числа в
out OCR1AH,temp ; регистры сравнения,
out OCR1BH,temp ; первым записывается
ldi temp,0xFF ; старший байт
out OCR1AL,temp
out OCR1BL,temp
WAIT_3: sbic PIND,SHOW_3 ;ожидание нажатия
rjmp WAIT_0 ; кнопки SHOW_3,устойчивые состояния 1 и 0
;***Перевод в устойчивые состояния выводов OC1A=1, OC1B=0
ser temp ;запись числа в
out OCR1AH,temp ; регистр сравнения, первым
out OCR1AL,temp ; записывается старший байт
out OCR1BH,temp ;запись числа в регистр сравнения, первым
out OCR1BL,temp ; записывается старший байт
rjmp WAIT_0
При нажатии на SW0 (SHOW_0) на выходах OC1A и OC1B устанавливаются 0 и 1. При нажатии на SW1 (SHOW_F1) происходит генерация ШИМ-сигнала со скважностью F1. При нажатии на SW2 (SHOW_F2) происходит генерация ШИМ-сигнала со скважностью F2. При нажатии на SW3 (SHOW_1) на выходах OC1A и OC1B устанавливаются 1 и 0.
Результат соответствует диаграммам на рисунке 2.
Рисунок 2 Формирование ШИМ-сигнала
Задание 6. Подготовить программу для исследования сторожевого таймера.
Частота тактового генератора не существенна, так как сторожевой таймер имеет независимый генератор. Коммутация выводов: SW0 PD0, SW1 PD1, LED PB 10-проводным шлейфом.
Программа 6:
.include "8515def.inc" ;файл определений AT90S8515
.def temp = r16 ;временный регистр
;***Выводы порта PD
.equ PERIOD_1 = 0
.equ PERIOD_2 = 1
.org $000
rjmp INIT ;обработка сброса
;***Инициализация МК
INIT: ldi temp,low(RAMEND) ;установка
out SPL,temp ; указателя стека
ldi temp,high(RAMEND) ; на последнюю
out SPH,temp ; ячейку ОЗУ
clr temp ;инициализация выводов порта PD
out DDRD,temp ; на ввод
ldi temp,0x03 ;включение подтягивающих
out PORTD,temp ; резисторов порта PD
ser temp ;инициализация выводов порта PB
out DDRB,temp ; на вывод
out PORTB,temp ;выключение светодиодов
ldi temp,$18 ;выключение
out WDTCR,temp ; сторожевого
ldi temp,$10 ; таймера:
out WDTCR,temp ; WDE=0
WAIT_SW0: sbic PIND,PERIOD_1 ;ожидание нажатия
rjmp WAIT_SW1 ; кнопки PERIOD_1
;***Назначение периода наступления тайм-аута = 0,49с
clr temp ;включение
out PORTB,temp ; светодиодов
ldi temp,$0D ;включение сторожевого таймера,
out WDTCR,temp ; период 0,49с
WAIT_SW1: sbic PIND,PERIOD_2 ;ожидание нажатия
rjmp WAIT_SW0 ; кнопки PERIOD_2
;***Назначение периода наступления тайм-аута = 1,9с
clr temp ;включение
out PORTB,temp ; светодиодов
ldi temp,$0F ;включение сторожевого таймера,
out WDTCR,temp ; период 1,9с
rjmp WAIT_SW0
При нажатии на SW0 (PERIOD_1) наступление тайм-аута происходит через 0,49с (время включения светодиодов). При нажатии на SW1 (PERIOD_2) наступление тайм-аута происходит через 1,9с (время включения светодиодов).
Задание 7. Изменить программу 1, добавив в нее обработку нажатия кнопки, исключающую влияние “дребезга”.
Для этого запрограммировать линию порта PB0 на вывод для программного ввода событий в таймер. Ввод событий выполнять при условии замыкания кнопки SWx, присоединенной к порту (линию и порт выбрать самостоятельно). Выполняя проверку состояния кнопки SWx, эмулировать сигнал «1» на выводе PB0 при замкнутом состоянии «0» кнопки. Перед загрузкой программы выполнить ее отладку в AVR Studio. Убедившись в правильности работы программы, проверить ее в STK500.
Для подготовки устройства к работе соединяем шлейфом выводы порта PB с кнопками SW; выводы порта PD со светодиодами LED.
.include "8515def.inc" ;файл определений AT90S8515
.def temp = r16 ;временный регистр
;***Таблица векторов прерываний
.org $000
rjmp INIT ;обработка сброса
.org $007
rjmp T0_OVF ;обработка переполнения таймера T0
;***Инициализация МК
INIT: ldi temp,low(RAMEND) ;установка
out SPL,temp ; указателя стека
ldi temp,high(RAMEND) ; на последнюю
out SPH,temp ; ячейку ОЗУ
ldi temp,0x10 ;инициализация выводов порта PB1
out DDRB,temp ; на вывод
ser temp ;инициализация выводов порта PD
out DDRD,temp ; на вывод
out PORTD,temp ;выключение светодиодов
ldi temp,0x20 ;SE=1 - разрешение перехода
out MCUCR,temp ; в режим Idle
;***Настройка таймера Т0 на режим счётчика событий
ldi temp,0x02 ;разрешение прерывания по
out TIMSK,temp ; переполнению таймера
ldi temp,0x07 ;переключение таймера Т0
out TCCR0,temp ; по положительному перепаду напряжения
sei ;глобальное разрешение прерываний
ldi temp,0xFC ;$FC=-04 для
out TCNT0,temp ; отсчёта 4-х нажатий
LOOP: sbis PINB,0;
Rjmp LOOP ;
cbi PORTB,0
sbi PORTB,0
rjmp DELAY
rjmp LOOP
;***Обработка прерывания при переполнении таймера T0
T0_OVF: clr temp
out PORTD,temp ;включение светодиодов
rcall DELAY ;задержка
ser temp
out PORTD,temp ;выключение светодиодов
ldi temp,0xFC ;$FC=-04 для
out TCNT0,temp ; отсчёта 4-х нажатий
reti
;*** Задержка ***
DELAY: ldi r19,10
ldi r20,255
ldi r21,255
dd: dec r21
brne dd
dec r20
brne dd
dec r19
brne dd
ret
Программа демонстрирует устранение дребезга кнопок SW
Задание 8. Подготовить программу по примеру 4.2 для проверки работы таймера/счётчика Т1 в режиме таймера. Время включения светодиодов 1с и 8с.
Для подготовки устройства к работе соединяем выводы порта PD с кнопками SW0 SW7; выводы порта PB со светодиодами LED0 LED7
.include "8515def.inc" ;файл определений AT90S8515
.def temp = r16 ;временный регистр
.equ SW2 = 2 ;2-ой вывод порта PD
.equ SW3 = 3 ;3-ий вывод порта PD
;***Таблица векторов прерываний
.org $000
rjmp INIT ;обработка сброса
.org $006
rjmp T1_OVF ;обработка переполнения таймера T1
;***Инициализация МК
INIT: ldi temp,low(RAMEND) ;установка
out SPL,temp ; указателя стека
ldi temp,high(RAMEND) ; на последнюю
out SPH,temp ; ячейку ОЗУ
clr temp ;инициализация 2 и 3 выводов порта PD
out DDRD,temp ; на ввод
ldi temp,0x0C ;включение подтягивающих резисторов
out PORTD,temp ; порта PD
ser temp ;инициализация выводов порта PB
out DDRB,temp ; на вывод
out PORTB,temp ;выключение светодиодов
;***Настройка таймера Т0 на режим таймера
ldi temp,0x80 ;разрешение прерывания по
out TIMSK,temp ; переполнению таймера Т1
clr temp ;таймер Т1
out TCCR1B,temp ; остановлен
sei ;глобальное разрешение прерываний
ldi temp,0xFE ;отсчёт
out TCNT1H,temp ; начинается с загруженного значения
clr temp
out TCNT1L,temp
;***Ожидание нажатия кнопок
WAITSET_0: sbic PIND,SW2 ;проверка нажатия
rjmp WAITSET_1 ; кнопки SW2
;***Обработка нажатия кнопки SW2
ldi temp,0x01 ;источник тактового сигнала - CK
rcall LED_ON ;включение светодиодов
WAITSET_1: sbic PIND,SW3 ;проверка нажатия
rjmp WAITSET_0 ; кнопки SW3
;***Обработка нажатия кнопки SW3
ldi temp,0x02 ;источник тактового сигнала - CK/8
rcall LED_ON ;включение светодиодов
rjmp WAITSET_0
;***Обработка прерывания при переполнении таймера T0
T1_OVF: ser temp
out PORTB,temp ;выключение светодиодов
clr temp ;останов
out TCCR1B,temp ; таймера Т1
ldi temp,0xFE
out TCNT1H,temp ; установка значения
clr temp
out TCNT1L,temp
reti
;***Включение светодиодов
LED_ON: out TCCR1B,temp ;настройка источника тактового сигнала
clr temp ;включение
out PORTB,temp ; светодиодов
ret
Программа для МК ATx8515 демонстрирует работу таймера Т1 в режиме таймера. На устройстве выставляется частота тактового генератора CK=512Гц. При нажатии на SW2 на вход счётчика поступают сигналы с частотой CK, при нажатии на SW3 - CK/8. В первом случае время с начала счёта до переполнения (выключения светодиодов) - 1с, во втором - 8с