### 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;
}
```