Разработка комплекса программ для автоматизации экспериментальных исследований тангенциального точения на станке с ЧПУ 6Р13Ф3, страница 10

                  jmp rep1                                 {13}

          notShow:

                  mov cx,13  {было 14}                     {2}

             rep1:

                  loop rep1                                {16}

                  pop cx

                  inc cx

                  loop rep2

                 {сохранить счетчик каналов для вывода на экран}

                  and di,$07                               {2}

                  mov ChnToShow,di                         {4}

               end;

             {конец чтения каналов}

               if FirstTime then begin tms10:=0; FirstTime:=false; end

               else tms10:=tms10+TimePeriod;

               D.STime:=tms10;

               XS^.Write(D,sz);

               l:=(XS^.Position+DSize)>MaxMemSize;

             {вывод времени}

               asm

                      mov ax,SEG tms10

                      mov es,ax

                      mov bx,OFFSET tms10;

                      mov ax,es:[bx+2];

                      shr ax,2     {деление на 2^20 - определяет}

                                   {максимальное время 1c - 1 звездочка}

                                                {+умножение на 2}

                      cmp ax,12                 {вышло ли время}

                      jg  tmout

                      shl ax,1

                      mov bx,ax

                      mov ax,VideoSeg

                      mov es,ax

                      {Отображение времени}

                      mov al,'¦'

                      mov di,StartAddr

         rep:

                      and bx,bx

                      jz  contV

                      mov es:[di+bx],al

                      dec bx

                      dec bx

                      jmp rep

         contV:

                      {Очистка места}

                      mov al,' '               {2}

                      mov di,ClrAddr           {2}

                      mov bx,16                {2}

         repC:

                      and bx,bx                {2}

                      jz  contC                 {3|13}

                      mov es:[di],al        {9}

                      dec bx

                      dec di                   {2}

                      dec di                   {2}

                      jmp repC                  {13}

         contC:

                      dec di                   {2}

                      dec di                   {2}

                      mov bx,16                {2}

         repC1:

                      and bx,bx                {2}

                      jz  contC1               {3|13}

                      mov es:[di],al        {9}

                      dec bx

                      dec di                   {2}

                      dec di                   {2}

                      jmp repC1                  {13}

         ContC1:

                      {Отображение значения}

                      mov al,'¦'

                      mov di,TmpAddr

                      mov bx,ValueToShow

                      shl bx,1

         repV:

                      and bx,bx                {2}

                      jz  cont                 {3|13}

                      mov es:[di+bx],al        {9}

                      dec bx                   {2}

                      dec bx                   {2}

                      jmp repV                  {13}

            tmout:

                      xor ax,ax                 {если время вышло}

                      inc ax

                      mov timeout,al

            skip:

            cont:

                      inc cntr

                      end;

          end;

          aprev:=a;

     end;

     asm

           in al,$60   {проверка на нажатие клавиши}

           neg al

           shr al,7

           mov key,al

           mov al,key   {все проверки на выход из цикла}

           or al,l

           or al,key1

           or al,timeout

           mov key1,al

     end;

     until key1;

     TimerReset;

{$R+$S+$Q+$I+}

             gotoxy(Wbx+20,by+9); write(cntr:8);

       gotoxy(Wbx+42,by+9); write(tms10/1193200:8:6,' ':8);

{     if key then repeat ReadKey until not keypressed;}

     CardDone;

     if l then SpStrob:=true else

               SPStrob:=false;

end;


Приложение Б

Фрагмент программы ввода данных со стробированием от внутреннего таймера компьютера.

function TimeStrob:boolean;

   const

        Period=361; {=1193200/3300  - предел 187}

   var

        a:boolean;

   label skip,tmout,cont, contV,rep,repV,rep1,rep2,notShow,

         repC,repC1,contC,contC1;

   begin

     CardInit;

     key1:=false; timeout:=false; key:=false;

     FirstTime:=true;

     {инициализация процессора клавиатуры}

     while keypressed do readkey;

     delay(100); {подождем пока отпустят клавишу}

     asm

           in al,$61

          and al,$7f

          out $61,al

     end;

     {инициализация вывода на экран}

     {незабыть доделать чтобы стирать предыдущее значение}

    xposChn:=Wbx+38;

    yposChn:=BY+0;

    StartAddrChn:=(yposChn*80+xposChn)*2;

    xposChn:=Wbx+54;

    StartAddrChnClr:=(yposChn*80+xposChn)*2;

    xpos:=Wbx+40;

    ypos:=BY+8;

    StartAddr:=(ypos*80+xpos)*2;

    Dseg:=seg(D.D[1]);

    DOffs:=ofs(D.D[1]);

    cntr:=0;

    ChnToShow:=0;

{$R-$S-$Q-$I-}

    {вводим данные:

    прекращаем по нажатию клавиши,

               по срабатыванию кнопки,

               по переполнению памяти}

    timerstartMode1(Period);

    repeat

          if TimeHighWord<>0 then break;

          while TimeHighWord=0 do ;

          timerstartMode1Again(Period);

     asm

       mov dx,$379

       in al,dx

    {как там датчик?}

       mov ah,al

       and al,$01 shl RevDetector

       shr al,4

       mov a,al

    {как там кнопка?}

       neg ah

       and ah,$01 shl KeyForStop

       shr ah,KeyForStop

{$ifdef DEBUGMODE}

       xor ax,ax    {заглушка по кнопке}

{$endif}