hpad [BEh] .RW_Bytea, # 1hdelayCRC, # 0A, # 0FFhRW_Byte; byte 0.fTEMPER_L, A; Молодший байт температурі.DO_CRCA, # 0FFhRW_Byte; byte 1.fTEMPER_H, A; Старший байт температурі.DO_CRC
; Далі 8 непотрібніх байт (зчітуємо только для формирование CRC) .A, # 0FFhRW_Byte; byte 2.DO_CRCA, # 0FFhRW_Byte; byte 3.DO_CRCA, # 0FFhRW_Byte; byte 4.DO_CRCA, # 0FFhRW_Byte; byte 5.DO_CRCA, # 0FFhRW_Byte; byte 6.DO_CRCA, # 0FFhRW_Byte; byte 7.DO_CRC
; Зчітуємо CRC.A, # 0FFhRW_Byte; byte 8 (CRC) .CA, CRC; A=A - CRCGT_CRC_OKA, # ??10Big_DelayCRC_OKGT_exit_CRC_OK:; Если CRC - ok.CRC_OK
; превращение и вивід температури. 0-99градусів
; если температура буде від'ємна - в регістрі fTEMPER_h буде значення FF
; значення после комі зберігаються в молодшій тетраді регістра fTEMPER_la, fTEMPER_la, # 0f0h; Множимое на маску, позбавлючісь значень после коміa; значення молодшого байту - в молодших розряда акумцлятораfTEMPER_l, a; нове значення температуріa, fTEMPER_h b, # 16; значення старшого байту AB; перемножуємо на множнік - 16, - результат у акумуляторіa, fTEMPER_l; додаю значення молодшого байту
.1 Проведення АНАЛІЗУ даних Із температурного датчика
jb type_dat, nnext7_1next7_1_1: r0, ar1, # 1, no11a, # 17 e1no1p2.0p2.2 GT_exno1: a, # 6e1no2p2.2p2.0GT_exno2: p2.2p2.0GT_ex: r1, # 2 , no21a, # 19e2no1p2.0 p2.2GT_exno1: a, # 5e2no2p2.0p2.2GT_exno2: p2.2p2.0GT_ex: r1, # 3, no31a, # 18e3no1p2.0p2.2 GT_exno1: a, # 4e3no2p2.2p2.0Gt_exno2: p2.2p2.0GT_ex: r1, # 4, no41a, # 21e4no1p2.0p2.2 GT_exno1: a, # 4e4no2p2.0p2.2Gt_exno2: p2.2p2.0GT_ex: a, # 25e5no1p2.2p2.0 GT_exno1: a, # 6e5no2p2.0p2.2GT_exno2: p2.0p2.2_ex: a, r0
b, # 10; розбіваю значення ab; на два чіслаa; збирать значення a, b; докупи в акумуляторіp1, a
; віводжу в порт на індикатор 1GT_exit
.2 Проведення АНАЛІЗУ даних Із датчика вологості
next7_1: r0, ar1, # 1, no1a, # 30e1nop2.1 GT_exit1 no: p2.1GT_exit1: r1, # 2, no2a, # 60e2nop2.1 GT_exit1no: p2.1Gt_exit1: r1, # 3, no3a, # 35e3nop2.1 GT_exitno: p2.1Gt_exit1: r1, # 4, no4a, # 70e4nop2.1 GT_exitno: p2.1Gt_exit: a, # 40e5nop2.1 GT_exit1no: p2.1_exit1: a, r0b, # 10; розбіваю значення ab; на два чіслаa; збирать значення a, b; докупи в акумуляторіp3, a; віводжу в порт на індикатор 2_exit :; вихід з GetTemp:
; ========================================= ============= _ 1Wire_1:; Скідаємо лінію на годину, біля 500 мкс. == 1 datchikT_1WIRE_1A, # 165; (500 - 4)/3=165delayT_1WIRE_1
; Пропускаємо імпульс прісутностіA, # 165; (500 - 4)/3=165delay
;-----------------------------------------------------------------------------_1Wire_2: ; Скідаємо лінію на годину, біля 500 мкс. == 2 datchikT_1WIRE_2A, # 165; (500 - 4)/3=165delayT_1WIRE_2
; Пропускаємо імпульс прісутностіA, # 165; (500 - 4)/3=165delay
;------------------------------------------------------------------------------:fCOUNTER,A_Loop36:; 1 us.fCOUNTER, D_Loop36; 2 us.
;-----------------------------------------------------------------------------_delay: ;=770 * x + 1 x=(delay - 5)/770 ВРАХОВУЮЧИ виконан call і return.fCOUNTER2, AfCOUNTER, # 0_Loop94 :; 1 us.fCOUNTER, BD_Loop94; 2 us.fCOUNTER2, BD_Loop94; 2 us.
; ========================================= =============
; Ф-ція вводу/виводу на лінію 1-Wire. по черзі, зсуваючі вправо значення в А зчітуємо лінію и формуємо байт
; Виводимо з A і зчітуємо в A._Byte: fTEMP, AR2, # 8
; --------------------------- цикл: A, fTEMP; Повертаємо значення в акумуляторtype_dat, next2_1T_1WIRE_1; Обнуляємо вихід. 1 datnext2_2_1: clr T_1WIRE_2; Обнуляємо вихід. 2 dat_2: ACC.0, RB_Skip01type_dat, next3_1T_1WIRE_1; Встановлюємо вихід. 1 datnext3_2_1: setb T_1WIRE_2; Встановлюємо вихід. 2 dat_2: _Skip01: AACC.7; Пріймаємо в тій самий TEMP, з которого передаємоtype_dat, next4_1T_1WIRE_1, RB_Skip02next4_2_1: jnb T_1WIRE_2, RB_Skip02_2: ACC.7_Skip02: fTEMP, A; зберігаємо значення
; далі даємо годину на звільнення Лінії ведення девайсом (release=до 45 мкс.) A, # 14; (60 - 4)/3=18delay
; Відпускаємо лінію.type_dat, next5_1T_1WIRE_1next5_2_1: setb T_1WIRE_2_2:
; трішки відпочіваємо (на всякий пожежний) .A, # 1 delay
; Если 8 біт, то віходімо з ціклу.R2, RBLoop; послідовно зчітуємо 8 біт (лічильник рег.R2)
; ------------------ цикл
; чинний байт.A, fTEMP; запісуємо значення сформованому бай...