Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример подключения цифро-аналогово преобразователя.






 

 

Алгоритм

Фрагмент программы

LXIH ADR MOV А. М OUT ЗОН : в I HL заносятся адрес мл. бита кода: запись в регистр1 (DD2), младший байт в аккумулятор
MVI A. 01H OUT 83H : вкл. Регистра 1(DD2)
MVI А. 00Н OUT 83H : откл. регистра l(DD2)
INX H MOV A, M OUT 80H : адресе старшего байта: старший байт в аккумулятор: старший байт в порт А
MVI A, 03H OUT 83H : вкл. Регистра 2 (DD3)
MVI A, 02H OUT 83H : откл. регистра 2 (DD3)
MVI А, 05Н OUT 83H : запись в ЦАП из: регистра 1, 2 одновременно
MVI A. 04H OUT 83H : откл. регистров

Спроектировать систему управления перемещением тележки по горизонтальной направляющей длиной L, на основе микропроцессорных БИС. Тележка приводится в движение двигателем постоянного тока параллельного возбуждения, управляемым преобразователем, который обеспечивает плавный разгон и торможение с заданной интенсивностью КИ1 и КИ2 =dn/dt [об/мин за сек] и дальнейшую работу двигателя с постоянной А. Преобразователь управляется постоянным напряжением Uу по закону Uвых=Ку*Uу. Микропроцессорная система управления обеспечивает защиту двигателя от перегрузки по току Imах с выдержкой времени tз и превышения скорости Nmах мгновенно. Программа должна обеспечивать движение в любую сторону.

Длина участка разгона и торможения с КИ1 равна L1, а с КИ2 равна L2. Полный путь L разбивается на участки по параметру В. Датчик скорости выдает сигнал Un. Передаточный коэффициент линейной скорости V через угловую скорость n равен Кn==V/n [м/с/об/мин]. Предусмотреть контроль скорости на участке L1 и включение тормоза в конце пути.

 

Исходные данные: L=400м, L1=20 м; L2=50 м; Ку=11; UУ=±10 B; КИ1=1 об/мин за сек; КИ2=50об/мин; Кn=1 .10-3 м/с/об/мин; IMAX=50 A; tз=0.4 с; NMAX= 2500 об/мин, Un = 0, 005 n.

 

Рабочая установка представляет собой тележку, которая совершает движение по прямолинейному участку L.

Тележка приводится в движение двигателем постоянного тока параллельного возбуждения, управляемый преобразователем, который обеспечивает плавный разгон и торможение с заданной интенсивностью КИ1 и КИ2 и дальнейшую работу двигателя с постоянной скоростью. Преобразователь управляется постоянным напряжением U у по закону Uвых=Ку*Uу.

Длина участка разгона и торможения с КИ1 равна L1 а с КИ2 - L2. Полный путь L разбивается на участки по параметрам L1 - датчики, L2 - время.

Датчики SА3 и SА4 на участке L1 должны срабатывать при прохождении тележки возле них и воздействии наних постоянным магнитом.

Датчики SА1 и SА2 используются для полной остановки тележки.

 

Расчет параметров движения:

1) al = Kи1 . Kna1 =1 .10-3 м/с2


2) V1-Скорость в конце L1; V1=al .tl = 1.10-3.200=0, 2 м/с

3) nl – Частота вращения двигателя в конце пути (L1)
nl=KИl .tl= 1. 200 = 200 об/мин


4) Время перехода участка (t2)

По расчёту: t2 =40.9 с

5) V2= V1+ a2t2 = 0, 2+0, 05.40, 9 = 2, 245 м/c

6) n2= nl+KИ2t2= 200+50.40, 9 = 2245 об/мин
n2 - не должно превышать заданное максимальное значение nmax.

7) Рассчитываем длинну участка L3:

L3=L-2L1-2L2=260 м

8) Рассчитываем время движения на третьем участке:

 
 


9) Из уравнения скорости идеального Х.Х.

 

       
   
       


10) Iя Rя Рассчитывается для номинального режима

Для большинства машин постоянного тока nH меньше n0 на 5%, поэтому

 
 


11) Примем, что скорость в конце L2 и на L3 номинальная т.е. n2=nH и рассчитаем напряжение на двигателе в конце L2и на L3

 
 


U2= n2EФ + IяRя = 2245 . 0, 044+5, 5 = 104.28 В

12) Так как для механизма всегда справедливо соотношения

 
 


 

13) U1= n1-СEФ + IяRя = 200.0, 044+0, 11 = 8, 91 В

 
 


14) Строим диаграмму, для этого необходимо полное время движения тележки

 
 


t: = 2tl + 2t2+t3=597.613c

15) Определим время дискретизации Δ t и Δ U

Промежуток времени через который на ЦАП выводится новое значение напряжения управления. Изменения значения напряжения управления не должно превышать 3% от полного изменения напряжения на участке. Выбирается участок с наибольшим ускорением L2.

(UУl)/tl=0, 03/Δ t

t2=Δ Uy2/Δ t; Δ Uyl=(Uy2-Uyl)* Δ t/t2-tl

Δ t = 0.03-t2 = 7.227

Δ Uyl=UУ1 Δ t/t1 =0.029 В

Δ uy2=UУ2 Δ t/t2 =0.284 В

Определим разрядность ЦАП Uref; = 10 Uy=n*Uref; n=Uyl/Uref

n = Δ Uyl/Uref=0.0029

 

Теперь переведем это число в двоичный код:

n=2.927-10-3 n1 =5.854-10-3 n2=0.012 n3=0.023 n4=0.047 n5=0.094 n6=0.187 n7=0.375 n8=0.749 n9=1.499 n10= 2.997

Разрядность ЦАП получаем 10

Выбор датчика скорости

Определение разрядности АЦП

Датчик скорости выбирается из условия: nдc> nmах. В зависимости от этого принимаем датчик скорости или тахометр тока ТМГ-30П возбуждаемый постоянными магнитами. Паспортные данные ТМГ-30П. Р2= 20Вт; V= 230 В;

I = 0, 087A; n= 4000об/мин;

 
 


Rn = 2650 0м

По условию выбранный датчик подходит Для определения разрядности АЦП построим характеристику

 

U0=144B; n0=2500 nmin=50 Uirn=5 B Найдем Umin

Umin=U0nmin/n0=2.88 B

Найдем минимальное напряжение на входе АЦП

Uirnmin = UirnUmin/U0=0.1 B

Uirnmin =0.1 Uirnmin1 =0.2 Uirnmin2 =0.4 Uirnmin3 =0.8 Uirnmin4 = 0.6 Uirnmin5 = 1.2 Uirnmin6 == 2.4 Uirnmin7 = 4.8 Uirnmin8 =9.6 Uirnmin9 = 19.2 Uimmin =0.1 Разрядность АЦП получаем 5

 

Таблица прерываний.

IRQO SAI подастся " 0", на выходе ЦАП ступенчато возрастает напряжение На механический тормоз подастся " 1", на выходе ЦАП напряжение исчезает DB -> " 0"  
IRQI SA2 На механический тормоз подастся " 1", на выходе ЦАП напряжение исчезает DB -> " 0" На механический тормоз подается " 0", на выходе ЦАП ступенчато возрастает напряжение  
IRQ2 SA3 Запускается таймер загружая коэффициент и подается сигнал на СЕ. И изменяем величину напряжения Изменяем величину напряжения производим проверку (т.е сравниваем теоретическое значение с действительным)  
IRQ3 SA4 Измеряем величину изменения напряжения, производим проверку Запуск таймера (подаем сигнал на СЕ, загружаем коэффициент изменяем ДУ  
IRQ4 SAI При поступлении сигнала запускаем таймер на отсчет t3. После отсчета напряжения на " 0", включается механический тормоз DC7 -> " 1"  
IRQ6 CЧ2(OUT1) Отключается таймер, величину напряжения ди = 0, загружаем новый коэффициент, запускаем таймер  
IRQ5 C41(OUT2) Увеличиваем напряжение на Δ U  
IRQ7 RAD Считываем данные с АЦП  

 

 

Программа с помощью которой задается движение тележки веред и назад.

Инициализация системы.

Адрес код команда Комментарий
  3E90H MVI А, 90Н УВВ упр. слово 10010000 (90H)
  D383H OUT 83H  
  3E36H MVI А, 36Н СЧ 0 упр. слово 00110110 36Н
  D387H OUT 87Н  
  3E20H MVI A, 20H Загрузка коэффициента N0=20000
200A D384H OUT 84H  
200C 3E4EН MVI A, 4EH  
200E D384H OUT 84H  
  3E74H MVI A, 74H СЧ 1 упр. слово 01110100(74Н)
  D387H OUT 87Н  
  3EB2H MVI A, B2H СЧ 2 упр. слово 10110010(В2Н)
  D387H OUT 87Н  
  3Е12Н MVI A, 12H КППСКИ1 00010010(12Н)
201A D388H OUT 88H  
201C 3E09H MVI A, 09H СКИ2 00001001(09Н)
201E D389H OUT 89H  

 

Подпрограмма прерываний КПП.

 

  CD0050 CALL конт1 IRQO  
  C9 RET    
  CD0D50 CALL конт2 IRQ 1  
090В C9 RET    
  CD1A50 CALL конт3    
  C9 RET    
  CD2E50 CALL конт3 IRQ 2  
  C9 RET    
  CD2450 CALL конт4    
  C9 RET    
  CD3850 CALL конт4 IRQ3  
  C9 RET    
  CD5551 CALL защ. IRQ 4  
  C9 RET    
  CD CALL IRQ 5  
092B C9 RET слог.    
  CD CALL время2 IRQ 6  
  C9 RET    
  CD CALL IRQ7  
093B C9 RET    

 

Основная программа (движение вперед).

 

адрес код метка команда Комментарий
  CD4D51   CALL обнул. ячейку содерж. информ. о датчике
  CD6A51 прогр1 CALL откл мех. тормоз f
  CD3051   CALL устанавливаем знак " +"
  CD050   CALL включаем счетчик 1 на Δ t
ЗООС CD5050   CALL заносим Δ Uу1 в регистр
300F CDA050   CALL заносим кол-во байт числа
  CDB050 мук1 CALL вызываем подпрограмму сложения
  CD 1551   CALL вывод на ЦАП
  CD1A50   CALL проверка сигнала с датчика SA3
301B CDED50 прогр2 CALL включаем счетчик 2 на t2 9
301E CD5B50   CALL заносим дПу2 в регистр
  CDA050   CALL заносим кол-во байт числа
  CDB050 мук2 CALL вызываем подпрограмму сложения
  CD1551   CALL вывод на ЦАП
302D' CDFA50 прогрЗ CALL включаем счетчик 2 на t3 ^
  CD6650   CALL заносим Δ uу3=0 в регистр
  CDA050   CALL Заносим кол-во байт числа
  CDB050 мукЗ CALL Вызываем подпрограмму сложения
  CD1551   CALL Вывод на ЦАП
303C        
303F CD7F50 прогр4 CALL Заносим (-Δ Uу2) в регистр
  CDA050   CALL Заносим кол-во байт числа
  CDB050 мук4 CALL Сложение
  CD1551   CALL Вывод на ЦАП
304B CD 2450   CALL Проверка сигнала с датчика SA4
304E CD7150 прогр5 CALL Заносим (-Δ Uyl)B регистр
  CDA050   CALL Заносим кол-во байт числа
  CDB050 мук5 CALL Сложение
  CD1551 мук6 CALL вывод на ЦАП
305A CD8750   CALL заносим (-AUim) в регистр
305D CD9250   CALL заносим AUim в регистр
  CDOB50   CALL сложение
  CD4051   CALL проверка скорости
  CD0В50   CALL проверка сигнала с датчика SA2
  CD6F51   CALL напряжение исчезает

 

 

Основная программа (движение назад)

 

адрес код Метка Команда Комментарий
306С CD4D51   CALL обнул. ячейку содерж. информ. о датчике
306F CD6A51 Прогр6 CALL откл мех. тормоз
  CD3551   CALL устанавливаем знак " -"
  CDE050   CALL включаем счетчик 1 на At
  CD7150   CALL заносим –Δ Uyl в регистр
307В CDA050   CALL заносим кол-во байт числа
307В CDB050 мук4' CALL вызываем подпрограмму сложения
  CD 1551   CALL вывод на ЦАП
  CD2450   CALL проверка сигнала с датчика SA4
  CDED50 Прогр7 CALL включаем счетчик 2 на t2
308A CD7C50   CALL заносим –Δ Uy2 в регистр
308D CDA050   CALL заносим кол-во байт числа
  CDB050 мук2 CALL вызываем подпрограмму сложения
  CD 1551   CALL вывод на ЦАП
         
  CDFA50 Прогр8 CALL включаем счетчик 2 на t3
309C CD6650   CALL заносим Δ Uу3=0 в регистр
309F CDA050   CALL заносим кол-во байт числа
30A2 CDB050 Мук3 CALL вызываем подпрограмму сложения
30A5 CD 1551   CALL вывод на ЦАП
30A8        
30AB CD5B50 прогр9 CALL заносим Δ Uу2 в регистр
30АЕ CDA050   CALL заносим кол-во байт числа
30В1 CDB050 мук 1* CALL сложение
30В4 CD 1551   CALL вывод на ЦАП
30В7 CD1A50   CALL проверка сигнала с датчика SA3
30ВА CD5050 Прогр10 CALL заносим дUу1 в регистр
30BD CDA050   CALL заносим кол-во байт числа
30С0 CDB050 мук5' CALL Сложение
30С3 CD 1551 Мук6 CALL вывод на ЦАП
30С6 CD8750   CALL заносим (-дUirn) в регистр
30С9 CD9250   CALL заносим дUirn в регистр
30СС CDB050   CALL Сложение
30CF CD4051   CALL проверка скорости
30D2 CD0050   CALL проверка сигнала с датчика SA на срабатывание
30D5 CD6F51   CALL напряжение исчезает
30D8     HLT  

 

 

Таблица памяти МП.

 

< HL>   Датчики
    +дUу1
    +дUу2
  040C дUу3=0
    -дUу2
    -дUу1
    -дUirn
< ВС>   Uy
    Uirn

 

Подпрограмма проверки сигнала с датчиков.

 

адрес код метка команда Комментарий
    конт1 LXI Н, 0400Н загрузка адреса в HL
  ЗА   LDAXH загрузка числа в < А> из < HL>
  E601   ANI 01Н лог " и" (маска 01Н)
  CC C030   CZMyK5" вызов подпрограммы
  CD6551   CALL вкл.т. вызов подпрограммы
500C C9   RET выход из подпрограммы
500D   конт2 LXI Н, 0400Н  
  ЗА   LDAXH  
  E601   ANI 02H лог " и" (маска 02H)
  CC 5430   CZMyK5  
  CD6551   CALL вкл.т. вызов подпрограммы
  C9   RET выход из подпрограммы
501A   контЗ LXI Н, 0400Н  
501D ЗА   LDAXH  
501E E604   ANI 04H лог " и" (маска 04H)
  CC 1230   CZ мyк 1  
  C9   RET выход из подпрограммы
    конт4 LXI Н, 0400Н  
    LDAXH  
  E608   ANI 08H лог " и" (маска 08H)
502A CC1530   CZ мyк 4  
502D C9   RET выход из подпрограммы
5052E   контЗ* LXI Н, 0400Н  
  ЗА   LDAXH  
  E604   ANI 04H лог " и" (маска 04H)
  CCB130   CZ мyк 1*  
  C9   RET выход из подпрограммы
    конт4' LXI Н, 0400Н  
503B ЗА   LDAXH  
503C E608   ANI 08H лог " и" (маска 08H)
503E CC 7E30   CZ мyк 4'  
  C9   RET выход из подпрограммы

 

Подпрограмма загрузки Δ Uу в регистр.

 

адрес код метка команда Комментарий
    напр1 LXI Н, 0404Н загрузка адреса в HL
  3E80   MVI А, 80Н загрузка младшего байта Δ Uу1 в< А>
      MOV M, A  
      INX H Увеличить адрес на 1 (т.е 0405Н)
  3EOO   MVI А, 00Н загрузка старшего байта Δ Uyl в < А>
      МОV М, A  
505A C9   RET выход из подпрограммы
505B   Напр2 LXI Н, 0408Н загрузка адреса в HL
505E 3EOO   MVI А, 00Н загрузка младшего байта Δ Uу2 в< А>
      MOV M, A  
      INX H  
  3E04   MVI A, 04H загрузка ст байта Δ Uy2 в < А>
      МОV М, A  
  C9   RET выход из подпрограммы
  210C04 НапрЗ LXI H, 040CH загрузка адреса в HL
  3EOO   MVI А, 00Н загрузка младшего байта Δ UуЗ в< А>
506B     МОV М, A  
506C     INX H  
506D 3EOO   MVI A, 00H загрузка старшего байта Δ UуЗ в < А>
506F     MOV M, A  
  C9   RET выход из подпрограммы
    Напр5 LXI H, 0414H загрузка адреса в HL
  3E80   MVI А, 80Н загрузка младшего байта (-Δ Uyl) в < А>
      MOV M, A  
      INX H  
  3EFF   MVI A, FFH загрузка старшего байта (-Δ Uyl)в < А>
507A     MOV M, A  
507В C9   RET выход из подпрограммы
507C   Напр4 LXI H, 0410H загрузка адреса в HL
507F 3E00   MVI A, 00H загрузка младшего байта (-Δ Uy2) в < А>
      МОV М, A  
      INX H  
  3EFC   MVI A, FCH загрузка старшего байта (-Δ Uy2) в < А>
      MOV M, A  
  C9   RET выход из подпрограммы
    Напр6 LXI H, 0418H загрузка адреса в HL
508A 3E00   MVI A, 00H загрузка младшего байта (-Uirn) в < А>
508C     MOV M, A  
508D     INX H  
508E 3EF0   MVI A, F0H загрузка старшего байта (-Uirn) в < А>
      MOV M, A  
  C9   RET выход из подпрограммы
    Ном LXI B, 0504H загрузка адреса в ВС
  3E00   MVI A, 00H загрузка младшего байта (Uirn) в < А>
      MOV M, A  
      INX B  
  3E80   MVI A, 80H загрузка старшего байта (Uirn) в < А>
509B     MOV M, A  
509C C9   RET выход из подпрограммы

 

Подпрограмма загрузки числа байтов.

 

адрес код метка Команда Комментарий
50А0   число LXI В, 0500Н загрузка адреса в ВС
50А3 1Е02   MVI Е, 02Н загрузка числа в регистр Е
50А5 С9   RET выход из подпрограммы

Подпрограмма сложения.

 

адрес код Метка Команда Комментарий
50ВО   Слог1 MOV D, E запоминаем количество байт
50В1 С5   PUSH В запоминаем адр. младш, байта 1 слагаемого
50В2 AF   XRA A  
50В3 м1 LDAX B перенос в < А> младшего байта первого слагаемого
50В4   ADC M сложение содержимого < А> с ячейкой < М>
50В5 ID   DCR E уменьшаем счетчик байт на 1
50В6 CABF50   JZM2 условие = 0 то переход на М2
50В9     STAX B запоминаем байт суммы по адресу наход. < ВС>
ЗОВА     INX B увеличиваем на 1 вычисляется адрес
50ВВ   - INXBH увеличиваем на 1 следующего байта
50ВС C3B350   JMPM1 безусловный переход на М1
50BF   м2 MOV E, A проверка на переполнение ст. байта, сум в < Е>
50СО ОА   LDAX B загрузка старшего байта 1 слаг. в< А>
50С1 AE   XRA M искл " или" над < А> и < М>
50С2   MOV A, E перенос в < А> суммы старшего байта
50СЗ     STAX B запоминаем байт суммы по адресу наход. < ВС>
50С4     STC CY=1 установить триггер переноса в 1(CY=1)
50C5 FACF50   JM M3 < 0 то М3
50C8 7E   MOV A, M Загрузка старшего байта 2 слаг. в< А>
50C9 AB   XRA E искл" или" над < А> и < Е>
50CA     STC CY=1 установить триггер переноса в 1 (CY=1)
50CB FACF50   JM M4 < 0 то М4
50CE ЗЕ м3 CMC (CY=0)
50CF Cl м4 POP В восстановить содерж. регистра < ВС>
50DO     MOV E, D из D в Е (восстон. в per Б кол-во байт)
50DI C9   RET возврат из подпрограммы

 

 

Подпрограмма включения счетчиков на время.

 

адрес код метка Команда Комментарий
50ЕО ЗЕ02 время 1 MVI А, 02Н загрузка младшего байта Δ t в < А>
50Е2 D385   OUT 85Н  
50Е4 3E2D   MVI A, 2DH загрузка старшего байта Δ t в < А>
50Е6 D385   OUT 85Н  
50Е8 ЗЕ07   MVI A, 07H запуск счетчика 1 (DC3=> " 1")
50ЕА D382   OUT 82H  
50ЕС C9   RET выход из под программы
50ED ЗЕ1А время2 MVI A, IAH загрузка младшего байта t2 в < А>
50EF D386   OUT 86H  
50FI ЗЕ5Е   MVI A, 5EH загрузка старшего байта t2 в < А>
50F3 D386   OUT 86H  
50F5 ЗЕ09   MVI A, 09H запуск счетчика 2 (DC4=> " 1")
50F7 D382   OUT 82H  
50F9 C9   RET выход из под программы
50FA 3E3D Время3 MVI A, 3DH загрузка младшего байта t3 в < А>
  D381   OUT 81H  
  ЗБ04   MVI A, 04H отключение регистра DD7 (DC2=> 0)
512В D382   OUT 82H  
512D   DCX B уменьшаем адрес ячейки на 1
512E C9   RET выход из подпрограммы

Подпрограмма учитывающая знак напряжения управления.

 

адрес код метка команда Комментарий
  3Е0В Знак1 MVI А, 0ВН увеличиваем DC5 в 1 (знак +)
  D383   OUT 83H  
  C9   RET выход из подпрограммы
         
  3ЕОА знак2 MVI А, 0АН увеличиваем DC5 в 0 (знак -)
  D383   OUT 83H  
  C9   RET выход из подпрограммы

 

Подпрограмма контроля скорости.

 

адрес код метка команда Комментарий
  3E00 контр MVI A, 00H вывод напряжения с АЦП
  D381   OUT 81H из порта В во внешнее устройство
  3EF8   MVI A, F8H  
  D381   OUT 81H  
      SUB В Вычитание < В> из < А>
  F4   CP MUK5 вызов подпрограммы
514C FC   CM MUK6  

 

Подпрограмма обнуления ячейки с информацией о датчиках.

адрес код метка команда Комментарий
514D   обнуление LXI Н, 0400Н загрузка адреса в < HL>
  ЗЕ00   MVI А, ООН перенос нолей в < А>
      MOV М, А перенос < А> в < М>
  C9   RET выход из подпрограммы

 

Подпрограмма отключения системы, если ток превысил Imax.

адрес код метка команда Комментарий
    защита LXI Н, 0400Н проверка датчика тока на срабатывание
  ЗЕ10   MVI А, 10Н  
515А P6   ORA M  
515В     МОV М, A  
551С 3E08   MVI А, 08Н  
515Е T383   OUT 83H  
  CD0751   CALL врсмя4 вызов подпрограммы время4
  C9   RET выход из подпрограммы

 

Подпрограмма включения и отключения тормоза.

адрес код метка команда Комментарий
  3E0F вкл. тормоз MVI A, 0FH установка DC7=> 1
  D382   OUT 83Н  
  C9   RED выход из подпрограммы
516А 3E0F откл. тормоз MVI А, 0ЕН установка DC7=> 0
516С D382   OUT 83H  
516Е C9   RET выход из подпрограммы

 

Подпрограмма установления напряжения на «О».

адрес код метка команда Комментарий
516F 3E03 ноль MVI А, 03Н установка DC7=> 1 включение DD6
  D382   OUT 82H  
  3E00   MVI А, 00Н вывод нолей во внешнее устройство DD6
  D381   OUT 81H с порта В
  ЗБ02   MVI А, 02Н установка DC 1 => 0 включение DD6
  D382   OUT 82H  
517В 3E05   MVI А, 05Н установка DC2=> 1 включение DD7
517D D382   OUT82H  
517F 3E00   MVI А, 00Н вывод нолей во внешнее устройство DD7
  D381   OUT 81H с порта В
  3E04   MVI А, 04Н установка DC2-> 0 отключение DD7
  D382   OUT 82H  
  C9   RET выход из подпрограммы

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.