AVR单片机8位数据产生随机数
点击数:7915 次 录入时间:03-04 11:40:08 整理:http://www.55dianzi.com AVR单片机
用AVR 单片机 8位数据产生随机数
源程序: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 ; 通过进位位左循环移位
[1] [2] [3] [4] [5] 下一页
本文关键字:单片机 AVR单片机,单片机-工控设备 - AVR单片机