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

如题所述

1. 生成随机数的一种方法是结合定时器和`rand()`函数。例如,可以设定`rnda=rand()%2;`生成0或1的随机数,`rndb=rand()%3;`生成0、1或2的随机数。
2. 当单片机上电后,可以通过按键启动随机数生成过程。如果在上电时就立即获取随机数,每次上电得到的随机数序列将会相同。
3. 为获取不重复的0到9之间的随机数,程序中采用了循环判断机制。如果新生成的随机数与之前存储的随机数不同,则将其存入数组;若相同,则重新生成。
4. 在程序中访问绝对地址可以使用`absacc.h`头文件中定义的宏,如`CBYTE`、`XBYTE`等。例如,`rval=CBYTE[0x0002];`指向程序存储器的0002h地址,`rval=XWORD[0x0002];`指向外RAM的0002h地址。
5. 使用`_at_`关键字可以指定绝对变量的起始地址。注意,绝对变量不能被初始化,位类型的函数和变量不能使用`_at_`指定。例如,`struct link list _at_ 0x40;`指定结构体`list`从40h地址开始。
6. 对于外部绝对变量,特别是像I/O端口这类可能会变化的数据,应使用`volatile`关键字进行修饰,以参考`absacc.h`中的相关说明。
7. 统计学上的伪随机性指的是在给定的随机比特流样本中,1和0的数量大致相等,同理,“10”、“01”、“00”、“11”四种组合的数量也应大致相等。
8. 密码学中的伪随机性定义为,仅凭随机样本的一部分和随机算法,无法有效推算出剩余部分。而真随机性指的是随机样本不可重现,但实际上真随机数并不存在。如果生成随机数的边界条件复杂且难以捕捉(如计算机当地的背景辐射波动值),可以认为这种方法生成了真随机数。
以上内容均来源于百度百科关于随机数的解释。
温馨提示:内容为网友见解,仅供参考
无其他回答

51单片机如何生成随机数?
1. 生成随机数的一种方法是结合定时器和`rand()`函数。例如,可以设定`rnda=rand()%2;`生成0或1的随机数,`rndb=rand()%3;`生成0、1或2的随机数。2. 当单片机上电后,可以通过按键启动随机数生成过程。如果在上电时就立即获取随机数,每次上电得到的随机数序列将会相同。3. 为获取不重复的...

51单片机rand怎么用
一种方法是通过键盘手动输入随机数,尽管这种方法操作较为繁琐,但在特定情况下仍可适用。另一种方法是利用单片机内部的定时器功能,通过读取定时器的计数值来生成随机数。这样生成的数值范围大约在0到65535之间,虽然不能严格称为真正的随机数,但可以满足大部分应用需求。使用定时器生成随机数的具体步骤包...

51单片机如何生成随机数?
单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入下次取随机数,不同则存入数组。在程序中,用“#include<absacc.h>”即可使用其中定义的宏来访问绝...

51单片机产生随机数c程序
if(!i) \/\/i=0时取第一个随机数放入数组n[0]{ srand(t); \/\/随机数初始化 a=(char)(rand()%10); \/\/取随机数(0~9)n[0]=a; \/\/存入数组 i++; \/\/数组下标加1 } else while(i<10) \/\/存放剩下的9个随机数 { srand(t); \/\/随机数初始化 a=(char)(rand()%10); \/\/...

求高手赐教:51单片机怎么产生随机数?
启动定时器,需要随机数时从定时器里读一个值出来当作随机数。或者调用random()函数,不过得到的是伪随机数。

用51单片机汇编语音随机产生一个1~33的随机数, 或者不能重复,能显示...
一直用C51,汇编不大会,你可以这样:初始化一个8位的定时器,让它自己从0开始加,不用设置中断,每隔一定时间去就读一次定时器的值t,那么t是随机的(0<=t<=255),然后t=t mod 34,产生0~33的一个数,是0就放弃重新取值,就可以达到目的 ...

51单片机用C语言产生一个100以内的随机数 怎么生成?
C语言本身并不能产生随机数。介绍一个比较简单的随机数获取方法:启动单片机的定时器,让它自己跑不要发生溢出中断,用户操作时直接读计数器数值,那基本上就是个随机数。

51单片机汇编伪随机数的算法产生
你用这个算法吧:读定时器0的TL0值作为种子,然后对种子循环左移2次,保存,再读取TL0的值,与刚才的数或处理得到一个0-255的随机数.除以10后就得0-25的随机数.再除2得0-12的随机数.虽然算法简单,但能用就行.

51单片机用c语言怎么让i得到一个0-15的随机数
启动计数器0,将TL0的值%16即可得到!static unsigned char random=5; \/\/再次运行时值已改变。char i;TMOD= 0x20;TR0 =1;for(i=0;i<random; i++);\/\/运行一段时间 ramdom *= TH0;random %=16;

求51单片机汇编语言取随机数子程序
一个做低8位,一个做8位就行了。在主循环程序中放如下指令:MOV A , NUMBERL INC A MOV NUBBERL, A ;保存低8位 JNZ TONEXT INC NUMBERH ;高8位加1 TONEXT: 其它指令 同样,用随机数时就从这两个单元中读取就行了。

相似回答
大家正在搜