there is no such thing as a software random number generator.

numbers generated by software will be pseudorandom numbers. what this means is all the numbers are part of a sequence. given enough numbers, the sequence will emerge. think of it as a very long period (i'm talking about the math thing at fractional numbers). it might be very long, but after a while, it repeats.

to start every time at a different position, a "seed" or initial value is used. starting a timer on your microcontroller, waiting for a "start" key, and using the timer value as an input is a pretty good initial seed.

the basic pseudorandom generators are called linear feedback shift registers. think of them as a function that has an input, does some xoring, shifting (actually, it's barrel shifting) and a bunch of more logical operations on that input, and then returns it as an output. if you pass it again, you will get another pseudorandom value. if you pass it sufficient times, a pattern will emerge.

a true random number generator for 8 bits value will not generate any pattern after an infinite number of calls.

this is a nice design i plan on using someday. it's based on reverse avalanche noise generated by an inverse polarised pn junction. i believe a diode will work equally well.