иготливий курсор
. db 0b00001000,0b00000000; Курсор додому
. db 0b00000000,0b00000001; 01h Очищення, курсор додому
; ***************************************** *****************************
; ініціалізація (настройка портів, ініціалізація дисплея)
; ***************************************** *****************************
: temp, LOW (RAMEND)
out spl, temp; установка покажчика стека на дно ОПtemp, 0b00111111; розряди 0-5 порту D на вихід (LCD)
out DDRD, temptemp, 0b11111111portD, temp temp, 0b01000011; 0-2 розряди порту В - входи - кнопки
out DDRB, temp; розряд 3-вихід ШІМ - 3 temp, 0b00111101; запалюємо індикатор «харчування», фотопередатчік в 0
out portB, temp
ldi temp, 0b01100011; розряди 0,1,5 порту D на вихід, 2-4 на вхід
out DDRD, temptemp, 0b11111111
out portD, tempzh, high (izm1); записуємо в ОЗУ початок першого рядка (1 :)
ldi zl, low (izm1) temp, 0x31z + 1, temptemp, 0x3a
std z + 2, temptemp, $ ; символ $ використовується як знак кінця строкіz + 16, tempzh, high (izm2); записуємо в ОЗУ початок другого рядка (1 :)
ldi zl, low (izm2) temp, 0x33z + 1, temptemp, 0x3a
std z + 2, temptemp, $ ; символ $ використовується як знак кінця рядка
std z + 16, temptemp, (1 lt; lt; pcie0)
sts PCICR, temp; дозвіл переривань при зміні стану на входах порту Dtemp, 0b00011100; завдання масок для активації прериванійPCMSK0, temp; переривання дозволені при зміні стану на входах 2-4 порту D
ldi temp, (1 lt; lt; toie1) timsk1, temptemp, (1 lt; lt; cs11) tccr1b, temp
rcall Init_LCD16s2d; Ініціалізація дисплея; дозволяємо переривання
; ***************************************** *****************************
; основний цикл
; ***************************************** *****************************: main; нескінченний цикл очікування натискання на кнопку або приходу імпульсу
; ***************************************** **********************************
; процедура множення
; ***************************************** **********************************
. def mc16uL=r16; молодший байт множника
. def mc16uH=r17; старший байт множника
. def mp16uL=r18; молодший байт множимо
. def mp16uH=r19; старший байт множіжімого
. def m16u0=r12; 1-й байт результату
. def m16u1=r13; 2-й байт результату
. def m16u2=r20; третій байт результату
. def m16u3=r21; 4-й байт результату
. def mcnt16u=r22; лічильник повторень
; ***** Code
mpy16u: clr m16u3 m16u2 mcnt16u, 16 mp16uH mp16uL
u_1: brcc noad8 m16u2, mc16uL m16u3, mc16uH: ror m16u3 m16u2 m16u1 m16u0 mcnt16u
brne m16u_1
; ***************************************** *****************************
; процедура переведення в десятковий формат
; ***************************************** *****************************
. equ AtBCD0=10
. equ AtBCD2=11
. def tBCD0=r10; двійково-десяткове число цифри 0 і 1
. def tBCD1=r11; двійково-десяткове число цифри 2 і 3
. def fbinL=r12; молодший байт двійкового числа
. def fbinH=r13; старший байт двійкового числа
. def cnt16a=r16; лічильник
. def tmp16a=r25; переменнаяBCD16: cnt16a, 16 tBCD1 tBCD0 ZH_1: lsl fbinL fbinH tBCD0 tBCD1 cnt16a bBCDx_2_2: ldi r30, AtBCD2 + 1_3: tmp16a, -Z
tmp16a, - $ 03 tmp16a, 3 Z, tmp16a tmp16a, Z tmp16a, - $ 30 tmp16a, 7 Z, tmp16a ZL, AtBCD0 bBCDx_3
rjmp bBCDx_1
; ***************************************** *****************************
; робота з дисплеєм
; ***************************************** *****************************: Delay40mks; Пауза перед включеніемTemp, 0b10000000WriteCmd; Установка курсору
ldi ZL, Low (izm1) ZH, High (izm1) WriteLn; Висновок 1-й строкіTemp, 0b11000000WriteC...