множиться число вправоr1; починаючи зі старшого байтаsdvig; якщо число у прапорі с=0, то переходимо на мітку sdvigr4, r8; складовими коефіцієнт К з регістрами під ответr5, r7; з урахуванням перенесення: r5; зрушуємо відповідь вправо, починаючи зі старшого байтаr4r3r16; зменшуємо счетчікmainMul; якщо лічильник став рівний 0 то переходимо на мітку mainMulr7,0x0174; завантажуємо з r7 по r10 коефіцієнт В (старший байт)
lds r8,0x0175r9,0x0176
lds r10,0x0177; молодший байтr3, r10; складовими результат умноженіяr4, r9; коду АЦП на коефіцієнт К з коефіцієнтом Вr5, r8; з урахуванням переносаr6, r7r16, r3; копіюємо відповідь в інші регістри, r17 , r4; для роботи з ними
mov r18, r5r19, r6
ret; виходимо з підпрограми опитування нелінійного датчика
; ************** підпрограма ініціалізації АЦП *********: r17, 0x08; створюємо лічильник, рівний 8: rol r16; рухаємо настроювальний байт вліво,
; що б 1 або 0 виявилися у прапорі Сone; якщо прапор С=0, то перейти на мітку onePORTC, 1; виставляємо на першу лінію порту С 1, для ініціалізацііtwo; перейти на мітку two: cbi PORTC, 1; виставляємо на 1 лінію порту С 0, для ініціалізації: cbi PORTC, 0; перша лінія порту С, яка відповідає за тактовий імпульсPORTC, 0; виставляємо на 0 лінію порту С 1 (тактовий імпульс) PORTC, 0; ставимо 0 , для того, щоб показати, що пройшов 1 імпульсr17; зменшуємо счетчікinit2; якщо r17 НЕ дорівнює 0, то перейти на мітку init2; вихід з підпрограми ініціалізації АЦП
; ********* закінчилася підпрограма ініціалізації АЦП ***********
; ************* подрограмма опитування АЦП ******************: PORTC, 0; встановлюємо лінію , відповідальну за тактові
; імпульси рівний 1 (9 імпульсний такт) PORTC, 0; встановлюємо лінію, що відповідає за тактові
; імпульси рівний 0PORTC, 0; 10 тактовий імпульсPORTC, 0: PINC, 3; перевіряємо третій біт з порту С, якщо він дорівнює 1,
; то наступну команду не виполнятьcheckThreeBit; перейти на мітку checkThreeBitPORTC, 0; 11 тактовий імпульсPORTC, 0: PINC, 3; перевіряємо третього біт з порту С, якщо він дорівнює 1,
; то наступну команду не виполнятьcheckThreeBit2; перейти на мітку checkThreeBit: r22, 0x0C; створюємо лічильник циклу для тактових імпульсів - це для
; 12 разрядногоr20; очищаємо регістри під код ацпr21: PORTC, 0; такт ГТІr16, PINC; копіюємо дані в r16 з порту C МК.
; Але нам потрібен тільки третій біт (PC3),
; так як інші дані є керуючими
; від мк до ацпr16; витягаємо останній біт, що надійшов з порту С (sData) r16; витягаємо 1 бітr16; витягаємо 2 бітr16; отримуємо 3 біт даннихr20; записуємо в регістри r20 і r21 дані, r21; ; які приходять з 3 біта в порте СPORTC, 0; тактовий імпульс робимо рівним 0r22; зменшуємо лічильник на 1mADC2; якщо лічильник не дорівнює 0, то перейти на мітку mADC2PORTC, 0; 24 тактовий імпульсPORTC, 0PORTC, 4; встановлюємо лінію cs в 1 , щоб вимкнути АЦП; вихід з підпрограми опитування АЦП
; ********* закінчилася підпрограма опитування АЦП ***********
; ************** підпрограма ініціалізації АЦП *********: r16, 0b01010001; це налаштовуємо ніжки на вхід і
; вихід (PC3 (SData) -вхід, PC2 (BUSY - EOC) - вхід,
; PC0 (SCLK) - вихід, PC4 (CS) - вихід РС1 (DIN) - вихід)
; ДДР потрібен для того, щоб налаштувати висновки МК.
; 7,6,5 біт - це налаштування по документації
; (там 3 поля, щоб працював вхід СН1=101,
; щоб СН2=010) DDRC, r16; в регістрі знаходяться 8 бітів, кожен визначає як
; працюватиме лінія (вхід, вихід). Лінії які не
; використовуються - на вхід робимо (0), на вихід - 1r17, 0x08; створюємо лічильник, рівний 8Two: r16; рухаємо настроювальний байт вліво,
; що б 1 або 0 виявилися у прапорі Сone2; якщо прапор С=0, то перейти на мітку onePORTC, 1; виставляємо на першу лінію порту С 1, для ініціалізацііtwo2; перейти на мітку two: sbi PORTC, 1; виставляємо на 1 лінію порту С 1, для ініціалізації: cbi PORTC, 0; перша лінія порту С, яка відповідає за тактовий імпульсPORTC, 0; виставляємо на 0 лінію порту С 1 (тактовий імпульс) PORTC, 0; ставимо 0 , для того, щоб показати, що пройшов 1 імпульсr17; зменшуємо счетчікinitTwo; якщо r17 НЕ дорівнює 0, то перейти на мітку initTwo; вихід з підпрограми ініціалізації АЦП
; ********* закінчилася підпрограма ініціалізації АЦП ***********
; ************* підпрограма опитування АЦП ******************: PORTC, 0; встановлюємо л...