找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5594|回复: 7
打印 上一主题 下一主题
收起左侧

51单片机如何自动随机亮起一个LED灯 求汇编程序思路

[复制链接]
跳转到指定楼层
楼主
ID:571350 发表于 2019-6-29 15:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10黑币
汇编好像没有随机数生成的指令

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:571350 发表于 2019-6-29 15:59 | 只看该作者
有没有哪位大神救一下的
回复

使用道具 举报

板凳
ID:155507 发表于 2019-6-29 18:49 | 只看该作者
计算机 只能产生伪随机数 (计算机不具有自发性) 你可以用定时器来产生伪随机数 比如事先运行定时器 然后再读定时器的值 ,可以得出随机数。

完全由软件编程来得到的,就没有随机性。
今天得到的一系列数据,看起来,好像是随机的。
明天重新启动后,再得到的,还是相同的一批数据。
回复

使用道具 举报

地板
ID:207421 发表于 2019-6-29 21:29 | 只看该作者
MOV AX, 3   ;
MOV DX, 41H ;
OUT DX, AX  ;
IN AL, DX   ;
回复

使用道具 举报

5#
ID:401564 发表于 2019-7-1 08:32 | 只看该作者
汇编是没有随机这个指令的
你可以找一个已经可以正常编译的C的随机函数,然后在KEIL中编译,然后,就可以看到它生成的汇编代码了
回复

使用道具 举报

6#
ID:565305 发表于 2019-7-1 09:35 | 只看该作者
伪随机序列算法, 有两种简单的,相关关键字:  线性同余随机数生成器、MT19937算法 (均需要初始种子。初始种子可以靠时间值、某寄存器状态位、用户操作间隔等来生成,或者下文方法)

靠硬件 AD 采样的真正硬随机(采集不能太频繁否则不够随机,但方法得当就是真正的随机):当存在有AD采样电路时,设定某AD采样脚位为悬浮状态,每隔一小段时间后采样取出该AD值的低位某几个BIT,多次后拼凑为一个值。(弥补伪随机序列的起始种子问题)
回复

使用道具 举报

7#
ID:575387 发表于 2019-7-1 09:46 | 只看该作者
C语言程序如下,已经经过了仿真,符合要求.
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar t1 = 0;
//-------------------------------
void TIME0()interrupt 1
{
TH0 = 0xD8; //初值.
TL0 = 0xF0; //10ms @ 12MHz
t1++;
}
//-------------------------------
void main() //主函数.
回复

使用道具 举报

8#
ID:351627 发表于 2019-7-1 10:27 | 只看该作者
只能是通过定时器,外设(例如AD),系统寄存器等累加或者一个CRC校验和来产生一个伪随机值。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表