Frequently Asked Questions
How can I generate a random number?
Posted by PCM Programmer on the user forums, May 26th 2000.To create a random number, we calculate the parity on a byte that has been ANDed with 0xb4. We then shift that parity bit into the LSB of the byte.
Editors comments: In this example, rand() generates the random number and srand() sets the seed. The seed is a global variable and defined by 'random_byte'. This isn't perfect, but it works. With some modification, you could drop the srand() function and pass the seed value as a paramater to rand().
Another thought is to seed the random number generator with a counter from one of the timers. Timer 2 may be more ideal since it is 16bits, therefore resulting in less repetition or patterns appearing in the numbers generated. However, this example only uses 8 bit bytes for random number generation so you will have to edit it for a 16bit seed for full effect.
char random_byte; char rand(void) { char sum; sum = 0; // This calculates parity on the selected bits (mask = 0xb4). if(random_byte & 0x80) sum = 1; if(random_byte & 0x20) sum ^= 1; if(random_byte & 0x10) sum ^= 1; if(random_byte & 0x04) sum ^= 1; random_byte <<= 1; random_byte |= sum; return(random_byte); } void srand(char seed) { random_byte = seed; }