在单片机的应用中,我们会遇到产生随机数的场合。这样一种好的随机数产生方式就比较重要,这里介绍一种利用ADC产生随机数的方法。
在一般数字电路中使用到的ADC在正常情况下由于环境噪声的普遍存在,ADC产生的数据最后一位总是在变化,而且是完全随机的变化,利用这一点即可产生随机数。
以产生一个8位随机数为例,示例代码如下:
//随机数
rand_temp=0,rand=0;
for(i=0;i<8;i++)
{
adcx=Get_Adc(ADC_Channel_1);
rand_temp=adcx&0x0001;
rand=(rand<<1)+rand_temp;
}
在每个循环中,先获取ADC的值,再将得到的值与0001进行位与(这里adcx是16位的),得到最后一位赋给rand_temp。最后rand左移一位与rand_temp相加,这样循环8次即可得到一个8位的随机数。