如何不使用兰德()或srand()生成一个0或1,用于pic目的[已关闭]

yk9xbfzb  于 2023-01-12  发布在  其他
关注(0)|答案(1)|浏览(111)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

3天前关闭。
Improve this question
我正在尝试给一个微控制器编程,我希望寄存器的值为0或1,这样做的目的是如果值为1就打开一个led,如果值为0就保持关闭。我已经尝试过使用兰德,但它似乎不起作用。我还尝试过使用这个:

static int rand_number = 199198; // any random number
    rand_number = ((rand_number * rand_number) / 10 ) % 9890;
    return rand_number % (max_range+1-min_range) + min_range ; }

但它似乎不起作用,因为生成一个大于0或1的值,而我使用的参数只能有0或1的值。另外,如果我试图导入一个像chrono或time这样的库,我会得到错误,所以这是不可能的。我用C编写代码,使用pic12f675。

0pizxfdo

0pizxfdo1#

您可以使用链接问题accepted answer中建议的任何LFSR生成器,然后从中提取单个位,有多种可能的解决方案,其中包括:

  • 始终使用LFSR输出的同一位,最简单的是LSB(最低有效位)output & 1。您可以使用任何其他位,例如,将之前的输出下移(output >> 3) & 1
  • 修改建议的LFSR函数,返回bit而不是lfsr。这已经是范围[0,1]中的值。
  • 将下一个LFSR输出的调用 Package 在另一个函数中,该函数在输出的一位之后返回另一位。只有在使用了前一个输出的所有位之后,该 Package 器才会获得下一个LFSR输出。

相关问题