Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Министерство образования и науки, молодежи и спорта Украины
Донецкий национальный технический университет
Кафедра Компьютерной инженерии
Отчет
по лабораторной работе №1
" Исследование LPT порта "
Выполнил:
ст. гр. КС-11н
Супрунов М.Ю.
Проверила:
Максименко Н.С.
Донецк 2013
Задание:
Листинг программы:
#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:
Скриншот программы из методических указаний: