单片机-产生随机数-无AD无EEPROM无按键-Ask For Help

2020-02-06 10:34发布

一款小商品上需要用到低成本的单片机,于是我选用PIC12F509的替代单片机麦肯的”MDT10P509“,单价在0.5¥左右。
该产品是超再生无线控制的,所以需要编码。
这就涉及到一个问题:1千个产品,用同一个程序怎么实现不一样的编码(或者说多个产品放在一起用怎么不会相互干扰?)。

选用的这款低成本的单片机:没有AD,没有EEPROM,所以无法从外部引入一个种子变量。

用户在给产品上电时,单片机产生一个随机数,用这个随机数去编码(只需要单片机上电时产生一次随机数就可以了)。

我目前的思路是:利用软件延时和定时器延时的时间差不一样来产生一个随机数(即软件延时的时间有误差)。
可是我用STM80ss3的单片机试了下,单片机每次上电发送的串口数据都是一样的(由于PIC12单片机还不是很熟悉,所以先用STM8S单片机试一下能不能产生随机数)。

还望各位前辈不吝赐教!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
32条回答
~just_yy
1楼-- · 2020-02-10 00:03
不是啊  hex文件烧录时候 指定位置的自增不就行了? 你看现烧录器有没有这种功能。STC都有啊。你到时候指定读取一个位置作为种子 这个位置在烧录的时候通过烧录器自增。
squall45
2楼-- · 2020-02-10 06:00
上面讨论的所有产生伪随机数都是不可靠的,由于数量众多,简单的随机数产生,从长期的统计来看,重复的几率还是比较大的。由于考虑到509的RAM和ROM都有限的情况,建议是使用自增的办法,但是烧写自增的办法,必须要看烧写软件是否支持。
wdwd
3楼-- · 2020-02-10 11:44
利用超再生接收的噪声脉冲作为种子,产生伪随机数。
mhw
4楼-- · 2020-02-10 12:29
想复杂了,其它工程师几十年前都想到了……你要的不是随机数,是唯一ID,这个可以烧录时靠编程器自动写到程序存储区某个地址的(通常是尾部),然后你程序只知道那个地址的数据是唯一的就行了……
cnxh
5楼-- · 2020-02-10 13:58
 精彩回答 2  元偷偷看……
vows
6楼-- · 2020-02-10 15:42
先在程序里面定义一个ID变量,例如0xDEAD,0xBEAF,然后编译得到HEX或者BIN文件,然后用16进制编辑器等查找0xDEAD,0xBEAF所在地址,然后自己写一个专门软件根据这个地址改变数值生成上千个不同ID的HEX或者BIN文件,如果有基于命令行的烧写工具可以完全做到自动烧写。

一周热门 更多>