Код программы на ассемблере.
;##############################################
;## ##
;## Датчик кода ##
;##############################################
;------------------------- Псевдокоманды управления
.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