C Code To Interface With Parallel Port

Article by: Ravee H Bhalla

Program To Obtain Base Address Of Printer Port
 

/* Program to obtain the base address of printer port on your pc */
#include&ltstdio.h>
#include&ltconio.h>
#include&ltdos.h>

int main()
{
 unsigned int far *lpt1 = (unsigned int far *)0x00000408;
 // 0x00000408 = IVT entry for LPT1's base address
 unsigned int data, status, control;

 data = *lpt1;
 status = data+1;
 control = data+2;

 clrscr();

 if(!data)
 {
  printf("Parallel port not installed!\n");
 }
 else
 {
  printf("Data port:      %04u(Dec)   %04X(Hex)\n",data,data);
  printf("Status port:    %04u(Dec)   %04X(Hex)\n",status,status);
  printf("Control port:   %04u(Dec)   %04X(Hex)\n",control,control);
 }
 getch();
 return 0;
}


Program To Write Data To Parallel Port (Data Port, Control Port)
/* Program to write data to parallel port (Data, Control Port) */
#include&ltstdio.h>
#include&ltconio.h>
#include&ltdos.h>

int main()
{
 unsigned int far *lpt1 = (unsigned int far *)0x00000408;
 // 0x00000408 = IVT entry for LPT1's base address
 unsigned int data, status, control;
 unsigned char out1, out2;

 data = *lpt1;
 status = data+1;
 control = data+2;

 clrscr();

 if(!data)
 {
  printf("Parallel port not installed!\n");
 }
 else
 {
  printf("Data port:      %04u(Dec)   %04X(Hex)\n",data,data);
  printf("Status port:    %04u(Dec)   %04X(Hex)\n",status,status);
  printf("Control port:   %04u(Dec)   %04X(Hex)\n",control,control);
 }

 printf("\n\nEnter the value to write to data port: ");
 scanf("%d",&out1);
 printf("Enter the value to write to control port: ");
 scanf("%d",&out2);

 outportb(data,out1);
 outportb(control,out2^0x0B);

 printf("\nData Written to port!\n");
 getch();
 return 0;
}

Program To Read Data From Parallel Port
 


/* Program to read data from parallel port (Status Port) */
#include&ltstdio.h>
#include&ltconio.h>
#include&ltdos.h>

int main()
{
 unsigned int far *lpt1 = (unsigned int far *)0x00000408;
 // 0x00000408 = IVT entry for LPT1's base address
 unsigned int data, status, control;
 unsigned char in;

 data = *lpt1;
 status = data+1;
 control = data+2;

 clrscr();
 in = ((inportb(status)^0x80)>>3);

 if(!data)
 {
  printf("Parallel port not installed!\n");
 }
 else
 {
  printf("Data port:      %04u(Dec)   %04X(Hex)\n",data,data);
  printf("Status port:    %04u(Dec)   %04X(Hex)\n",status,status);
  printf("Control port:   %04u(Dec)   %04X(Hex)\n",control,control);
 }

 printf("\nRead Data: %u(dec) %X(hex)\n",in,in);
 getch();
 return 0;
}