Лістинг ПЗ:
$ NOLIST
$ NOMOD51
$ LIST
$ include (fp51s. lib)
; ================================================== ========= AT 0START0x0BPORT_PRER
; ================================================== ========= _main segment CODEPR_mainAT 0x15: ds 1; прапор (0=номер датчика для виведення на дисплей не введений,; 1=запит на виведення Тх 1-го датчика, 2=запит Tx; второго.5=запит Tx 5-го датчика): ds 1; прапор В і Н уставок (0=Н уставка, 1=В уставка): ds 1; прапор-номер датчика (для передачі номера датчика на; якому виявлено помилку в П / П виводу повідомлення про; помилку)
; ================================================== =========
; Початкові установки
; Fsys=500 Khz
; ================================================== =========: MOV CKCON, # 00000111b; T / C TAKT F/12SCON, # 000000000b; Fxtal/12IEN1, # 00000001b; use interrapt from keyboardKBE, # 00001111b; ENABLE INTERRUPR REQUEST FOR P0.4-P0.7TCON, # 01010000b; T/C1 - ON, T/C2 - ONTMOD, # 00010001b; обидва таймери в 16разр режімеTH0TL0TH1TL1:
; ================================================== =========
; MAIN
; програма вимірювання температури
; P0.2-START PIN
; P0.1-END PIN
; R6-DATA ADRESS
; R7-IMPULSE COUNTER
; R4 - BUF FOR SAVE TX
; ================================================== =========: INIT0R7, # 5; завантаження лічильника імпульсовR5, # 20; початковий адресу зберігання Тх: SETB P0.2; START-IMPULSEP0.2P0.1, # 1, $; очікування 1-го рівня на Р0.1TR1: MOV R6, # 0X47h; початковий адресу зберігання Nl і NhP0.1, # 0, $; очікування 0-го рівня на Р0.1TR1TR0 @ R6, TH1; запис в пам'ять Nh для періоду високого уровняR0, R6; запис в R0 адреси комірки (для П / П MAKE_TEMP) R6 @ R6, TL1; запис в пам'ять Nl для періоду високого уровняR1, R6; запис в R1 адреси комірки (для П / П MAKE_TEMP) R6TH1TL1P0.1, # 1, $; очікування 1-го рівня на Р0.1TR0TR1 @ R6, TH0; запис в пам'ять Nh для періоду низького уровняR2, R6; запис в R3 адреси комірки (для П / П MAKE_TEMP) R6 @ R6, TL0; запис в пам'ять Nl для періоду низького уровняR3, R6; запис в R3 адреси комірки (для П / П MAKE_TEMP) MAKE_TEMP; виклик П / П обчислення Tx для виміряного імпульсу
; на вих - 0х40h адресу комірки з цілим Tx
; 0x41h адресу комірки з дес. залишком TxR4, @ 40 @ R5, R4R5R4, @ 41 @ R5, R4CHECH_Tx; виклик П / П порівняння Tx з уставкаміR6TH0TL0R7, CICLE: MOV A, FLAG1NODISPOUT; перевірка прапора запиту виклику, якщо flag=0 то чи не; треба виводітьDISP_TEMP; виклик П / П виведення Tx N-го датчика на дисплей: JMP START
; ================================================== =========
; П / П виведення Тх на дисплей
; вхідні змінні:
; flag1 - значення прапора визначає для якого датчика виводити tx
; результат виконання П / П - висновок Тх N-го датчика на дисплей
; =========================================...