在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 用AVR單片機產(chǎn)生隨機數(shù)

            用AVR單片機產(chǎn)生隨機數(shù)

            作者: 時間:2013-12-09 來源:網(wǎng)絡 收藏

            , 星星燈
            源程序:SLAVR737.ASM
            產(chǎn)生,由PORTA 口及PORTC 口輸出,在8X8 LED上顯示,硬件接線電路見“7.3.8按鈕猜數(shù)”。的種子由程序設定(也可外接開關設定),啟動種子后,由移位寄存器以互斥的異或邏輯組合返回循環(huán)產(chǎn)生。
            .include"8515def.inc"
            rjmp RESET
            .def temp =r16 ;暫存器
            .def temp1 =r17 ;暫存器1
            .def udata =r21 ;存隨機數(shù)送A口
            .def ddata =r22 ;存隨機數(shù)送C口
            .cseg
            .org 0x10
            RESET: ldi temp,high(RAMEND);設堆棧指針
            out SPH,temp
            ldi temp,low(RAMEND)
            out SPL,temp

            ldi temp,0xff ;設A口、C口為輸出
            out ddra,temp ;送方向寄存器A
            out ddrc,temp ;送方向寄存器C
            start: wdr ;關看門狗
            ldi udata,0x6a ; 設置隨機數(shù)初值
            ldi ddata,0x3c ;
            startp: out porta,udata ;輸出到A口
            out portc,ddata ;輸出到C口
            ldi temp,0x80 ;設延時常數(shù)
            rcall delay ;調(diào)用延時子程序
            rcall randm ;調(diào)用十六位隨機數(shù)子程序
            rjmp startp
            delay: ; 通用延時子程序 從略
            ....
            16位移位產(chǎn)生隨機數(shù)原理圖
            8~16位移位寄存器產(chǎn)生隨機數(shù)循環(huán)組合
            位 數(shù) 循環(huán)輸入組合 S=2^n-1 Qn XOR Qm
            8 Q2 ⊕ Q3 ⊕ Q4 ⊕ Q8 (現(xiàn)程序按鈕猜數(shù)采用8位數(shù))
            9 Q5 ⊕ Q9
            10 Q7 ⊕ Q10
            11 Q9 ⊕ Q11
            12 Q2 ⊕ Q10 ⊕ Q11 ⊕ Q12
            13 Q1 ⊕ Q11 ⊕ Q12 ⊕ Q13
            14 Q2 ⊕ Q12 ⊕ Q13 ⊕ Q14
            15 Q14 ⊕ Q15
            16 Q4 ⊕ Q13 ⊕ Q15 ⊕ Q16

            randm: ;產(chǎn)生十六位隨機數(shù)子程序
            MOV temp,udata ;產(chǎn)生A口隨機數(shù)
            MOV temp1,udata ;
            rol temp ;通過進位位左循環(huán)移位
            eor temp1,temp ;異或
            rol temp ; 通過進位位左循環(huán)移位
            rol temp ; 通過進位位左循環(huán)移位
            eor temp1,temp ;異或
            MOV temp,ddata ; 產(chǎn)生C口隨機數(shù)
            swap temp ; 通過進位位左循環(huán)移位
            eor temp,temp1 ;異或通過進位位左循環(huán)移位
            rol temp ; 通過進位位左循環(huán)移位
            rol ddata ; 通過進位位左循環(huán)移位
            rol udata ; 通過進位位左循環(huán)移位
            ret ;子程序返回
            7.3.8 按鈕猜數(shù)程序
            源程序:SLAVR738.ASM
            許多場合如按鈕猜數(shù)(電腦搖獎,電腦選出幸運號),游戲開始按鈕等待一個不規(guī)則且不定序的數(shù)據(jù)產(chǎn)生,即須要隨機數(shù)發(fā)生器。隨機數(shù)的種子由程序設定(也可外接開關設定),啟動種子后,由移位寄存器以互斥的異或邏輯組合返回循環(huán)產(chǎn)生。產(chǎn)生隨機數(shù)的原理圖如下:
            16位移位產(chǎn)生隨機數(shù)原理圖
            8~16位移位寄存器產(chǎn)生隨機數(shù)循環(huán)組合
            位 數(shù) 循環(huán)輸入組合 S=2^n-1 Qn XOR Qm
            8 Q2 ⊕ Q3 ⊕ Q4 ⊕ Q8 (現(xiàn)程序按鈕猜數(shù)采用8位數(shù))
            9 Q5 ⊕ Q9
            10 Q7 ⊕ Q10
            11 Q9 ⊕ Q11
            12 Q2 ⊕ Q10 ⊕ Q11 ⊕ Q12
            13 Q1 ⊕ Q11 ⊕ Q12 ⊕ Q13
            14 Q2 ⊕ Q12 ⊕ Q13 ⊕ Q14
            15 Q14 ⊕ Q15
            16 Q4 ⊕ Q13 ⊕ Q15 ⊕ Q16


            以8X8 LED陣列,開機時為了避免被使用者預測出壓按時間對應隨機數(shù)的變化值,故LED字幕以廣告動畫畫面顯示,并令隨機數(shù)隨著變化使無法預測隨機數(shù)起始值,廣告動畫面共有四張,每張有。見”org dpfstb”;

            由按鈕(PD1)按下,AVR用產(chǎn)生隨機數(shù),由PORTA 口及PORTC 口輸出隨機數(shù),在8X8 LED上顯示好玩的真實的按鈕猜數(shù)。
            .include "8515def.inc"
            .def peed =r16
            .def dspn =r17 ;存顯示初始動畫次數(shù)
            .def temp2 =r18
            .def temp1 =r19
            .def temp =r20
            .def scndp =r21
            .def cnt =r22
            .def rdata =r23 ;存隨機種子數(shù)
            .def rdata9 =r24
            .equ dpfstb =0x01e0 ;大小矩形圖表首址
            .equ randtb =0x0210 ;隨機數(shù)種子表首址
            .equ numbertb=0x0240 ;0-9數(shù)字表首址
            .org $0000
            rjmp RESET ;Reset Handle
            .cseg
            .org $0010
            RESET: ldi peed,high(RAMEND) ;設置堆棧$25F,見器件配置文件"8515def.inc"
            out SPH,peed
            ldi peed,low(RAMEND)
            out SPL,peed
            ldi peed,0xff ;對口初始化,
            out ddra,peed ;設A口為輸出
            out ddrc,peed ;設C口為輸出
            ldi peed,0xfd ;PD1作輸入,且接內(nèi)部上拉電阻
            out ddrd,peed ;PD1為輸入,其余為輸出
            ldi peed,0xff ;關D口
            out portd,peed
            ldi peed,0x13 ;顯示畫面次數(shù)
            start: ldi dspn,0x06 ;顯示初始動畫
            ldi zh,high(dpfstb*2)
            ldi zl,low(dpfstb*2)
            dspfm: rcall ldtb8 ;調(diào)用程序區(qū)數(shù)送到內(nèi)存RAM
            ldi temp2,0xa0 ;顯示動畫面次數(shù)
            dspfm1: rcall scan1 ;調(diào)用從內(nèi)存取數(shù)顯示一次
            sbis pind,01 ;I/O口的位被置位跳行,檢測到PD1按下否
            rjmp getseed ; 檢測到PD1按下轉(zhuǎn)
            dec temp2 ;-1
            brne dspfm1 ;不為0轉(zhuǎn)
            dec dspn ; 初始畫面次數(shù)-1
            brne dspfm ; 不為0轉(zhuǎn)
            rjmp start ;轉(zhuǎn)到顯示初始動畫
            getseed:inc temp ;+`1,根據(jù)PD1按下的時間,選擇隨機數(shù)種子
            sbis pind,01 ; I/O口的位被置位跳行,檢測到PD1按下否
            rjmp getseed ; 檢測到PD1按下,繼續(xù)計數(shù)
            andi temp,0x1f ;按鈕松開,取隨機數(shù)種子與0X0F加
            ldi zh,high(randtb*2)
            ldi zl,low(randtb*2)
            add zl,temp
            lpm
            MOV rdata,r0 ;得到隨機數(shù)種子
            next: ldi dspn,0x08 ;顯示8個不同的隨機數(shù);
            repeet: rcall randm ;調(diào)用產(chǎn)生隨機數(shù)子程序
            rcall dspnumber ;調(diào)用顯示8個不同的隨機數(shù)
            dec dspn ;-1
            brne repeet ;dspn不為0轉(zhuǎn)
            rcall randm ; 調(diào)用產(chǎn)生隨機數(shù)子程序
            guess1: rcall dspnumber ;調(diào)用顯示同一隨機數(shù),直到有鍵按下
            sbic pind,01 ;松開后再往下執(zhí)行(I/O口清零跳行)
            rjmp guess1 ;轉(zhuǎn)顯示同一隨機數(shù),直到有鍵按下
            wait: rcall dspnumber ;
            sbis pind,01
            rjmp wait ;等待按鈕按下
            ldi rdata9,0x03 ;顯示動畫三次
            start0: ldi dspn,0x06 ;每次顯示六幅畫面
            ldi zh,high(dpfstb*2)
            ldi zl,low(dpfstb*2)
            dspfm0: rcall ldtb8 ;調(diào)用從Z指向的程序區(qū)取數(shù)據(jù)送到內(nèi)存0080-0087中
            ldi temp2,0xa0 ;顯示次數(shù)
            dspfm1a:rcall scan1 ;調(diào)用從內(nèi)存0080-0087中取數(shù)據(jù)顯示一次
            dec temp2 ;-1
            brne dspfm1a ;不為0轉(zhuǎn)
            dec dspn ;顯示初始動畫次數(shù)-1
            brne dspfm0 ;不為0轉(zhuǎn)
            dec rdata9 ;顯示動畫三次-1
            brne start0 ;不為0轉(zhuǎn)
            rjmp next ;轉(zhuǎn)顯示8個不同的隨機數(shù)
            dspnumber: ;顯示一個0-9數(shù)字的子程序
            ldi zh,high(numbertb*2)
            ldi zl,low(numbertb*2)
            add zl,rdata9
            rcall ldtb8 ;取數(shù)
            ldi temp2,0xa0 ;該數(shù)字重復顯示A0H次
            dspn1: rcall scan1
            dec temp2
            brne dspn1
            ret
            scan1: push xl ;從內(nèi)存0080-0087中取數(shù)據(jù)顯示一次
            ldi temp,0b01111111
            MOV scndp,temp
            ldi cnt,0x08
            col1: out portc,scndp ;顯示屏幕的一列
            ld r1,x+
            out porta,r1
            rcall delay
            sec
            ror scndp
            dec cnt
            brne col1
            pop xl
            ret
            ldtb8: ldi xl,0x80 ;從Z指向的程序區(qū)取數(shù)據(jù)送到內(nèi)存0080-0087中
            ldi xh,0x00
            ldi temp1,0x08
            push xl
            nexld1: lpm
            st x+,r0
            ld r0,z+
            dec temp1
            brne nexld1
            pop xl
            ret
            delay: ;通用延時子程序從略
            ....
            randm: MOV temp,rdata ;產(chǎn)生8N(0≤N≤9)隨機數(shù)子程序
            MOV temp1,rdata
            swap temp1
            eor temp,temp1
            rol temp1
            eor temp,temp1
            rol temp1
            eor temp,temp1
            rol temp
            rol rdata
            MOV rdata9,rdata
            andi rdata9,0x0f
            cpi rdata9,0x0a
            brsh randm ;產(chǎn)生了一個0≤RDATA9≤9的隨機數(shù)
            lsl rdata9
            lsl rdata9
            lsl rdata9
            ret

            .cseg
            .org dpfstb; ;大小方框字形表
            ;small o
            .db 0b00000000,0b00000000,0b00000000,0b00011000
            .db 0b00011000,0b00000000,0b00000000,0b00000000
            .db 0b00000000,0b00000000,0b00111100,0b00100100
            .db 0b00100100,0b00111100,0b00000000,0b00000000
            .db 0b00000000,0b01111110,0b01000010,0b01000010
            .db 0b01000010,0b01000010,0b01111110,0b00000000
            ;big o
            .db 0b11111111,0b10000001,0b10000001,0b10000001
            .db 0b10000001,0b10000001,0b10000001,0b11111111
            .db 0b00000000,0b01111110,0b01000010,0b01000010
            .db 0b01000010,0b01000010,0b01111110,0b00000000
            .db 0b00000000,0b00000000,0b00111100,0b00100100
            .db 0b00100100,0b00111100,0b00000000,0b00000000
            .cseg
            .org randtb ;隨機數(shù)種子表
            .db 0x5a,0x7b,0x5b,0x4f,0x66,0x6d,0x7d,0x07
            .db 0x3b,0x8c,0x67,0x9a,0x99,0x7e,0x2d,0x3e
            .db 0x5c,0x6d,0x5b,0x7e,0xf6,0xe7,0x4c,0xc8
            .db 0x69,0x9c,0xe2,0x75,0x6c,0xd3,0xe8,0x9a
            .cseg
            .org numbertb ;0-9數(shù)字字形表
            ;0
            .db 0b00111000,0b01000100,0b01000100,0b01000100
            .db 0b01000100,0b01000100,0b01000100,0b00111000
            ;1
            .db 0b00010000,0b00011000,0b00010000,0b00010000
            .db 0b00010000,0b00010000,0b00010000,0b00111000
            ;2
            .db 0b00011100,0b00100010,0b00100000,0b00010000
            .db 0b00001000,0b00000100,0b00000010,0b00111110
            ;3
            .db 0b00111100,0b00010000,0b00001000,0b00010000
            .db 0b00100000,0b00100000,0b00100010,0b00011100
            ;4
            .db 0b00100000,0b00110000,0b00101000,0b00100100
            .db 0b00100010,0b11111110,0b00100000,0b00100000
            ;5
            .db 0b01111110,0b00000010,0b00111110,0b01000000
            .db 0b01000000,0b01000000,0b01000010,0b00111100
            ;6
            .db 0b00110000,0b00001000,0b00000100,0b00111100
            .db 0b01000100,0b01000100,0b01000100,0b00111000
            ;7
            .db 0b01111100,0b01000000,0b00100000,0b00010000
            .db 0b00001000,0b00001000,0b00001000,0b00001000
            ;8
            .db 0b00111000,0b01000100,0b01000100,0b00111000
            .db 0b01000100,0b01000100,0b01000100,0b00111000
            ;9
            .db 0b00111000,0b01000100,0b01000100,0b01111000
            .db 0b01000000,0b01000000,0b01000100,0b00111000

            單片機相關文章:單片機教程


            單片機相關文章:單片機視頻教程


            單片機相關文章:單片機工作原理


            上拉電阻相關文章:上拉電阻原理


            評論


            相關推薦

            技術專區(qū)

            關閉