;++++++++++++++ Блок опису змінних ++++++++++++++++++++++++++++++++ .EQU AMPL,200FH ; Адреса змінної, яка містить значення амплітуди .EQU Tp,2010H ; Адреса змінної, яка містить значення періоду .EQU Fp,2256 .EQU K,2002H .EQU NV,20F0H ; Адреса змінної, яка містить номер відліку .EQU N,128 ; Кількість відліків .EQU DAC,00H ; Порт ЦАП .EQU INDYK,01H ; Порт індикатора .EQU KLAVA,10H ; Порт клавіатури ;----------------------------------------------------------------- .ORG 2701H .DB 7DH,52H,00H,4DH ; Коди чисел 1,2,4 для індикатора ; 1 = 0111 1101 ; 2 = 0101 0010 ; 4 = 0100 1101 ;++++++++++++++ Масив відліків ++++++++++++++++++++++++++++++++++++ .ORG 0400H .DB 80H,86H,8CH,92H,98H,9FH,A5H,ABH,B0H,B6H,BCH,C1H,C7H,CCH,D1H,D5H .DB DAH,DEH,E2H,E6H,EAH,EDH,F0H,F3H,F6H,F8H,FAH,FCH,FDH,FEH,FFH,FFH .DB FFH,FFH,FFH,FEH,FDH,FCH,FAH,F8H,F6H,F3H,F0H,EDH,EAH,E6H,E3H,DEH .DB DAH,D6H,D1H,CCH,C7H,C1H,BCH,B6H,B1H,ABH,A5H,9FH,99H,92H,8CH,86H .DB 80H,79H,73H,6DH,67H,61H,5BH,55H,4FH,49H,43H,3EH,39H,33H,2EH,2AH .DB 25H,21H,1DH,19H,15H,12H,0FH,0CH,09H,07H,05H,03H,02H,01H,00H,00H .DB 00H,00H,00H,01H,02H,03H,05H,07H,09H,0CH,0EH,12H,15H,18H,1CH,20H .DB 25H,29H,2EH,33H,38H,3DH,43H,48H,4EH,54H,5AH,60H,66H,6CH,73H,79H ;------------------------------------------------------------------ ;++++++++++++++ Блок ініціалізації ++++++++++++++++++++++++++++++++ .ORG 0 LXI SP,2800H ; Об’явити стек LXI H,200FH MVI A,01H ; Присвоїти AMPL значення 1 MOV M,A INX H MOV M,A ; Присвоїти Tp значення 1 MVI A,82H ; Запрограмувати паралельний OUT 03H ; інтерфейс ;----------------------------------------------------------------- STARTNV:MVI A,00H STA NV ; Присвоїти NV=0(NV-номер відліка) ;++++++++++++++ Перевірити чи К=0 ++++++++++++++++++++++++++++++++ STARTK: LHLD K MOV A,H CPI 00H ;Перевірити чи К=0 JZ STKL ;Якщо К=0 то перейти на підпр. опит. клав. DCX H ;інакше - зменшити К на 1 SHLD K JMP START ;Перейти на START ;----------------------------------------------------------------- STKL: CALL KLAV ;Опитування клавіатури ;++++++++++++++ Вивід на індикатори значення AMPL та Tp ++++++++++ START:MVI B,27H ; 2701h - адреса коду для виводу значення LDA AMPL ; амплітуди чи періоду на індикатор MOV C,A LDAX B OUT INDYK ; Вивести значення амплітуди(1,2,4) на індикатор ; 1 = 0111 1101 ; 2 = 0101 0010 ; 4 = 0100 1101 LDA Tp MOV C,A LDAX B XRI C0H ; Декодування значення періоду OUT INDYK ; Вивести значення періоду(1,2,4) на індикатор ; 1 = 1111 1101 ; 2 = 1101 0010 ; 4 = 1100 1101 ;----------------------------------------------------------------- ;++++++++++++++ Вивід значення відліку сигналу на ЦАП ++++++++++++ LDA NV MOV D,A MVI B,04H MOV C,D LDAX B MOV D,A A1: LDA AMPL CPI 01H ; Якщо AMPL=1 - вивести значення відліку JNZ A2 MOV A,D OUT DAC JMP T1 A2: CPI 02 ; Якщо AMPL=2 - вивести значення відліку/2 JZ A3 MOV A,D RRC ; Поділити значення відліку на 2 ANI 7FH ; Замаскувати 2 старших розряда А OUT DAC ; Вивести значення відліку/2 JMP T1 A3: MOV A,D ; Якщо AMPL=4 - вивести значення відліку/4 RRC ; Поділити значення відліку на 2 RRC ; Поділити значення відліку на 2 ANI 3FH ; Замаскувати 2 старших розряда А OUT DAC ; Вивести значення відліку/4 JMP T1 ;----------------------------------------------------------------- ;++++++++++++++ Організація затримки +++++++++++++++++++++++++++++ T1: LDA Tp ; Якщо Tp=1 – затримка dT CPI 01H JZ T2 ;(WAIT DT) JMP NPP T2: CPI 02H ; Якщо Tp=2 – затримка 2*dT JZ T3 ;(WAIT 2DT) JMP NPP T3: ;(WAIT 4DT) ; Якщо Tp=4 – затримка 4*dT ;----------------------------------------------------------------- ;++++++++++++++ Організація переходу до наступного відліку +++++++ NPP: LDA NV INR A ;Збільшити індекс для масиву значень відліків STA NV CPI N ;Перевірити чи номер відліку=N (N=128) JZ STARTNV ;якщо так - перейти на STARTNV JMP STARTK ;інакше перейти на STARTK ;----------------------------------------------------------------- ;++++++++++++++ Підпрограма опитування клавіатури ++++++++++++++++ .ORG 0700H KLAV: IN KLAVA ; Ввести байт даних з порту клавіатури ANI 03H ; перевірити чи натиснеі клавіші JZ Kp ; якщо ні - перехід на Kp CPI 02H ; Перевірити, чи натиснена клавіша зміни періоду JZ Zt ; якшо так - змінити період ; якщо ні - перейти на Kp LDA AMPL ; Зміна амплітуди RLC STA AMPL CPI 08H JNZ Kp MVI A,01H ; Якщо AMPL=8 STA AMPL ; занести в AMPL 1 JMP Kp ; якщо ні - перейти на Kp Zt: LDA Tp ; Зміна періоду RLC STA Tp CPI 08H JNZ Kp MVI A,01H STA Tp Kp: LXI H,Fp ; Присвоїти К значення Fp(Fp=2256) SHLD K RET ; Вихід з підпрограми ;----------------------------------------------------------------- ;++++++++++++++ Підпрограма затримки +++++++++++++++++++++++++++++ .ORG 0750H WAIT: DCX B MOV A,B ORA C JNZ WAIT ;-----------------------------------------------------------------