您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机用AVR单片机8位数据产生随机数 正文
用AVR单片机8位数据产生随机数

用AVR单片机8位数据产生随机数

点击数:7888 次   录入时间:03-04 11:44:18   整理:http://www.55dianzi.com   AVR单片机

, 星星灯
  源程序:SLAVR737.ASM
用AVR 单片机 8位数据产生随机数,由PORTA 口及PORTC 口输出随机数,在8X8 LED上显示,硬件接线电路见“7.3.8按钮猜数”。随机数的种子由程序设定(也可外接开关设定),启动种子后,由移位寄存器以互斥的异或逻辑组合返回循环产生。
.include"8515def.inc"
    rjmp    RESET    
.def    temp    =r16        ;暂存器
.def    temp1    =r17        ;暂存器1
.def    udata    =r21        ;存随机数送A口
.def    ddata    =r22        ;存随机数送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        ; 设置随机数初值
        ldi     ddata,0x3c        ; 
startp: out     porta,udata        ;输出到A口
        out     portc,ddata        ;输出到C口
        ldi     temp,0x80        ;设延时常数
        rcall   delay            ;调用延时子程序
        rcall   randm            ;调用十六位随机数子程序
        rjmp    startp  
delay:                    ; 通用延时子程序    从略
....
16位移位产生随机数原理图
8~16位移位寄存器产生随机数循环组合
位 数    循环输入组合 S=2^n-1 Qn XOR Qm
   8    Q2 ⊕ Q3 ⊕ Q4 ⊕ Q8 (现程序按钮猜数采用8位数)
   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:                            ;产生十六位随机数子程序
   mov   temp,udata        ;产生A口随机数
          mov   temp1,udata        ; 
          rol   temp                ;通过进位位左循环移位
          eor   temp1,temp        ;异或
          rol   temp            ; 通过进位位左循环移位
          rol   temp            ; 通过进位位左循环移位
          eor   temp1,temp    ;异或
          mov   temp,ddata    ; 产生C口随机数
          swap  temp            ; 通过进位位左循环移位
          eor   temp,temp1    ;异或通过进位位左循环移位
          rol   temp            ; 通过进位位左循环移位
          rol   ddata        ; 通过进位位左循环移位
          rol   udata        ; 通过进位位左循环移位
          ret                  ;子程序返回
7.3.8    按钮猜数程序
源程序:SLAVR738.ASM
许多场合如按钮猜数(电脑摇奖,电脑选出幸运号),游戏开始按钮等待一个不规则且不定序的数据产生,即须要随机数发生器。随机数的种子由程序设定(也可外接开关设定),启动种子后,由移位寄存器以互斥的异或逻辑组合返回循环产生。产生随机数的原理图如下:
16位移位产生随机数原理图
8~16位移位寄存器产生随机数循环组合
位 数    循环输入组合 S=2^n-1 Qn XOR Qm
   8    Q2 ⊕ Q3 ⊕ Q4 ⊕ Q8 (现程序按钮猜数采用8位数)
   9    Q5 ⊕ Q9
  10    Q7 ⊕ Q10
  11    Q9 ⊕ Q11
  12    Q2 ⊕ Q10 ⊕ Q11 ⊕ Q12
  13    Q1 ⊕ Q11 ⊕ Q12 ⊕ Q13
  14    Q2 ⊕ Q12 ⊕ Q13 ⊕ Q14

[1] [2] [3] [4]  下一页


本文关键字:单片机  AVR单片机单片机-工控设备 - AVR单片机