я регістра r18 в комірці пам'яті
; з адресою 0x0162 старшій0x0163, r17; збереження регістра r17 в комірці пам'яті з адресою 0x01630x0164, r16; збереження регістра r16 в комірці пам'яті з адресою
; 0x0164 младшійPORTB, r19; завантажуємо константу з r19 в PORTBoprosDDN; виклик підпрограми опитування нелінійного
; датчика давленія0x0165, r19; записуємо старший байт в комірці пам'яті
; з адресою 0x01650x0166, r18; збереження регістра r18 в комірці пам'яті
; з адресою 0x01660x0167, r17; збереження регістра r17 в комірці пам'яті
; з адресою 0x01670x0168, r16; записуємо молодший байт в комірці пам'яті
; з адресою 0x0168oprosDKD; виклик п/п опитування ДКД0x0169, r4; записуємо дані з ДКД1 в комірці пам'яті
; з адресою 0x01690x016A, r5; записуємо дані з ДКД2 в комірці пам'яті
; з адресою 0x016A
sbic UCSRA, 7; пропуск команди, якщо 7 біт=0peredacha; виклик п/п передачі даних в ПКmain; перехід на мітку main
; ***************** П/П для обчислення тиску поданого на вхід лінійного датчика тиску ******* x1: r25, 0x00 ; записуємо в регістр r25 нуліr26, 0x0A; записуємо число 10 в 26 регістрr3; очищаємо 4 регістра під відповідь
clr r4r5r6
ldi r16, 0x10; записуємо 16 в лічильник, так як 4 байта і в кожному по 8 біт: r2; рухаємо все множиться число вправоr1; починаючи зі старшого байтаsdvig; якщо число у прапорі с=0, то переходимо на мітку sdvigr5, r19; складовими результат з константою без переносаr6, r25; враховуємо перенесення: r6; рухаємо весь результат вправо 1 раз
ror r5r4r3
dec r16; зменшуємо счетчікmainMul; якщо лічильник не дорівнює 0, то перейти на мітку mainMulr3, r26; складовими результат множення з іншого константою,
; без урахування переносаr4, r25; складаємо з урахуванням переносаr5, r25r16, r3; копіюємо регістр r3, в регістр r16r17, r4; копіюємо регістр r4, в регістр r17r18, r5; копіюємо регістр r5, в регістр r18: ret; виходимо з підпрограми множення
; *************** П/п опитування датчиків контролю тиску ******************* ***: r4; обнуляем r4 під результатPINC, 0; пропускаємо строчку якщо в бите 0 PINC записаний 0DKD2; перехід на мітку DKD2r4; записуємо одиницю в r4: r5; обнуляем r5 під результатPINC, 1; пропускаємо строчку якщо в бите 1 PINC записаний 0vixod; перехід на мітку vixodr5; записуємо одиницю в r4: ret; вихід з підпрограми
; ******************* П/П для передачі даних в ПК ************** *********
peredacha:
ldi r25, 0x0B; лічильник
ldi r31, 0x01; поміщаємо в РП Z адресу комірки ОЗУ
ldi r30, 0x60
cikl :: sbis UCSRA, 5; пропуск команди якщо біт5=1m2; перехід на мітку m2r4, Z +; відправляємо 1 байт даних з лінійного датчікаUDR, r4; завантажуємо в UDR передавача вміст r4
dec r25; зменшуємо лічильник
brne cikl; якщо лічильник не дорівнює 0, то перейти на мітку cikl; вихід з підпрограми:
rcall initADC2; перемикаємо лінію АЦП для прийому даних
rcall oprosADC2; отримуємо код з АЦПr16; логічний зрушення вмісту регістра 16 влевоr16; три рази, щоб потім дізнатися адресу, r16; з якого почнемо діставати коеффіціентиr31, high (tabKuB * 2); завантажуємо з таблиці старший байт коеффіціентаr30, low (tabKuB * 2); завантажуємо з таблиці молодший байт коеффіціентаr15r30, r16; складаємо числа, щоб отримати адресу
; з якого почнемо діставати коеффіціентиr31, r15r18, 0x08; створюємо лічильник рівний 8r27, 0x01; Cоздан реєстрову пару х для того, r28, 0x70; щоб вказати там осередок пам'яті в озу:; береться байт з таблиці і поміщається в регістр r0X +, r0; взяти з r0 і покласти в комірку пам'яті озу,
; яка вказана в реєстрової парі Х,
; після чого збільшити значення РП Х на 1.r30, 0x01; додати 1 до реєстрової парі z, щоб дістати
; наступний байт з табліциr18; зменшити счетчікlpmCheck; якщо лічильник не дорівнює 0 - перейти на мітку lpmCheckr7, 0x0172; завантажуємо з ОЗУ старший байт коефіцієнта k
; в регістр 5r8, 0x0173; завантажуємо з ОЗУ молодший байт коефіцієнта k
; в регістр 6r25, 0x00; обнуляем регістр 25r3; очищаємо 4 регістра під відповідь
clr r4r5r6
ldi r16, 0x10; лічильник, рівний 16
mov r21, r2; завантажуємо в r2 код з АЦП (старший байт)
mov r21, r1; молодший байт: r2; рухаємо все...