Датчик кода "МО" на ATTiny-12.
Код программы на ассемблере.

;##############################################
;##                                          ##
;##            Датчик кода                   ##
;##############################################

;------------------------- Псевдокоманды управления

.include "tn12def.inc"    ; Присоединение файла описаний
.list                    ; Включение листинга

;------------------------- Начало программного кода

.cseg                 ; Выбор сегмента программного кода
.org    0                ; Устанеовка текущего адреса на ноль

.def    temp = r20    ; Определение главного рабочего регистра
.def    a = r16    ; Звук
.def    b = r17    ; Длительность посылки
.def    c = r18    ; Число посылок
.def    d = r19

;-------------------------- Инициализация стека
   
        ldi        temp, 0x7F    ; Выбор адреса вершины стека
        out        SPL, temp    ; Запись его в регистр стека


;-------------------------- Инициализация портов ВВ

        ldi        temp, 0x03    ; Записываем число $FF в регистр temp
        out        DDRB, temp    ; Записываем это число в DDRB (порт PB на вывод)
        ldi        temp, 0   
        out        PORTB, temp    ; Записываем то же число в PORTB


;--------------------------- Инициализация компаратора

        ldi     temp, 0x80    ; Выключение компаратора
        out        ACSR, temp

;-------------------------- Начало основного цикла
main:
v:      ldi     c,   2
        Ldi     b,    255
        rcall   t       
        rcall   p
        rcall   p
        rcall   p
        ldi     c,   3
        rcall   t
        rcall   p
        rcall   p
        rcall   p
        rcall   p
        rcall   p
        rjmp    v
;---------------------------Подпрограмма тире, точек
t:      mov     temp,  b
m1:     sbi     PORTB, 0
m2:     sbi     PORTB, 1
        ldi     a,   220
m3:     dec     a
        brne    m3
        cbi     PORTB, 1
        ldi     a,   220
m4:     dec     a
        brne    m4
        dec     temp
        brne    m2
        rcall   p
        dec     c
        brne    t
        ret
;---------------------------Подпрограмма паузы
p:      cbi     PORTB, 0       
        cbi     PORTB, 1
        ldi     d,   85 
m6:     ldi     a,   220
m5:        dec     a
        brne    m5
        dec     d
        brne    m6
        ret

       

Схема.
На базе этой программы легко можно сделать генератор любой  сложной посылки кодом Морзе.
На выводе РВ1- тональная посылка.

Главная.