找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3600|回复: 7
收起左侧

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

[复制链接]
ID:571350 发表于 2019-6-29 15:54 | 显示全部楼层 |阅读模式
10黑币
汇编好像没有随机数生成的指令

回复

使用道具 举报

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   ;
回复

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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() //主函数.
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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