Додаток 1. Лістинг програми.
chas equ 10000 ; час затримки 10 мс.
chasx equ 65535-chas
org 0000 ; вектор рестарту
jmp start
org #0Bh ; вектор обробки переривання від таймера
jmp timer
org #0100h ; адреса початку програми
start: mov SP, #10H ; 3-ій банк регістрів використаємо під стек
anl PSW, #0EFH ; перемикання на 1-ий банк
orl PSW, #08h
mov P1, #0FFh ; всі розряди встановлюємо 1
mov P2, #0FFh ;
mov P3, #0FFh ;
mov R6, #10h ; сигнал вибору діапазону
X1: mov R3,#0h
mov IP, #00h ; пріоритет переривань
mov IE, #00h ; заборона переривань
mov TMOD, #01h ; задання режиму роботи лічильника
cjne R6, #010h, mit ; вибір транзистора для розряджання конденсатора
cjne R6, #020h, mit
mov P1, #04h
mit: mov P1, #02h
mov DPTR, #chasx; ; запис у таймер
mov TH0, DPL
mov TL0,DPH
setb ET0 ; дозвіл переривань від лічильника
setb EA ; глобальний дозвіл
setb TR0 ; запуск лічильника
mov P1, R6 ; початок заряду

X2: cjne R3, #0, X3 ; перевірка ознаки переривання
mov A, P1
jz X2
mov TCON,#0h ; зупинка таймера
mov R2,TL0 ; заносимо молодший розряд в R2
mov R7,TH0 ; заносимо молодший розряд в R7
call decode ; виклик підпрограми дешифрації
jmp X1
X3: mov A, R6
rlc A ; зміна діапазону
jc error ; підпрограма помилки
mov R6, A
jmp X2
error: mov P2, #0h
mov P3, #0h
z: jmp z
Підпрограма конвертування у двійково-десяткову
decode: mov A, R7
push Acc
mov A, R2
push Acc
anl PSW, #0E7H ; перемикання на 0-ий банк регістрів
pop Acc
mov R0, A
pop Acc
mov R1, A
mov B, #5
Conv: mov R3, #0
mov R2, #0Ah
push B
call UDIV16
pop B
mov A, R2 ; збереження залишку в стеку
push Acc
djnz B, Conv
Wled: pop Acc ; індикація старшого розряду
pop Acc
anl A, #0Fh;
mov P2, A
pop Acc
rlc A
rlc A
rlc A
rlc A
anl A, #0F0h
orl P2, A
pop Acc
anl A, #0Fh;
mov P3, A
pop Acc ; індикація молодшого розряду
rlc A
rlc A
rlc A
rlc A
anl A, #0F0h
orl P3, A
anl PSW, #0EFH ; перемикання на 1-ий банк
orl PSW, #08h
ret
timer: mov R3, #0h
reti
$include (math.asm)
END