Таймер/счетчик ATtiny13 может быть подключен к выводу PB0/OC0A микросхемы и работать в режиме генератора прямоугольных импульсов. При этом, смена уровня сигнала на выводе PB0/OC0A происходит по совпадению значений в регистре OCR0A и счетном регистре таймера/счетчика.
Для работы таймера счетчика ATtiny13 в качестве генератора использование прерываний не требуется.
;****************************************************************************** ;************* Генератор звука на таймере/счетчике ТО ATtiny13 **************** ;***** Created: 2015-03-18 02:04 ******** Site: http://integrator.adior.ru **** ;****************************************************************************** .includepath "/home/dior/AVR" ; Папка с файлами заголовками .include "tn13def.inc" ; Используем ATtiny13 ;============================================================================== .macro prescal0 ldi r23, 0 ; Таймер/счетчик остановлен out TCCR0B, r23 ; Установка предделителя таймера/счетчика .endm .macro prescal1 ldi r23, 1 ; Предделитель на 1 out TCCR0B, r23 ; Установка предделителя таймера/счетчика .endm .macro prescal2 ldi r23, 2 ; Предделитель на 8 out TCCR0B, r23 ; Установка предделителя таймера/счетчика .endm .macro prescal3 ldi r23, 3 ; Предделитель на 64 out TCCR0B, r23 ; Установка предделителя таймера/счетчика .endm .macro prescal4 ldi r23, 4 ; Предделитель на 256 out TCCR0B, r23 ; Установка предделителя таймера/счетчика .endm .macro prescal5 ldi r23, 5 ; Предделитель на 1024 out TCCR0B, r23 ; Установка предделителя таймера/счетчика .endm ;============================================================================== .cseg .org $000 rjmp reset ; 0 начало программы reti ; 1 Внешнее прерывание 0 reti ; 2 Прерывание по изменению состояния выводов reti ; 3 Переполнение таймера/счетчика ТО reti ; 4 EEPROM готово reti ; 5 Аналоговый компаратор reti ; 6 Совпадение А таймера/счетчика ТО reti ; 7 Совпадение В таймера/счетчика ТО reti ; 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 main: prescal3 ; Установка предделителя таймера счетчика ldi r23, 200 ; Загрузка значения частоты сигнала out OCR0A, r23 ; Загрузка значения частоты сигнала stop: rjmp stop ; Бесконечный цикл ;============================================================================== ; Подпрограммы, обработчики прерываний ;============================================================================== ; Задействованы регистры R23 ; Компилировать 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 можно прочитать в статье Таймер - счетчик T0 микроконтроллера ATtiny13.