如何让单片机随机一个引脚输出高电平

如何让单片机随机一个引脚输出高电平,第1张

#include<stdlib.h>巧并

#include<reg51.h>

#define uchar unsigned char

uchar rd

bit flag=0

void ext0() inerrupt 0

{

rd=(int)24.0*(rand()/(RAND_MAX+1.0))

flag=1

}

void t0isr() intrrupt 1

{

}

main()

{

uchar tmp

TMOD=0x01

ET0=1

TR0=1

EX0=1

IT0=1

EA=1

srand(TH0*256+TL0)

while(1)

{

if(flag)

{

if(rd<8)P0=0x01<<rd

if(rd>=8 &&rd<16)P1=0x01<<(rd-8)

if(rd>=16)P2=0x01<空樱<孝亏迹(rd-16)

flag=0

srand(TH0*256+TL0)

}

}

}

也不知道你用的是那种51!就89S51而言吧。引脚有两种状态,一是“读引脚”,而是引脚对应的“寄存器”。读引脚手码只需要要MOV A,P0.1(汇编),t1 = P0.1(C语言)。另外可以告诉你一个测引脚毁薯棚变化的方法,就是引用定时器电平外部中断,不但实时的测试出脉冲的发生时间,而且能测纤则试出脉冲的时间长度。呵呵

用定时器加rand()随机函数来实现。

rnda=rand()%2

rndb=rand()%3

单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入下次取随机数,不同则存入数组。

在程序中,用“#include<absacc.h>”即可使用其中定义的宏来访问绝对地址,包括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”四者数量大致相等。类似的标准被称为统计学随机性。满足这类要求的数字在人类“一眼看上去”是随机的。

密码学安全伪随机性。其定义为,给定随机样本的一部分和随机算法,不能有效的演算出随机样本的剩余部分。液备州

真随机性。其定义为随机样本不可重现。实际上只要给定边界条件,真随机数并不存在,可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机当地的本底辐射波动值),滚码可以认为用这个方法演算出来了真随机数。

参考资料来源:百度百科-随机数


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12402103.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存