A method for programming a single floating-gate memory cell to store one of three or more threshold voltages, the memory cell having a source formed in a substrate, a drain formed in the substrate a distance apart from the source, a floating gate formed over the substrate, and a control gate formed over the floating gate, the method comprising the steps of:
- selecting one of three or more programming voltages as a selected programming voltage, the three or more programming voltages corresponding to said three or more threshold voltages;
- applying a first voltage to the substrate;
- applying a second voltage to the source so that a source-to-substrate junction is forward-biased;
- applying a third voltage to the drain so that a drain-to-substrate junction is reverse-biased;
- and
- applying the selected programming voltage to the control gate of the memory cell for a predetermined time.