ЗАДАЧА 4.1 Написать программу, обеспечивающую программное управление по трем каналам в соответствии с циклограммой Таблица 6 Такт Т0 Т1 Т2 Т3 Т4 Т5 Канал1 3F 06 5B 4F 66 6D Канал2 3F 5B 66 7D 7F 77 Канал3 06 4F 6D 07 6F 5D В качестве выходных портов использовать адреса индикаторов 2,4,6. Длительность такта принять равной 1.5 сек. Программу управления представим в виде массива и расположим в ячейках памяти 82А0, 82А1, . 82А0=3F; | 82А1=3F; | такт 0 82А2=06; | 82А3=06; | 82А4=5B; | такт 1 82А5=4F; | 82А6=5B; | 82А7=66; | такт 2 82А8=6D; | 82А9=4F; | 82AA=7D; | такт 3 82AB=07; | 82AC=66; | 82AD=7F; | такт 4 82AE=6F; | 82AF=6D; | 82B0=77; | такт 5 82B1=5D; | Для отсчета временных интервалов используем подпрограмму задержки, представляющую собой три вложенных цикла с количеством повторений x,y.z (эти величины определим ниже): 8270=06; DEL: MVI B,X ; 7т 8271=0D; 8272=0E; M1: MVI C,Y ; 7т 8273=FA; 8274=16; M2: MVI D,Z ; 7т 8275=3C; 8276=15; M3: DCR D ; 5т 8277=C2; JNZ M3 ; 10т 8278=76; 8279=82; 827A=0D; DCR C ; 5т 827B=C2; JNZ M2 ; 10т 827C=74; 827D=82; 827E=05; DCR B ; 5т 827F=C2; JNZ M1 ; 10т 8280=72; 8281=82; 8282=C9; RET ; 10т Чтобы определить числа x,y,z, найдем количество тактов, соответствующие приведенной программе: N = 7+x(7+y(7+z(5+10)+5+10)+5+10)+10 или после преобразований N = 15xyz + 22xy + 22x + 17 По условию задачи требуется обеспечить задержку на 1.5c, что при частоте тактового генератора 2МГц соответствует количеству тактов N = 3000000. Подбор значений x,y,z дает x=13; y=250; z=60 (с точностью 0,1%). Для отображения информации на 8-ми разрядном дисплее составим подпрограмму индикации, которая на каждом такте выбирает из массива по три числа и пересылает их по адресам каналов 1, 2, 3: 8250=7E; IND: MOV A,M 8251=32; STA 83F9H ; канал 1 8252=F9; 8253=83; 8254=23; INX H 8255=7E; MOV A,M 8256=32; STA 83FBH ; канал 2 8257=FB; 8258=83; 8259=23; INX H 825A=7E; MOV A,M 825B=32; STA 83FDH ; канал 3 825C=FD; 825D=83; 825E=23; INX H 825F=C9; RET Тогда головная программа имеет вид: 8200=21; M0: LXI H,82A0H ; начальный адрес массива 8201=A0; 8202=82; 8203=1E; MVI E,06H ; число тактов 8204=06; 8205=CD; M1: CALL IND ; индикация 8206=50; 8207=82; 8208=CD; CALL DEL ; задержка 8209=70; 820A=82; 820B=1D; DCR E 820C=C2; JNZ M1 ; следующий такт. 820D=05; 820E=82; 820F=C3; JMP M0 8210=00; 8211=82;
ЗАДАЧА 4.2 Написать программу, обеспечивающую перемещение объекта по позициям обработки в соответствии с графом:
Для отображения информации использовать 8-разрядный дисплей. Положение объекта в 2-й позиции отобразить символом "8" в соответствующем разряде. Время обработки определить по формуле ti=0,1(i + 18). Для этого варианта время нахождения объекта в каждой позиции равно: t1=1,9 сек.; t2=2 сек.; t3=2,1 сек.; t4=2,2 сек.; t5=2,3 сек.; t6=2,4 сек.; t7=2,5 сек.; t8=2,6 сек. Для измерения временных интервалов используем подпрограмму, время задержки для которой определяется содержимым аккумулятора: t=0,1*А (сек). 8270 06 DEL: MVI B,34H ; 7 тактов 8271 34 8272 0E M1: MVI C,FFH ; 7 тактов 8273 FF 8274 0D M2: DCR C ; 5 тактов 8275 C2 JNZ M2 ; 10 тактов 8276 74 8277 82 8278 05 DCR B ; 5 тактов 8279 C2 JNC M1 ; 10 тактов 827A 72 827B 82 827C 3D DCR A ; 5 тактов 827D C2 JNZ DEL ; 10 тактов 827E 70 827F 82 8280 C9 RET ; 10 тактов. Из чисел ti сформируем массив, который разместим в ячейках 82А0, 82А1,...: 82А0 I3 ; t1 82А1 I4 ; t2 82А2 I5 ; t3 82А3 I6 ; t4 82А4 I7 ; t5 82А5 I8 ; t6 82А6 29 ; t7 82А7 2A ; t8 82А8 00 ; конец. Головная программа осуществляет необходимые начальные ус- тановки (адрес первого элемента массива, адрес первого индика- тора), а также перемещение символа "9" по разрядам дисплея: 8200 21 M0: LXI H,83F8H ; адрес 1-го индикатора 8201 F8 8202 83 8203 11 LXI D,82A0 ; начальный адрес массива 8204 A0 8205 82 8206 36 M1: MVI M,6FH ; вывод "9" 8207 6F 8208 1A LDAX D ; А <-- Т(I) 8209 CD CALL DEL ; задержка 820A 70 820B 82 820C 36 MVI M,00H ; выключение индикатора 820D 00 820E 23 IND H ; след. индикатор 820F 13 IND D ; след. знач. Т(I) 8210 7D MOV A,L 8211 FE CPI 00H ; конец ? 8212 00 8213 C2 JNZ M1 8214 06 8215 82 8216 C3 JMP M0 8217 00 8218 82