導航:首頁 > 操作系統 > 單片機隨機數

單片機隨機數

發布時間:2022-03-06 19:14:48

Ⅰ 51單片機產生隨機數c程序

剛寫的程序,我的思想是用定時器加rand()隨機函數來實現的,單片機上電之後通過按鍵去啟動取隨機數,若是單片機上電就立即取隨機數的話,那每次上電隨機的結果都是一樣的。然後是0到9不重復的隨機數,程序中用了循環來判斷是否和前面取的隨機數相同,相同則進入下次取隨機數,不同則存入數組。程序如下:#include<reg52.h>
#include<stdlib.h> //包含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;
}

Ⅱ 單片機C語言如何產生隨機數

KEIL裡面產生隨機數的函數確實是rand(),但頭文件是stdlib.h,不是time.h。

Ⅲ [請教高手]單片機怎麼實現產生隨機數

對於51單片機里有兩個定時器/計數器,可以利用其中的一個來產生隨機數。但要設置成方式2,自己計數狀態。這樣,只有8位數。但不要開中斷,只要計數就行。需要時就讀一次定時器的低8位就行了。
編程序,用定時器T1
MOV
TMOD,#20H
MOV
TH1,#0
MOV
TL1,#0
SETB
TR1
需要的時候,讀TL1,是8位數
MOV
A,
TL1
如果需要16位數,可以對讀出的8位數進行加或乘計算

Ⅳ 如何讓STC單片機生成隨機數

rnda=rand()%2;
rndb=rand()%3;

這樣就可以了 。。不過要記得包含rand 函數的頭文件

Ⅳ 如何在單片機中生成隨機數

rnda=rand()%2;rndb=rand()%3;這樣就可以了 。。不過要記得包含rand 函數的頭文件

Ⅵ 51單片機用C語言產生一個100以內的隨機數 怎麼生成

C語言本身並不能產生隨機數。
介紹一個比較簡單的隨機數獲取方法:啟動單片機的定時器,讓它自己跑不要發生溢出中斷,用戶操作時直接讀計數器數值,那基本上就是個隨機數。

Ⅶ 求高手賜教:51單片機怎麼產生隨機數

啟動定時器,需要隨機數時從定時器里讀一個值出來當作隨機數。
或者調用random()函數,不過得到的是偽隨機數。

Ⅷ 單片機如何產生隨機數

其他的庫函數SAND RAND都是偽隨機數。
使用若干個一直運行的timer,作為隨機源最好,不影響功耗沒有多餘開銷。
AD也可以不過測量的源在某個時間內隨機范圍比較小,可以選不同的源,比如懸空的IO電平,VCC,或者內部溫度,等等。
如果有外部輸入可以把這個作為隨機源,比如有用戶按鍵盤,或者外部通信

Ⅸ 51單片機如何生成隨機數

用定時器加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。

(9)單片機隨機數擴展閱讀:

統計學偽隨機性。統計學偽隨機性指的是在給定的隨機比特流樣本中,1的數量大致等於0的數量,同理,「10」「01」「00」「11」四者數量大致相等。類似的標准被稱為統計學隨機性。滿足這類要求的數字在人類「一眼看上去」是隨機的。

密碼學安全偽隨機性。其定義為,給定隨機樣本的一部分和隨機演算法,不能有效的演算出隨機樣本的剩餘部分。

真隨機性。其定義為隨機樣本不可重現。實際上只要給定邊界條件,真隨機數並不存在,可是如果產生一個真隨機數樣本的邊界條件十分復雜且難以捕捉(比如計算機當地的本底輻射波動值),可以認為用這個方法演算出來了真隨機數。

Ⅹ stm32單片機怎麼獲取隨機數

舉個例子:
srand(gSystickMsecCount); //gSystickMsecCount這個值是在Systick中斷中計數的變數
for(i=0;i<7;i++){
number[i] = rand() % 100; //生成0—100內的隨機整數
}

閱讀全文

與單片機隨機數相關的資料

熱點內容
改解壓格式 瀏覽:268
仿社交app源碼 瀏覽:289
解壓粘液模擬器英文版 瀏覽:671
看高鐵票多少錢用什麼app看 瀏覽:884
java介面返回值 瀏覽:89
奇跡文學APP為什麼不能用了 瀏覽:1000
怎麼用電腦玩手機版的我的世界伺服器 瀏覽:230
linux設備許可權 瀏覽:950
pdf轉曲軟體 瀏覽:149
雲伺服器怎麼做nas 瀏覽:457
有什麼可以提示快遞的app 瀏覽:311
什麼app的主題都是免費的 瀏覽:1002
se01加密路線和普通路線放 瀏覽:908
怎麼用安卓系統手機測量長度 瀏覽:46
回調突破主圖源碼 瀏覽:238
mc生存都市伺服器地址大全 瀏覽:92
unix網路編程環境搭建 瀏覽:963
pythonsocket高並發 瀏覽:257
python開發windowsgui 瀏覽:619
25減9的借位演算法 瀏覽:269