Портал освітньо-інформаційних послуг «Студентська консультація»

  
Телефон +3 8(066) 185-39-18
Телефон +3 8(093) 202-63-01
 (093) 202-63-01
 studscon@gmail.com
 facebook.com/studcons

<script>

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

 

  ga('create', 'UA-53007750-1', 'auto');

  ga('send', 'pageview');

 

</script>

Дослідження будови та програмування клавіатури ІВМ РС AT

Тип роботи: 
Контрольна робота
К-сть сторінок: 
23
Мова: 
Українська
Оцінка: 

стану свiтлодiодiв                  }

  send_to_kbd($ED);
{ Маскуємо непотрбнi бiти                                                   }
  Tmp:=AByte and $03;
{ Посилаемо стан бiтiв клавiатури                                           }
  send_to_kbd(Abyte);
{ Змiнюємо бiти 4-6 в областi даних клавiатури BIOS 0:417h                  }
  bios_key_flag:=(bios_key_flag and No_lites) or (Tmp Shl 4);
end;
{////////////////////////////////////////////////////////////////////////////
           Очистити буфер клавiатури  (працює на всiх  PC)
 ///////////////////////////////////////////////////////////////////////////}
procedure Key_clear_buffer;
{  покажчики голови та хвоста буфера клавiатури}
var buf_begin:word absolute $0:$41A;
    buf_end  :word absolute $0:$41C;
begin
{ Встановлюемо буфер на початок буфера BIOS
    buf_begin := $041E;
    buf_end   := $041F;                                                     }
end;
{////////////////////////////////////////////////////////////////////////////
                     Демо пiдпрограма роботи з контролером
////////////////////////////////////////////////////////////////////////////}
procedure port_io_demo;
const lamps:array [0..5] of byte =(1, 3, 2, 6, 4, 5);
var i:integer;
begin
  key_reset;
  key_default;
  writeln;
  writeln('Бiжучi вогнi на iндикаторах.');
  for i:=0  to 5 do
    begin
      Key_lights(lamps[i]);
      delay(500);
    end;
  for i:=5  downto 0 do
    begin
      Key_lights(lamps[i]);
      delay(500);
    end;
  Key_lights(0);
  delay(500);
  writeln('Виключимо клавiатуру на 10 секунд ........................ ');
  Writeln('Ввiд клавiш не сприймається навiть для резидентних програм ');
  Key_disable;
  delay(10000);
  Writeln('Включимо клавiатуру ');
  Key_enable;
  Key_clear_buffer;
  if keypressed then writeln('Is pressed!');
  writeln('Встановимо параметри по замовчуванню.');
  key_default;
end; {///////////////////////////////////////////////////////////////////////
                  Демонстрацiя функцiй BIOS intl6h
////////////////////////////////////////////////////////////////////////////}
 
{////////////////////////////////////////////////////////////////////////////
                     Чекати натиснення клавiшi
////////////////////////////////////////////////////////////////////////////}
procedure wait_key;assembler;
asm
  @1:MOV AH,Machine
     SUB AL,AL
     OR  AH,$01     {Встановити номер пiдфункцii для XT - 01 для AT - 011   }
     INT $16        {Викликати переривання                                  }
     JNZ @1         {Якщо флаг ZF = 0 то символ прийнятий з клавiатури      }
                    {Iнакше перейти на початок пiдпрограми                  }
end;
{////////////////////////////////////////////////////////////////////////////
                    Отримати клавiшу та скан-код
////////////////////////////////////////////////////////////////////////////}
function get_key:word;assembler;
asm
  MOV AH,Machine   {Встановити номер пiдфункцii для XT - 00 для AT - 010   }
  SUB AL,AL
  INT $16          {Викликати переривання                                  }
end;
{///////////////////////////////////////////////////////////////////////////
                 Отримати статус клавiш-модифiкаторiв
///////////////////////////////////////////////////////////////////////////}
function get_status:word;assembler;
asm
     MOV AH,Machine
     SUB AL,AL
     OR  AH,$02     {Встановити номер функцii    для XT - 02 для AT - 012   }
     INT $16        {Викликати переривання                                  }
     CMP Machine,$10
     JZ @2          {Якщо комп'ютер  - не AT то старший байт недiйсний      }
     SUB AH,AH
  @2:
end;
{////////////////////////////////////////////////////////////////////////////
              Встановити швидкiсть автоповторiв(rate) та затримку
                  nри утримання наступної клвiшi (delay)
////////////////////////////////////////////////////////////////////////////}
procedure set_rate_delay(rate:byte;delay:byte);assembler;
asm
  MOV AX,$0305     {Встановити номер функцii 03 та пiдфункцii 05            }
  MOV BL,rate      {Встановити перiод повтору                               }
  MOV BH,delay     {Встановити затримку перед повтором    
Фото Капча