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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 6.7.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 курса заочной формы обучения
2. Лабораторная работа 6 Тема- Создание теста Задание- создать тест с 1015 вопросами
3. 1; S2 ~ равномерное уменьшение
4. лекция Эволюция сознания
5. ЮрПомощь Владимир Усанов
6. ТЕМАТИЧЕСКИЙ ПЛАН ДИСЦИПЛИНЫ Правоохранительные органы для очной формы обучения
7. який час робочого дня незалежно від того були вони відсторонені від роботи чи продовжували виконувати труд
8. А. Искендеров Глава вторая
9. тематика. Модуль Алгебра содержит 11 заданий- в Части I 8 заданий с кратким ответом выбором ответа и устано
10. Реструктуризация и несосоятельность торгового предприятия