В одном из режимов работы сторожевого таймера (Watchdog) ATtiny13 по истечении времени ожидания возникает прерывание 8 "Тайм-аут сторожевого таймера". Это прерывание можно использовать, например, для ограничения времени выполнения циклического участка программы.

;******************************************************************************
;************* Генератор звука на таймере/счетчике ТО ATtiny13 ****************
;***** Created: 2015-03-18 02:04 ******** Site: http://integrator.adior.ru ****
;******************************************************************************
.includepath "/home/dior/AVR"		; Папка с файлами заголовками         
.include "tn13def.inc"			; Используем ATtiny13                 
;==============================================================================
; Макросы для предделителя таймера/счетчика T0
	.macro prescal0
		ldi r22, 0		; Таймер/счетчик остановлен
	.endm
	.macro prescal1
		ldi r22, 1		; Предделитель на 1
	.endm
	.macro prescal2
		ldi r22, 2		; Предделитель на 8
	.endm
	.macro prescal3
		ldi r22, 3		; Предделитель на 64
	.endm
	.macro prescal4
		ldi r22, 4		; Предделитель на 256
	.endm
	.macro prescal5
		ldi r22, 5		; Предделитель на 1024
	.endm
; Макросы для установки периода сторожевого таймера
	.macro watchdog0
		ldi r20, 64		; Период сторожевого таймера 16 мс
	.endm
	.macro watchdog1
		ldi r20, 65		; Период сторожевого таймера 32 мс
	.endm
	.macro watchdog2
		ldi r20, 66		; Период сторожевого таймера 64 мс
	.endm
	.macro watchdog3
		ldi r20, 67		; Период сторожевого таймера 125 мс
	.endm
	.macro watchdog4
		ldi r20, 68		; Период сторожевого таймера 250 мс
	.endm
	.macro watchdog5
		ldi r20, 69		; Период сторожевого таймера 500 мс
	.endm
	.macro watchdog6
		ldi r20, 70		; Период сторожевого таймера 1000 мс
	.endm
	.macro watchdog7
		ldi r20, 71		; Период сторожевого таймера 2000 мс
	.endm
;==============================================================================
	.cseg
	.org $000
		rjmp reset		; 0 начало программы
		reti			; 1 Внешнее прерывание 0
		reti			; 2 Прерывание по изменению состояния выводов
		reti			; 3 Переполнение таймера/счетчика ТО
		reti			; 4 EEPROM готово
		reti			; 5 Аналоговый компаратор
		reti			; 6 Совпадение А таймера/счетчика ТО
		reti			; 7 Совпадение В таймера/счетчика ТО
		rjmp watchdog		; 8 Тайм-аут сторожевого таймера
		reti			; 9 Преобразование АЦП завершено
reset:
		ldi r23, RAMEND		; Загрузить в R23 адрес последней ячейки памяти
		out SPL, r23		; Инициализация стека
		sbi DDRB, DDB0		; PB0 будет работать на выход
		ldi r23, 66		; Установка битов COM0A0, WGM01
		out TCCR0A, r23		; Подключение таймера/счетчика к выводу PB0/OC0A
		ldi r19, 24		; Установка WDE и WDCE (разрешение изменения конфигурации watchdog)



main:
		prescal3		; Установка предделителя таймера/счетчика
		ldi r23, 255		; Установка значения частоты сигнала
		watchdog6		; Выбор длительности звучания
		rcall play

		prescal0		; Таймер/счетчик будет остановлен
		rcall play
stop:		rjmp stop		; Бесконечный цикл

;==============================================================================
; Подпрограммы, обработчики прерываний

play:
		out WDTCR, r19		; Разрешение изменения конфигурации watchdog
		out WDTCR, r20		; Установка периода сторожевого таймера
		sei			; Разрешить прерывания
		
		out TCCR0B, r22		; Установка предделителя таймера/счетчика
		out OCR0A, r23		; Загрузка значения частоты сигнала
		ldi r21, 0		; R21 будет использоваться как условие цикла
loop:		tst r21			; проверка регистра R21
		breq loop		; цикл пока R21=0, в ожидании прерывания сторожевого таймера
		ret			; Возврат из подпрограммы		

watchdog:				; Тайм-аут сторожевого таймера
		ldi r21, 1		; R22=1 условие выхода из цикла
		reti			; Возврат из прерывания

;==============================================================================
; Задействованы регистры:
; R23 значение частоты сигнала f=Fclk/2N(1+R23), где N - коэффициент деления предделителя
; R22 значение для предделителя таймера/счетчика
; R21 условие цикла
; R20 время задержки сторожевого таймера
; R19 разрешение изменения конфигурации watchdog

; Компилировать avra test.s
; Загрузить avrdude -C/home/dior/AVR/avrdude.conf -v -v -v -v -pattiny13 -cstk500v1 -P/dev/ttyUSB0 -b19200 -Uflash:w:test.s.hex:i
; Фьюзы avrdude -C/home/dior/AVR/avrdude.conf -v -v -v -v -pattiny13 -cstk500v1 -P/dev/ttyUSB0 -b19200 -e -Uhfuse:w:0xff:m -Ulfuse:w:0x7a:m

В этой программе таймер/счетчик генерирует низкочастотный сигнал, который можно услышать подключив динамик к выводу PB0/OC0A микроконтроллера ATtiny13. Выполнение программы зацикливается командой breq loop. По истечению тайм-аута сторожевого таймера возникает прерывание. Выполняется программа обработчик прерывания watchdog в которой в регистр R21 помещается значение, являющееся условием выхода из цикла breq loop. Завершается выполнение обработчика прерывания, подпрограммы play и продолжается выполнение основной программы main. Следующая команда программы main устанавливает параметры для выключения генератора низкой частоты.

Использование прерывания сторожевого таймера ATtiny13