ATmega1 28單片機的真隨機數(shù)發(fā)生矗
1.2 方 法
1.2.1 RC電路充放電過程
I/O口配置策略為:PG3 口(第18腳)作為充電輸出口,PG4 口(第19腳)作為檢測輸入口。當(dāng)PG3輸出為高時,輸出電流通過電阻對電容進行充電;當(dāng)PG3輸出為低時,電容通過電阻放電。PG4用于檢測電容上的電平狀態(tài)。充放電過程如圖2所示。
1.2.2 AVR單片機獲得不確定的2位二進制數(shù)據(jù)
AVR單片機主時鐘采用普通晶體振蕩器。用該主時鐘來測量RC電路的充放時間,用AVR單片機的定時器(1個16位定時器)來量化充放電時間。由于主時鐘的周期遠遠小于RC充放電時間,觀察實驗數(shù)據(jù),最低2位二進制有效數(shù)字具有不確定性。以下為AVR單片機定時器對外部RC電路進行3次充電和2次放電所花時間的量化值:
1597 1588 1584 1588 1588
1589 1588 1589 1584 1589
1589 1589 1589 1584 1589
1584 1588 1588 1588 1588
1588 1588 1589 1589 1587
1596 1588 1588 1589 1589
1589 1588 1588 1588 1589
1588 1584 1589 1589 1589
1589 1589 1588 1588 1588
1588 1589 1588 1588 1588
1588 1584 1589 1588 1588
1588 1589 1589 1588 1589
1589 1589 1588 1588 1588
1588 1588 1589 1588 1590
1588 1589 1588 1588 1588
1597 1589 1588 1597 1587
1588 1588 1587 1588 1588
1588 1588 1588 1588 1588
1589 1589 1589 1588 1589
1588 1588 1589 1588 1588
1588 1588 1588 1588 1588
1588 1588 1589 1588 1589
1596 1589 1588 1589 1588
1588 1588 1588 1589 1584
1589 1589 1589 1588 1585
1589 1588 1588 1588 1589
1589 1588 1589 1588 1588
1589 1589 1589 1588 1597
1589 1588 1589 1589
1.2.3 程序設(shè)計
由以上數(shù)據(jù)統(tǒng)計特征可見,每次測量結(jié)果僅有兩位不確定二進制數(shù)據(jù)。為了產(chǎn)生1個8位數(shù)據(jù),設(shè)計了C語言程序控制專用函數(shù)測量4次,每次得到了2個二進制隨機數(shù),這樣調(diào)用該函數(shù)1次即可得到1字節(jié)的隨機數(shù)。
主要程序如下:
評論