I am trying to make a digital ohmmeter on a parallel port interface that can measure resistance with at least 95% accuracy. I have tried a 555 timer monostable assembly which generates a pulse with respect to the connected resistor. My program detects the width of pulse and then after calculation gives a value of resistance, but the results are not accurate, especially for small values. Is there any IC avaliable for resistance to digital converter? The output may be serial or parallel.
If you are familiar with microcontrollers then you can use an ADC. Place the unknown resistor as one half of a voltage divider (with known precision resistor), apply known voltage and measure the output at the junction. Do the math and you can work out the unknown resistance.
There are a few variations on this (see Wheatstone bridge, pictured below) and you can get quite complex with it the more accurate you need it to be (see LCR meters also - they use a known frequency and measure amplitude and phase angle, so you can obtain a lot more data, e.g. DF, Q, θ, etc)
Wheatstone bridge configuration:
You can also get ICs and off the shelf modules that can be configured to measure voltage/current/resistance/etc. Obviously a multimeter (e.g. with USB/RS232 link) will do what you are asking for, but I'm guessing there must be a reason you want to avoid this route.
You specify 95% accuracy. This is more commonly expressed as 5% inaccuracy. But you must also specify the range of resistors that you want to measure. The wider the range the more difficult it gets, and very low and very high values are an extra challenge (even if the range is small).
I think pulse length measuring using the parallel port will suffer from interference from other activities on your PC. The audio input is probably better suited for this case: make sure the frequency you generate is in the audio range, determine the frequency in software (that's a SW problem, not for discussion here), and calculate back to the resistance.
If you really want to use the parallel port get yourself an A/D converter chip with two inputs and measure the reference voltage and te voltage over your resistor, with a known series resistor. A/D converter chips are available in parallel, SPI or I2C fashion (to name a few), which can be interfaced to a parallel port (with some SW effort).
Make that a constant current is driven through the resistor. Measure the voltage over the resistor.
For example, when the current would be 1A (way too high of course), the voltage would equal the resistance following U = I×R.
But when you make a constant current source of 1mA, the voltage equals the resistance in kilo-Ohms. So 1V equals 1k Ohm.
Choose a current that gives measurable and reasonable voltages on the reach you want to have. You can also do something with a potentiometer to allow multiple currents.
A way to create a constant current source can be found on Wikipedia.
Measuring the voltage can be done with a microcontroller's ADC or the 7106 IC if you want to display it on an LCD screen immediately.
If you put the resistor into a non inverting amplifier as the input or feedback resister, you could easily convert resistance into voltage, and then convert to resistance after measuring the output voltage via an ADC, which is widely available on cheap ucontrollers. As mentioned previously, it would be difficult to make a single circuit to measure a wide range of resistances.