Sean Breheny wrote: > void main (void) > { > > int a,b; > > //outportb ( 888 + 1 , inportb ( 888 + 1 ) & 0xFE ); > // THIS LINE MAKES NO DIFFERENCE EITHER WAY ^^^^^^^^^ > > aloop: > > outportb ( 888 + 2 , 4); //Set control register > outportb ( 888 + 1 , 0xFF ); //Clear possible timeout > while ( ! kbhit ( ) ); //Wait for keystroke > outportb ( 888 + 4 , getch ( ) ); //Send keystroke > delay ( 10 ); //Wait for PIC to finish what it is doing > b = inportb ( 888 + 4 ); //Read in port contents > printf ( "%d\n" , b ); //print it > goto aloop; //Do it again > }; I can see a few problems here, first of all, I would expect the parallel port to have it's control lines inactive and high when you first start off. You therefore have to initialise them, but before you can initialise the port, you have to tell the PC what sort of port you wish to use. This register is at your base address + 0x0402h and you need to write the value 0x80h for the EPP port. You can now write the value XXXX0100 B into the control register to initialise this port (base address + 2). Now you need to set the data direction bit to a '1' for an inport command and a '0' for an outport command. By the way, this information and more can be found at http://www.geocities.com/SiliconValley/Bay/8302/epp.htm/ for the EPP port and http://www.senet.com.au/~cpeacock/ for everythig else! Hope this helps, Brian.