Microchip
直播中

杨阳

7年用户 180经验值
私信 关注
[问答]

用PIC16F87Aa怎么制作随机数生成器?

嗨,伙计们,我需要用PIC16F87Aa制作随机数生成器,它在两个数字(0-10)或(2-30)之间起作用。事实上,我用移位函数做了一个,但是每次给我相同的数字:(谢谢)

回帖(3)

胡红枚

2020-4-20 11:05:14
在计算机科学中用来描述随机性的术语是熵。更多的熵意味着更多的随机性。目前还没有生成熵的算法。增加算法熵的已知方法依赖于物理世界中与量子尺度事件相关的行为。这些动作中最方便的是温度相关的。对于PIC16F877A的具体情况,当以指令周期测量时,看门狗计时器需要多长时间才能断言。通过阅读和理解PIC16F877A数据表,您会发现t.WDT对VDD电压和芯片的结温有很大依赖性(表17-5,参数31,最小7毫秒,从-40°C到+85°C的最大33毫秒,通常在5伏和25°C下为18毫秒)。当用微秒分辨率测量WDT间隔时,会有少量的真实随机性。这对您意味着,有可能使PIC16F877A具有少量的真实随机行为,但是正确实现并不明显或简单。像这样的应用可以用MLPAB模拟器或Labcenter电子:Proteus PCB设计和仿真软件开发。然而,它不会有任何真正的随机行为。为了观察真正的随机行为,应用必须在真正的PIC16F87A芯片中运行。
举报

张蕾

2020-4-20 11:14:26
Hi在最近的一个项目中,我使用了16位Galois LFSR,取得了很好的效果。对于种子,我使用了双策略,即加电时的RAM垃圾与WDT时钟的低精度相结合。步骤1-在POR中,开始增加循环中的8位变量(Temp),直到发生WDT复位。步骤2-在WDTR之后“XOR”所有RAM位置的内容,包括SFRs。当一些SFR被初始化时,你不会以一个“0”的值来结束算法。种子的伪随机值的结果“异或”。将字节复制到16位伪随机数的高字节和低字节。步骤3-提取(调用LFSR函数)“Temp”伪随机数来初始化生成器。-现在您已经准备好开始生成伪随机数链,这些数字不会长时间重复,frOpor to HiHBTW:“PICLIST”档案有很多有趣的样本,包括LFSR。
举报

王淑英

2020-4-20 11:32:17
除非你需要任何特殊的东西,否则在C库随机数=(UIT32)RAND()%中使用RAND;它将给你一个随机数,具有0×10范围的随机数=((UIT32)RAND()%)+2;将给你一个具有2到30范围的随机数。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分