告诉你,我在工作中采用的方法: 1、一定要基于一个随机的输入事件。只要是与IO口相连接的,输入无规律的都可以拿来作为随机事件。 2、建立一个高速循环计数器N。 3、建立一组随机数存储单元R[]用于储存随机数,数组数量由你根据需要而定。 4、每当IO发生输入事件时(输入是随机的),就将N存入R[]中,也是轮流循环复盖存储。 如此:R[]中的数字(或其中的几位,例如N是16位的,而你只要取0-127,则取其中的任意7位即可)就作为随机数,供你使用。 本方式的使用条件是:取随机数速率,小于IO随机事件发生的速率。 为何要用数组储存呢?偶尔两次取随机数间隔时间,会小于IO口输入事件的间隔时间。用数组可以先储存一些随机数(事件前产生的)。 |
随机数可以用哈希算法产生,比如md5、sha256,计算需要一定时间。 |
没什么好办法,C51里面随机函数是伪随机数,但是人类按键动作跟定时器运行是完全不相关的,所以以按键时定时器的值来做随机种子,伪随机算法一样可以获得真随机数。 但是你要定时自动生成,我就想不出能弄出真随机数的办法了。 |