发新帖我要提问
12
返回列表
打印

51汇编游戏之“读心术”

[复制链接]
楼主: 不亦心
手机看帖
扫描二维码
随时随地手机跟帖
21
tingtang| | 2009-10-18 12:33 | 只看该作者 回帖奖励 |倒序浏览
ooooooooooooooooooooooooo:time:

使用特权

评论回复
22
icmap| | 2009-10-18 15:22 | 只看该作者
单片机产生随机数的方法:
在多个不同的时刻读取定时器的 TL0 的最低一位(即判断 TL0 的奇偶性),每次读得的结果就是随机数的一位。
如果随机数是 1 Byte(0~255),则读取 TL0 的最低位 8 次组成该随机数。
关键是读取的时刻要没有什么规律才比较接近随机。

另外一个方法就是用 AD 转换,将 AD 引脚通过 1M 欧电阻接到 OSCO 引脚,读取 AD 值的最低一位,读8次则构成一个 1 Byte 的随机数。第二个方法的缺点就是可以从单片机的外部被人为的将 AD 引脚接到 GND,失去随机功能。

使用特权

评论回复
23
不亦心|  楼主 | 2009-10-18 15:48 | 只看该作者

我直接汇编嵌套C得了

21# mohanwei

使用特权

评论回复
24
不亦心|  楼主 | 2009-10-18 15:49 | 只看该作者
非常感谢。
我用的是第一种方法,

我得好好研究一下你说的第二种方法。

23# icmap

使用特权

评论回复
25
icmap| | 2009-10-18 15:57 | 只看该作者
补充一下,如果AD引脚在上电的瞬间不是高阻态,有可能造成晶振不起振。改为用 10M 欧电阻试试看。我没试过这种方法,仅仅是一个建议。:L

使用特权

评论回复
26
不亦心|  楼主 | 2009-10-20 20:51 | 只看该作者
自己来一个

支持支持支持支持支持支持支持支持支持支持支持支持▓▓▓▓▓▓▓▓▓支持支持
支持支持支持支持支持支持支持支持支持支持支持支持▓▓▓▓▓▓▓▓▓支持支持
支持支持支持支持支持支持支持支持支持▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓支持支持
支持支持支持支持支持支持支持支▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓支持支持
支持支持支持支持支持支▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓支持支持支持支持支持
支持支持支持支持▓▓▓▓▓▓▓支▓▓▓支持▓▓▓▓▓支持支持支持支持支持支
支持支▓▓▓▓▓▓▓▓▓▓▓▓支持支持支持▓▓▓▓支持支持支持支持支持支持
支▓▓▓▓▓▓▓▓▓▓▓▓▓▓支持支持支持▓▓▓▓支持支持支持支持支持支持
支▓▓▓▓▓▓▓▓▓▓▓▓支持支持支持支▓▓▓▓▓▓▓▓▓▓▓支持支持支持
支▓▓▓▓▓▓▓▓▓▓▓▓支持支持支持▓▓▓▓▓▓▓▓▓▓▓▓▓▓支持支持
支持▓▓▓▓▓▓▓▓▓▓支持支持支▓▓▓▓▓▓支持支▓▓▓▓▓▓▓支持支持
支持支持支持支持▓▓▓▓支持支持支▓▓▓▓支持支持支持▓▓▓▓▓支持支持支
支持支持支持支持▓▓▓▓支持支持▓▓▓▓支持▓▓支持支▓▓▓▓▓支持支持支
支持支持支持支持▓▓▓▓支持支持▓▓▓▓支持▓▓▓▓支▓▓▓▓▓支持支持支
支持支持支持支持▓▓▓▓支持支持▓▓▓▓支持▓▓▓▓支▓▓▓▓▓支持支持支
支持支持支持支持▓▓▓▓支持支持▓▓▓▓支持▓▓▓支持▓▓▓▓▓支持支持支
支持支持支持支持▓▓▓▓支持支持▓▓▓▓支持▓▓▓支持▓▓▓▓▓支持支持支
支持支持支持支持▓▓▓▓支持支持▓▓▓▓支▓▓▓▓支持▓▓▓▓▓支持支持支
支持支持支持支持▓▓▓▓支持支持▓▓▓▓支▓▓▓▓支持▓▓▓▓▓支持支持支
支持支持支持支持▓▓▓▓支持支持▓▓▓▓支▓▓▓▓支持▓▓▓▓▓支持支持支
支持支持支持支持▓▓▓▓支持支持▓▓▓▓支▓▓▓▓支持▓▓▓▓▓支持支持支
支持支持支持支持▓▓▓▓支持支持▓▓▓支持▓▓▓▓支持▓▓▓▓▓支持支持支
支持▓▓支持支▓▓▓▓▓支持支持▓▓▓支持▓▓▓支持支▓▓▓▓▓支持支持支
支持▓▓▓▓▓▓▓▓▓▓支持支持支▓▓支持▓▓支持支持▓▓▓▓▓支持支持支
支持支▓▓▓▓▓▓▓▓▓支持支持支持支持▓▓▓支持支持支▓▓▓▓支持支持支
支持支持支▓▓▓▓▓▓▓支持支持支持支持▓▓▓支▓▓▓▓支持支持支持支持支
支持支持支持▓▓▓▓▓▓支持支持支持支▓▓▓▓支持▓▓▓▓▓支持支持支持支
支持支持支持支持支▓▓▓支持支持支持▓▓▓▓▓支持支▓▓▓▓▓▓▓支持支持
支持支持支持支持支持支持支持支持▓▓▓▓▓▓支持支持支▓▓▓▓▓▓支持支持
支持支持支持支持支持支持支持支▓▓▓▓▓▓支持支持支持▓▓▓▓▓▓▓支持支
支持支持支持支持支持支持支持▓▓▓▓▓支持支持支持支持支▓▓▓▓▓▓支持支
支持支持支持支持支持支持支▓▓▓▓▓支持支持支持支持支持支▓▓▓▓支持支持
支持支持支持支持支持支持▓▓▓支持支持支持支持支持支持支持支▓▓▓支持支持

使用特权

评论回复
27
DC_BOY| | 2009-10-20 22:59 | 只看该作者
很好,学习了

使用特权

评论回复
28
xfgood3872| | 2010-4-7 20:43 | 只看该作者
看过这个以前

使用特权

评论回复
29
liwenkuicymx| | 2010-5-23 10:14 | 只看该作者
呵呵,学习学习........

使用特权

评论回复
30
一棵小草| | 2010-5-23 14:06 | 只看该作者
能写出这样的汇编程序,已经很不错了!但是有些规范还不是很好,子程序/标号的命名,变量/常量的定义,程序的框架,还有待提高。

随机数,我的理解是,每种情况的发生,概率都是一样的,而且都是“几”分之一。如果是单单“算法”的随机,那么总是有规律的,随机的成份也不平衡,即有的情况概率大,有的情况概率小。我看过一个很复杂的随机数产生的外文,具体的忘记了,反正很复杂,就算如此,也不能保证每种情况都是几分之一。

所以,定时器计数是要的,但是随机数的读取就有问题了。看你的程序,是在程序中“直接”读取定时器值来作为随机数的。因为程序执行是一个大循环,那么执行到取随机数这块的时间,即使不是固定的时间,也相差不大。那么,随机数的产生,肯定不平衡,有些随机数出现的概率大,有些就很小。

复杂的随机数也许没有必要,也可以像以上所说的,用AD啊什么的。如果是我的话,我会用定时器来产生一个随机数表,在某一时刻,我按键按下,就产生一个随机数。比如,我要产生一个0到10的随机数。那么我就让定时器从0计算到10,10之后再返回0不断执行计数。某一时刻,按键按下,我就取定时器值赋给随机数。因为按键是随机(随时)按下的,所以每个数的产生,我认为都是10分值1。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则