У вас вопросы?
У нас ответы:) SamZan.net

Задание- Поиск в системе LPT портов

Работа добавлена на сайт samzan.net: 2016-03-30

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 20.2.2025

Министерство образования и науки, молодежи и спорта Украины

Донецкий национальный технический университет

Кафедра Компьютерной инженерии

Отчет

по лабораторной работе №1

" Исследование LPT порта "

Выполнил:

                                                                                                   ст. гр. КС-11н

Супрунов М.Ю.

Проверила:

Максименко Н.С.

Донецк 2013

Задание:

  1.  Поиск в системе LPT портов.
  2.  Вывод на экран сведения об активном LPT порте.

Листинг программы:

#include <stdio.h>

#include <dir.h>

#include <dos.h>         

#include <string.h>

#include <stdlib.h>

#include <conio.h>

#include <io.h>

#include <ctype.h>

unsigned int adrlpt1;

int lst[8]={0,1,1,1,1,1,1,1},lct[8]={1,1,1,1,0,1,0,0};

void seachadr()

{unsigned int far *adrptr;

 unsigned int adrlpt;

 int a;

 clrscr();

 adrptr=(unsigned int far *)0x00000408;

 for (a=1;a<4;a++)

 {adrlpt=*adrptr;

 if (adrlpt==0)

   printf("Не найдено порта для Ldpt%d \n",a);

 else

   printf("Адрес, приписанный к Ldpt%d - %Xh \n",a,adrlpt);

 if (a==1)

 adrlpt1=adrlpt;

 adrptr++;

 }

 printf("Нажмите любую клавишу");

 getch();

}

void setcursor(int cursor)

// Устанавливает размер курсора ($2000 - невидимый)

{asm {

   push ax

  push bx

  push cx

  mov ah,1

  mov bh,0

  mov cx,cursor

     int 10h

  pop cx

  pop bx

  pop ax

}

}

//_______________________________________________________________}

void FNTS(long number,int reg[8])

// Преобразование числа в множество ( 10 --> 2 ) }

{int i;             // { Счётчик разрядов 16-разр. операнда.   }

int k, divisor,a=1; // { частное и делитель для преобразования.}

if (number<0)

 {

   a=0;                 // { получение положительного  }

   number=-number;                // { числа и вычитание из него }

   number--;             //    { единицы.                  }

 }                          

divisor=128;

for (i=0;i<8;i++)

 {                      //    { последовательное формиро- }

  k=number / divisor;     //    { вание двоичных цифр числа.}

 if (k>0)

     reg[i]=1;

     number%=divisor;

     divisor>>=1;

 }

if (!a)

  for (i=0;i<8;i++)      //       { инверсирование цифр отри- }

   if (reg[i]==1)       //   { цательного числа (получе- }

      reg[i]=0;          //   { ние дополнительного кода).}

   else reg[i]=1;

}

//{------------------------------------------------------------}

void outt()

{int ss[8]; int i;

gotoxy(1,2); printf("Порт данных:     %p",(unsigned char *) adrlpt1);

gotoxy(1,4); printf("Значения");

gotoxy(1,3); printf("Биты");

gotoxy(1,5); printf("Логика");

gotoxy(1,6); printf("Уровень");

gotoxy(1,7); printf("Контакт");

gotoxy(1,10); printf("Порт статуса:    %p",(unsigned char *)adrlpt1+1);

gotoxy(1,12); printf("Значения");

gotoxy(1,11); printf("Биты");

gotoxy(1,13); printf("Логика");

gotoxy(1,14); printf("Уровень");

gotoxy(1,15); printf("Контакт");

gotoxy(1,18); printf("Порт управления: %p",(unsigned char *)adrlpt1+2);

gotoxy(1,20); printf("Значения");

gotoxy(1,19); printf("Биты");

gotoxy(1,21); printf("Логика");

gotoxy(1,22); printf("Уровень");

gotoxy(1,23); printf("Контакт");

i=inportb(adrlpt1);

FNTS(i,ss);

for (i=1;i<9;i++)

{

if (ss[i-1]==1)

{

gotoxy(6+i*8,4);printf("1 ");

gotoxy(6+i*8,6);printf("5B ");

}

else

{

gotoxy(6+i*8,4);printf("0 ");

gotoxy(6+i*8,6);printf("0B ");

}

}

i=inportb(adrlpt1+1);

FNTS(i,ss);

for (i=1;i<9;i++)

{

if (ss[i-1]==1)

{

gotoxy(6+i*8,12);printf("1 ");

gotoxy(6+i*8,14);

if (lst[i-1]==1) printf("5B ");

else printf("0B ");

}

else

{

gotoxy(6+i*8,12);printf("0 ");

gotoxy(6+i*8,14);

if (lst[i-1]==1) printf("0B ");

else printf("5B ");

}

}

i=inportb(adrlpt1+2);

FNTS(i,ss);

for (i=1;i<9;i++)

{

if (ss[i-1]==1)

{

gotoxy(6+i*8,20);printf("1 ");

gotoxy(6+i*8,22);

if (lct[i-1]==1) printf("5B ");

else printf("0B ");

}

else

{

gotoxy(6+i*8,20);printf("0 ");

gotoxy(6+i*8,22);

if (lct[i]==1) printf("0B ");

else printf("5B ");

}

}

gotoxy(9,3);printf("     7       6       5       4       3       2       1       0");

gotoxy(9,5);printf("     +       +       +       +       +       +       +       +");

gotoxy(9,7);printf("     9       8       7       6       5       4       3       2");

gotoxy(9,11);printf("    BUSY  ACKNLG  PaperEND SELECT  ERROR     *       *       *");

gotoxy(9,15);printf("     11      10      12      13      15      x       x       x");

gotoxy(9,13);printf("     +       -       +       +       -       +       +       +");

gotoxy(9,19);printf("     *       *    INTR_EN   <-o->  SLCT_IN  INIT  AutoFeed STROBE");

gotoxy(9,23);printf("     x       x       x       x       17      16      14       1");

gotoxy(9,21);printf("     +       +       +       +       -       -       -       -");

gotoxy(1,9);printf("──────────────────────────────────────────────────────────────────────────");

gotoxy(1,17);printf("──────────────────────────────────────────────────────────────────────────");

gotoxy(1,24);printf("──────────────────────────────────────────────────────────────────────────");

}

void main()

{

int i=0; int a;unsigned char cp,dp;

setcursor(0x2000);

seachadr();

clrscr();

cp=inportb(adrlpt1+2);

dp=inportb(adrlpt1);

outt();

while (i!=27)

{ dp=inportb(adrlpt1);

gotoxy(10,24);

asm {

push ax

mov ah,0bh

int 21h

mov ah,0

mov a,ax

pop ax}

if (a!=0)

{i=getch();  

switch((char)i)

{case 'i':cp^=0x1;break;

case 'u': cp^=0x2;break;

case 'y': cp^=0x4;break;

case 't': cp^=0x8;break;

case 'r': cp^=0x10;break;

case 'e': cp^=0x20;break;

case 'w': cp^=0x40;break;

case 'q': cp^=0x80;break;

case '1': dp^=0x80;break;

case '2': dp^=0x40;break;

case '3': dp^=0x20;break;

case '4': dp^=0x10;break;

case '5': dp^=0x8;break;

case '6': dp^=0x4;break;

case '7': dp^=0x2;break;

case '8': dp^=0x1;break;

}

outportb(adrlpt1+2,cp);

outportb(adrlpt1,dp);

dp=inportb(adrlpt1);

}

outt();

}}

Скриншоты работы программы:

Поиск Портов

Информация об активном порте Ldpt1:

Скриншот программы из методических указаний:




1. Она подняла трубку и набрала номер телефона Алисы
2. Различные теории государственного регулирования экономики
3. экономический анализ играет важную роль в повышении эффективности ведения хозяйства растениеводства и жив
4.  Становление сущности иудейского права
5. Реферат- Виховання дитини як важливий етап розвитку особистості
6.  Коэффициент запаса для электродвигателя вентилятора Кз13
7. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата психологічних наук Киї
8. Вопросы к зачету по дисциплине Банковское право
9. Тема 12. Рівновага відкритої економіки 1.html
10. заряжать и куда на нем поедем