/////
; завантажимо константиDPTR, # constQ0; константа Q0A, # 00h; старший байтA, @ A + DPTR; Q0, A; старший байтA, # 01h; молодший байтA, @ A + DPTRQ0 +1, A; молодший байтDPTR, # constK; уставка KA, # ​​00h; A, @ A + DPTR; K, A; DPTR, # constA0; константа A0A, # 00h; старший байтA, @ A + DPTR; A0, A; старший байтA, # 01h; молодший байтA , @ A + DPTRA0 +1, A; молодший байтDPTR, # constA1; константа A1A, # 00h; A, @ A + DPTR; A1, A
;//////////////////////////////////// IE, # 0BFh; дозволимо прериванія_CYCLE: DPTR, # 0C000hA, @ DPTR; введемо X1 - X4DPTR, # 0D000h @ DPTR, A; виведемо X1 - X4CALC_Q1; порахуємо Y1no_Y1; перевіряємо, чи треба виводити Y1Y1Y1_DELAY; затримка 90 мсY1_Y1:
; введемо Х5, Х6, Х7Y1AINPUTCALC_Q2Y2_OR_Y3CALC_Q4OUTP_Y4IND
; DELAYWDI; скинемо watchdogWDIR7, # 6_DELAY1: TMOD, # 00000001b; режим таймера 0 - счетчікTH0, # HIGH (65536-536) TL0, # LOW (65536-536) TR0; запустимо таймер_DELAY: jnb TF0, MAIN_DELAY; почекали 65 мсTF0TR0R7, MAIN_DELAY1MAIN_CYCLE
;////////////////////////////////
; розрахунок Q1_Q1: A; введемо значення X1X1, CA; висунемо другий біт Иc, X1; зробимо OR з первимX1, C; збережемо результатA; висунемо третій біт Иc, X1; зробимо OR з предидущімX1, C; збережемо результатA; висунемо четвертий біт Иc, X1; зробимо OR з попереднім
; кінець, результат 0 або 1 утворився у прапорі З
;////////////////////////////////
; затримка для Y1_DELAY: TMOD, # 00000001b; режим таймера 0 - счетчікTH0, # HIGH (65536-60000) TL0, # LOW (65536-60000) TR0; запустимо таймер_DELAY_M1: TF0, Y1_DELAY_M1; почекали 60 мс, треба ще 30TF0TR0TH0, # HIGH (65536-30000) TL0, # LOW (65536-30000) TR0; запустимо таймер_DELAY_M2: TF0, Y1_DELAY_M2; почекали ще 30 мсTF0TR0
;//////////////////////////////// /: DPTR, # 8000h; вибір каналу мультіплексораA, # 00h @ DPTR, A; виставимо номер каналу; подождемR1, # N5; адресу першого байта масиву N5R7, # N; в масиві 10 елементов_CYCLE_N5: CONVST; включення АЦП; очікування переходу АЦП із сплячого в нормальний режімCONVST; захоплення сигналу і запуск конвертації на АЦПSlvAdr, # ADC_ADDR; завантажимо адресу із запитом запису - останній біт "0" R0, # RcvDat; ByteCnt, # 2; RcvData; так як процедура читання сама збільшує адресу на 1, то сама сформує адресу із запитом на чтеніеR0A, # 01hA, @ R0 ; приберемо з старшого байта старші 4 біти @ R1, A; запишемо старший байт елемента масиву N5R0; адресу молодшого байта з АЦПR1; адресу наступного байта масиву N5A, @ R0; молодший байт з АЦП @ R1, A; молодший байт елемента масиву N5R1; адреса наступного елемента масиву N5R7, AINPUT_CYCLE_N5R1, # N6R7, # NDPTR, # 8001h; вибір каналу мультіплексораA, # 00h @ DPTR, A; виставимо номер каналу; подождем_CYCLE_N6: CONVST; включення АЦП; очікування переходу АЦП із сплячого в нормальний режімCONVST; захоплення сигналу і запуск конвертації на АЦПSlvAdr, # ADC_ADDR; завантажимо адресу із запитом запису - останній біт "0" R0, # RcvDat; ByteCnt, # 2; ...