NOPPP, the “No-Parts” PIC Programmer using PIC16F83

NOPPP is a simple programmer for PIC16C84, PIC16F83, and PIC16F84(A) microcontrollers. It attaches to the parallel port of a PC. Plans were published in Electronics Now Magazine, September, 1998, and are included in shorter form in the downloadable ZIP file.

An article about this programmer also appeared in Silicon Chip (Australia), March, 1999.

Download NOPPP.ZIP now


YES! NOPPP programs the PIC 16F84A, which is 100% compatible with the 16F84. But you must use .HEX files that were assembled for the right one (16F84 or 16F84A); the files are not identical.


NOPPP en español
Kits available!
Updated software!
Updated circuit!

Want to program a chip other than PIC16C84, ‘F83, ‘F84, or ‘F84A? Don’t look here. Instead, look at the low-cost programmers and kits from Dontronics.

Larry Fischer reports that he has programmed a PC16F628A with an unmodified NOPPP. He didn’t say what software he used.

Having problems learning to use MPLAB? See these brief notes (or these older ones) For further assistance contact Microchip; MPLAB is their product, not mine.

Other bits of news…(from 2000)


  • A Linux version of the NOPPP software is available from Claus Fuetterer.
  • A bug in the NOPPP software has been fixed; you can now use the watchdog timer with the ‘F84. Thanks to Peter Aigner for both the bug report and the correction.
  • There are now two demo programs, DEMOF84 and DEMOC84, for the PIC16F84 and ‘C84 respectively. Both of them correct a bug in the earlier demo program that caused two LEDs to be on some of the time.

Although not precisely “no parts,” NOPPP is unusually simple and uses no hard-to-find parts. You can probably build it using parts you already have on hand. Here’s the circuit (revised somewhat from the original design, for greater reliability):

Pin numbers are those of the 25-pin connector on the PC.

Capacitors are in microfarads.

Circuit description: On the PIC, pin MCLR is +5V for normal operation (not used here), +12V for writing, and 0V for resetting. Crucially, the +12V supply does not actually “burn an EPROM” — the higher voltage is merely a signal to activate the internal flash memory programming circuit. It must be greater than 12.0 volts. The D0 output of from the PC controls this signal. No harm results from applying it at inopportune times.

The PIC communicates by means of a two-wire (plus ground) synchronous serial protocol. Pin B6 is the strobe signal; pulses on it tell the PIC when to accept or transmit each next bit of data. Pin B7 is both an input and an output. When the PIC is receiving from the PC, SLCTIN is held low and D2 does not conduct; D1 and R1 are effectively out of the circuit, and the PIC receives data from AUTOFD.

When the PIC is sending, SLCTIN and AUTOFD are high, D1 does not conduct, and D2 and R1 provide pull-up. Some additional pull-up is provided by R2 plus the pull-up resistor on AUTOFD inside the PC’s parallel port (nominally 4.7k, sometimes much lower in newer CMOS parallel ports). The PC reads the data on the BUSY pin, which is 0.6 volt higher than the output of the PIC because of D2. The PC parallel port has (or should have) CMOS or Schmitt inputs and should not require true TTL logic levels.

R2 and R3 help to reduce cable crosstalk by isolating the input capacitance of the PIC so that less current flows during sudden transitions. The PIC has Schmitt inputs and does not object to the resulting reduction in rise time. R4 protects the base of Q1.

Revised circuit: The circuit originally published in Electronics Now and software are quite reliable. However, for greater compatibility with a few PC parallel ports that had trouble with the original, I made some slight changes and additions:

  • Changing the diodes from 1N914 to 1N34 (or 1N34A) provides better logic levels, and therefore better noise immunity, at no additional cost.
  • R6 reduces cable reflections. Note: Aaron Hughes tells me his NOPPP worked better without it.
  • R7 and R8 provide pull-up apparently needed by a few parallel ports. (The input circuits of printers have resistors here.) R7 also ensures that if the programmer is powered up with no computer attached, the programming voltage will not be applied. (Applying the programming voltage momentarily would not cause a problem but I have had questions about it.)

Schematic Programmer

If you have the original circuit working, there is no need to make these changes. However, a very few PCs with nonstandard parallel ports or poor-quality cables benefit from them.

Parts Substitutions

1N914 = 1N4148
1N34 = OA76
2N2222 = MPS2222 = 2N3904 = MPS3904

Frequently asked questions about NOPPP

Is NOPPP available as a kit?


A simple kit based on NOPPP can be purchased from Oatley Electronics. The kit consists of a circuit board and parts. (Located in Australia, Oatley Electronics takes American credit cards and ships worldwide. Note that an Australian dollar is smaller than a U.S. dollar.)

A more elaborate kit, with power supply, enclosure, software disk, demonstration board, and manual, is now available from:


For more detail: NOPPP, the “No-Parts” PIC Programmer using PIC16F83

Current Project / Post can also be found using:

  • pic16c54 programmer
  • pic16c54c programming sample

Leave a Comment

= 4 + 9

Read previous post:
Classic LED 7-Segment Displays using PIC16F887

Just recently I have been addicted to old LED displays as they are small and bright and I love the...

Scroll to top