51单片机如何生成随机数?

请详细说明如何产生。我用rand()%2能生成0、1的随机数码
2025-02-27 21:57:17
推荐回答(5个)
回答1:

用定时器加rand()随机函数来实现。

rnda=rand()%2;

rndb=rand()%3;

单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入下次取随机数,不同则存入数组。 

在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD

具体使用可看一看absacc.h便知,例如:

rval=CBYTE[0x0002];指向程序存贮器的0002h地址

rval=XWORD[0x0002];指向外RAM的0002h地址

_at_关键字

直接在数据定义后加上_at_ const即可,但是注意:

(1)绝对变量不能被初使化;

(2)bit型函数及变量不能用_at_指定。

例如:

idata struct link list _at_ 0x40;指定list结构从40h开始。

xdata char text[25b] _at_0xE000;指定text数组从0E000H开始

提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描述,请参考absacc.h。

扩展资料:

统计学伪随机性。统计学伪随机性指的是在给定的随机比特流样本中,1的数量大致等于0的数量,同理,“10”“01”“00”“11”四者数量大致相等。类似的标准被称为统计学随机性。满足这类要求的数字在人类“一眼看上去”是随机的。

密码学安全伪随机性。其定义为,给定随机样本的一部分和随机算法,不能有效的演算出随机样本的剩余部分。

真随机性。其定义为随机样本不可重现。实际上只要给定边界条件,真随机数并不存在,可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机当地的本底辐射波动值),可以认为用这个方法演算出来了真随机数。

参考资料来源:百度百科-随机数

回答2:

用定时器加rand()随机函数来实现 

单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入下次取随机数,不同则存入数组。 程序如下: #include  

#include //包含rand()随机函数的头文件;

 unsigned char t,k,i,j,a,f,n[10]; 

//t是计时变量,k是按键标志,i是数组下标,f是随机数重复标志,n[10]是存放随机数的数组;

回答3:

计算机 只能产生伪随机数 (计算机不具有自发性) 你可以用定时器来产生伪随机数 比如事先运行定时器 然后再读定时器的值

回答4:

其他的库函数SAND RAND都是伪随机数。
使用若干个一直运行的timer,作为随机源最好,不影响功耗没有多余开销。
AD也可以不过测量的源在某个时间内随机范围比较小,可以选不同的源,比如悬空的IO电平,VCC,或者内部温度,等等。
如果有外部输入可以把这个作为随机源,比如有用户按键盘,或者外部通信

回答5:

1)使用外置部真随机数发生器获取;
2)自已设计一个简单的随机数算法(例如,使用ADC采样晶振引脚的电压,然后结合环境温度,程序例程间的执行跳转合成一个随机数),实用性比较好;
3)使用现成的伪随机数函数;