用51单片机汇编语音随机产生一个1~33的随机数, 或者不能重复,能显示。

作者&投稿:钞蓝 (若有异议请与网页底部的电邮联系)
51单片机产生随机数c程序~

刚写的程序,我的思想是用定时器加rand()随机函数来实现的,单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入下次取随机数,不同则存入数组。程序如下:#include
#include //包含rand()随机函数的头文件
unsigned char t,k,i,j,a,f,n[10];
//t是计时变量,k是按键标志,i是数组下标,f是随机数重复标志,n[10]是存放随机数的数组
void init() //初始化函数
{
t=0;
i=0;
f=0;
k=0;
TMOD=0x02; //设置定时器0为工作方式2
TH0=7; //装初值
TL0=7;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时0
EX0=1; //开外部中断0,同按键的效果一样
IT0=1; //下降沿触发
}
void main()
{
init();
while(1)
{
while(k) //外部中断0触发循环
{
if(!i) //i=0时取第一个随机数放入数组n[0]
{
srand(t); //随机数初始化
a=(char)(rand()%10); //取随机数(0~9)
n[0]=a; //存入数组
i++; //数组下标加1
}
else
while(i<10) //存放剩下的9个随机数
{
srand(t); //随机数初始化
a=(char)(rand()%10); //取随机数
for(j=0;j<i;j++) //与前面的随机数比较
{
if(n[j]==a) //与前面的随机数相同
f=1; //标志置1
}
if(f) //有重复执行
{
f=0; //标志清0
continue; //结束本次循环
}
n[i]=a; //不同则存入数组中
i++; //数组下标加1
}
}
}
}
void inter0() interrupt 0 //外部中断0
{
k=1; //按键标志置1,主函数执行取随机数
}
void time0() interrupt 1 //定时器0中断
{
t++; //时间加1
if(t==100) t=0;
}

用定时器加rand()随机函数来实现。
rnda=rand()%2;
rndb=rand()%3;
单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入下次取随机数,不同则存入数组。
在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD
具体使用可看一看absacc.h便知,例如:
rval=CBYTE[0x0002];指向程序存贮器的0002h地址
rval=XWORD[0x0002];指向外RAM的0002h地址
_at_关键字
直接在数据定义后加上_at_ const即可,但是注意:
(1)绝对变量不能被初使化;
(2)bit型函数及变量不能用_at_指定。
例如:
idata struct link list _at_ 0x40;指定list结构从40h开始。
xdata char text[25b] _at_0xE000;指定text数组从0E000H开始
提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描述,请参考absacc.h。

扩展资料:
统计学伪随机性。统计学伪随机性指的是在给定的随机比特流样本中,1的数量大致等于0的数量,同理,“10”“01”“00”“11”四者数量大致相等。类似的标准被称为统计学随机性。满足这类要求的数字在人类“一眼看上去”是随机的。
密码学安全伪随机性。其定义为,给定随机样本的一部分和随机算法,不能有效的演算出随机样本的剩余部分。
真随机性。其定义为随机样本不可重现。实际上只要给定边界条件,真随机数并不存在,可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机当地的本底辐射波动值),可以认为用这个方法演算出来了真随机数。
参考资料来源:百度百科-随机数

一直用C51,汇编不大会,你可以这样:
初始化一个8位的定时器,让它自己从0开始加,不用设置中断,每隔一定时间去就读一次定时器的值t,那么t是随机的(0<=t<=255),然后t=t mod 34,产生0~33的一个数,是0就放弃重新取值,就可以达到目的

51单片机怎么用汇编语言生成随机数?
答:51单片机没有随机数产生的硬件,汇编语言中也没有相关指令。

51单片机用random()函数随机产生0和1,LED亮灭表示0和1?
答:如果没有外界因素介入,51 单片机是不会出现随机数的。C 语言的随机数函数,一般是从定时器取值。但是,单片机的程序是固定的,执行到 random() 时的时刻,也是固定的。如果没有外界因素介入,产生的随机数,也就是确定的值。

用C语言编写,使用51单片机生成0--9不重复数字。请问用什么做随机种子...
答://这种算法比较节省空间(至少我是这么觉得)//用一个unsigned int型变量,记录已生成的随机数,代码如下#include <reg51.h>#include<stdlib.h>unsigned int random = 0x00;unsigned char nums[10] = {0};void myrand(){ unsigned char temp,i; for(i=0;i<10,++i) { temp=r...

求51单片机汇编语言取随机数子程序
答:MOV NUBBERL, A ;保存低8位 JNZ TONEXT INC NUMBERH ;高8位加1 TONEXT: 其它指令 同样,用随机数时就从这两个单元中读取就行了。

怎么让51单片机产生随机数?
答:源代码不提供,你可以使用srand函数或是启用一个定时器,需要的随机数取自定时器的计数值或是以计数值作为种子,按照一定的算法产生随机数。

51单片机汇编语言产生50HZ,持续0.1s的方波,用模式1
答:定时器配置为模式1,装载10ms中断的初值,每中断两次取反一个IO口,得出50Hz的方波,中断10次就关闭IO口的输出,题目完成。

用51单片机制作红绿灯,要求按键能控制整个电路的启动和停止,用汇编语言...
答:回答:交通路口红绿灯自动控制器电路图 如图所示为交通路口红绿灯自动控制电路。该控制器主要由四块555(IC2~IC5)和一些阻容元件组成的四级单稳态延时电路首尾相连而成。输入的8V电压经78M05稳压后为555提供VDD=+5V的电源电压。 当刚接通电源时,触发脉冲经IC1(CD4011)门电路和R1、C1延时,再经C2、R22...

51单片机汇编语言?
答:;P0接数码管 ;由外部中断输入三个按键。;按下1号按键,显示数码1;;按下2号按键,显示数码2;;按下3号按键,显示数码3。电路与程序,如下所示:

51单片机如何用汇编语言从十个数里选出最大值最小值
答:1、首先可以利用51单片机子程序输出找到的最大最小值。2、其次按照数据存储或者输入的顺序,把每2个数进行比较。3、最后每次比较都选择较大的数和下一个数据进行比较,这样最后一次比较中较大数就是10个数据里面的最大值。

怎么样用51单片机产生三路占空比PWM波啊?要汇编语言的,有思路也行_百...
答:INCKEY EQU P3.2 ;K1,PWM值增加键。 DECKEY EQU P3.4 ;K2,PWM值减小键。BEEP EQU P2.2 ;--- ORG 0000H SJMP START ORG 000BH SJMP INTT0 ORG 001BH SJMP INTT1 ORG 0030H ;--- ;主程序 ;定时器0工作在模式1,定时器1工作在模式2。;-...