Следующий музыкальный автомат генерирует звук выполняя в цикле декремент счетного регистра (общего назначения) программно. Длительностью нот в этом автомате управляет сторожевой таймер watchdog.

Прошивка для ATtiny13:

;******************************************************************************
;********** Шутка Баха звучит на порту PB2 микроконтроллера ATtiny13 **********
;***** Created: 2015-02-20 03:27 ******** Site: http://integrator.adior.ru ****
;******************************************************************************
.includepath "/home/dior/AVR"		; Папка с файлами заголовками         
.include "tn13def.inc"			; Используем ATtiny13                 
;==============================================================================
; PB5  1-я ножка подключить кнопку RESET                              ╔═════╗ +
; PB3  2-я ножка через резистор 150 Ом подключить динамик.  ┌────√────║1   8║──
; GND  4-я ножка общий (питаниe, динамик, RESET)            ├──Ω───∆──║2   7║─
; VCC  8-я ножка питание + 3...5 В.                         │        ─║3   6║─
;                                                           ├─────────║4   5║─
;                                                           ┴         ╚═════╝
;==============================================================================
; Макросы для установки длительности ноты
	.macro len128
		ldi r24, 64		; 16 мс
	.endm
	.macro len64
		ldi r24, 65		; 32 мс
	.endm
	.macro len32
		ldi r24, 66		; 64 мс
	.endm
	.macro len16
		ldi r24, 67		; 125 мс
	.endm
	.macro len8
		ldi r24, 68		; 250 мс
	.endm
	.macro len4
		ldi r24, 69		; 500 мс
	.endm
	.macro len2
		ldi r24, 70		; 1000 мс
	.endm
	.macro len1
		ldi r24, 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, DDB3		; PB3 будет работать на выход
		sbi PORTB, PORTB3	; PB3 установить в 1.
		in r23, PORTB		; Загрузить в буфер R23 состояние порта B
		ldi r25, 24		; Установка WDE и WDCE (разрешение изменения конфигурации watchdog)
main:					; В МИРЕ ЖИВОТНЫХ
;си2
		ldi XL, 3		; Высота ноты (младший байт)
		ldi XH, 5		; Высота ноты (старший байт)
		len8			; Длительность ноты
		rcall duratone		; Вызов подпрограммы синтезатор ноты
;ре3
		ldi XL, 55
		ldi XH, 4
		len16
		rcall duratone
;до3#
		ldi XL, 119
		ldi XH, 4
		len16
		rcall duratone
;-----
;фа2#
		ldi XL, 177
		ldi XH, 6
		len8
		rcall duratone
;си2
		ldi XL, 3
		ldi XH, 5
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ре2
		ldi XL, 111
		ldi XH, 8
		len8
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ре2
		ldi XL, 111
		ldi XH, 8
		len16
		rcall duratone
;-----
;си1
		ldi XL, 8
		ldi XH, 10
		len4
		rcall duratone
;фа1#
		ldi XL, 100
		ldi XH, 13
		len16
		rcall duratone
;си1
		ldi XL, 8
		ldi XH, 10
		len16
		rcall duratone
;ре2
		ldi XL, 111
		ldi XH, 8
		len16
		rcall duratone
;си1
		ldi XL, 8
		ldi XH, 10
		len16
		rcall duratone
;-----
;до2#
		ldi XL, 240
		ldi XH, 8
		len16
		rcall duratone
;си1
		ldi XL, 8
		ldi XH, 10
		len16
		rcall duratone
;до2#
		ldi XL, 240
		ldi XH, 8
		len16
		rcall duratone
;си1
		ldi XL, 8
		ldi XH, 10
		len16
		rcall duratone
;ля1#
		ldi XL, 161
		ldi XH, 10
		len16
		rcall duratone
;до2#
		ldi XL, 240
		ldi XH, 8
		len16
		rcall duratone
;ми2
		ldi XL, 131
		ldi XH, 7
		len16
		rcall duratone
;до2#
		ldi XL, 240
		ldi XH, 8
		len16
		rcall duratone
;------
;ре2
		ldi XL, 111
		ldi XH, 8
		len8
		rcall duratone
;си1
		ldi XL, 8
		ldi XH, 10
		len8
		rcall duratone
;си2
		ldi XL, 3
		ldi XH, 5
		len8
		rcall duratone
;ре3
		ldi XL, 55
		ldi XH, 4
		len16
		rcall duratone
;до3#
		ldi XL, 119
		ldi XH, 4
		len16
		rcall duratone
;-------
;фа2#
		ldi XL, 177
		ldi XH, 6
		len8
		rcall duratone
;си2
		ldi XL, 3
		ldi XH, 5
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ре2
		ldi XL, 111
		ldi XH, 8
		len8
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ре2
		ldi XL, 111
		ldi XH, 8
		len16
		rcall duratone
;-----
;си1
		ldi XL, 8
		ldi XH, 10
		len4
		rcall duratone
;ре2
		ldi XL, 111
		ldi XH, 8
		len16
		rcall duratone
;до2#
		ldi XL, 240
		ldi XH, 8
		len16
		rcall duratone
;ре2
		ldi XL, 111
		ldi XH, 8
		len8
		rcall duratone
;------
;ре2
		ldi XL, 111
		ldi XH, 8
		len16
		rcall duratone
;до2#
		ldi XL, 240
		ldi XH, 8
		len16
		rcall duratone
;ре2
		ldi XL, 111
		ldi XH, 8
		len8
		rcall duratone
;си2
		ldi XL, 3
		ldi XH, 5
		len8
		rcall duratone
;ре2
		ldi XL, 111
		ldi XH, 8
		len8
		rcall duratone
;-------
;ре2
		ldi XL, 111
		ldi XH, 8
		len8
		rcall duratone
;до2#
		ldi XL, 240
		ldi XH, 8
		len8
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ми2#
		ldi XL, 23
		ldi XH, 7
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len8
		rcall duratone
;-------
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ми2#
		ldi XL, 23
		ldi XH, 7
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len8
		rcall duratone
;ре3
		ldi XL, 55
		ldi XH, 4
		len8
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len8
		rcall duratone
;-----
;фа2#
		ldi XL, 177
		ldi XH, 6
		len8
		rcall duratone
;ми2#
		ldi XL, 23
		ldi XH, 7
		len8
		rcall duratone
;до2#
		ldi XL, 240
		ldi XH, 8
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ля2
		ldi XL, 160
		ldi XH, 5
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;-------
;соль2#
		ldi XL, 246
		ldi XH, 5
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;соль2#
		ldi XL, 246
		ldi XH, 5
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ми2#
		ldi XL, 23
		ldi XH, 7
		len16
		rcall duratone
;соль2#
		ldi XL, 246
		ldi XH, 5
		len16
		rcall duratone
;си2
		ldi XL, 3
		ldi XH, 5
		len16
		rcall duratone
;соль2#
		ldi XL, 246
		ldi XH, 5
		len16
		rcall duratone
;------
;ля2
		ldi XL, 160
		ldi XH, 5
		len16
		rcall duratone
;соль2#
		ldi XL, 246
		ldi XH, 5
		len16
		rcall duratone
;ля2
		ldi XL, 160
		ldi XH, 5
		len16
		rcall duratone
;соль2#
		ldi XL, 246
		ldi XH, 5
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ля2
		ldi XL, 160
		ldi XH, 5
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ми2#
		ldi XL, 23
		ldi XH, 7
		len16
		rcall duratone
;------
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ля2
		ldi XL, 160
		ldi XH, 5
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ми2#
		ldi XL, 23
		ldi XH, 7
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;до3#
		ldi XL, 119
		ldi XH, 4
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ми2#
		ldi XL, 23
		ldi XH, 7
		len16
		rcall duratone
;------
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ре3
		ldi XL, 55
		ldi XH, 4
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ми2#
		ldi XL, 23
		ldi XH, 7
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ре3
		ldi XL, 55
		ldi XH, 4
		len16
		rcall duratone
;до3#
		ldi XL, 119
		ldi XH, 4
		len16
		rcall duratone
;си2
		ldi XL, 3
		ldi XH, 5
		len16
		rcall duratone
;------
;до3#
		ldi XL, 119
		ldi XH, 4
		len16
		rcall duratone
;ля2
		ldi XL, 160
		ldi XH, 5
		len16
		rcall duratone
;соль2#
		ldi XL, 246
		ldi XH, 5
		len16
		rcall duratone
;фа2#
		ldi XL, 177
		ldi XH, 6
		len16
		rcall duratone
;ля2
		ldi XL, 160
		ldi XH, 5
		len8
		rcall duratone
;соль2#
		ldi XL, 246
		ldi XH, 5
		len8
		rcall duratone
;------
;фа2#
		ldi XL, 177
		ldi XH, 6
		len4
		rcall duratone
;======
stop:		rjmp stop		; Останов или бесконечный цикл

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

watchdog:
		pop r21			; Снять со стека адрес последней подпрограммы
		pop r21			; чтобы вернуться в главную программу
		reti			; Возврат из прерывания

duratone:				; Подпрограмма синтезатор ноты
		out WDTCR, r25		; Разрешение изменения конфигурации watchdog
		wdr			; сброс сторожевого таймера
		out WDTCR, r24		; Установка периода сторожевого таймера
		sei			; Разрешить прерывания
		rcall play		; Вызов подпрограммы генератор тона
		cli			; Запретить прерывания
		ret			; Возврат из подпрограммы

play:					; Подпрограмма генератор тона
		movw YL, XL		; ╔Загрузить в счетчик Y длительность полупериода из X
		swap r23		; ║Поменять местами полубайты в r23
		out PORTB, r23		; ║Инвертировать сигнал на PB2
halfcycle:	sbiw YH:YL,1		; ║╔Y=Y-1 (65535...0)
		brcc halfcycle		; ║╚Повторять пока не было переноса
		rjmp play		; ╚Повторять в ожидании прерывания
stoptone:	ret			; Возврат из подпрограммы
;==============================================================================
; Задействованы регистры
; Y : YL=R28, YH=R29 счетчик полупериода сигнала
; X : XL=R26, XH=R27 буфер, хранит длительность полупериода для счетчика Y 
; R25 разрешение изменения конфигурации watchdog
; R24 время задержки сторожевого таймера
; R23 буфер порта ввода вывода PORTB
; R21 буфер стека

; F=1200000/(n+2)
; n=1200000/f - 2
; где n=X=XH*256+XL

;==============================================================================
; Компилировать 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

Коды нот можно посмотреть в статье Музыкальный автомат на ATtiny13. В мире животных. Так же Вам может быть интересна статья Расчет времени выполнения программы на МК Atmel AVR.

Ноты Шутка из оркестровой сюиты №22 И.С. Баха