新疆残疾人保障金:请教!哪位大虾知道用单片机产生随机数的简便方法?

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 18:03:23
另外还有个问题,一个8位寄存器,怎样使唯一的1随机出现?
您知道的话请不吝赐教,俺在这先谢谢您了。
回lsilian:老大!您那是什么语言哪?请用原理说下OK?
我真的很想知道解决这问题的办法,我会不断提高悬赏。
我要的是纯粹的随机数字,没有任何规律。你们所说的伪随机数还有有规律的吧?比如在同一算法时,每次开始计算的结果都是一样的?
哎~~~看来我只有用硬件来解决了。谢谢大家的答复尽管没有满意的答案。再次感谢。

http://www.pic16.com/tigao/tid10.htm

怎样用单片机产生一个随机数 ?
我想可以用定时器来作吧。

用tmr0就可以有256个随即数。然后再进行一些数学运算即可。具体我也没有用过。就算给你一个思路吧

看看这个有没有用啊
//随机数
/* Randomise lower 8 bits of 16-bit number */
unsigned long rand_byte(unsigned long va1)
{
char n;
for(n=0;n<8;n++)
va1=rand_bit(va1);
return(va1);
}
/* Randomise l.s. bit of 16-bit number */
unsigned long rand_bit(unsigned long va1)
{
char n=0;
if (va1&0x8000)n=!n;
if (va1&0x4000)n=!n;
if (va1&0x1000)n=!n;
if (va1&0x0008)n=!n;
return(va1+va1+n;)

PIC单片机产生伪随机数汇编语言程序
;PIC单片机 www.pic16.com
PSW EQU 03
R0 EQU 08
R1 EQU 09
R2 EQU 0AH
R3 EQU 0BH
R4 EQU 0CH
R5 EQU 0DH
R6 EQU 0EH
R7 EQU 0FH
TEMP EQU 13H
CNT1 EQU 11H
CNTH EQU 12H
BUF0 EQU 17H
BUF1 EQU 18H
ESUM1 EQU 13H
ESUM2 EQU 14H
ESUM3 EQU 15H
ESUM4 EQU 16H
DSUM1 EQU 19H
DSUM2 EQU 1AH
DSUM3 EQU 1BH
DSUM4 EQU 1CH
DSUM5 EQU 1DH
DSUM6 EQU 1EH
ORG 1FFH
GOTO RADM
ORG 000
D_ADD MOVF R0,0
ADDWF R6,1
BTFSC PSW,0
INCF R7
MOVF R1,0
ADDWF R7,1
RETLW 0
DMU1 MOVLW 16
MOVWF TEMP
CLRF R7
CLRF R6
DMUL_1 RRF R3
RRF R2
BTFSC PSW,0
CALL D_ADD
RRF R7
RRF R6
RRF R5
RRF R4
DECFSZ TEMP
GOTO DMUL_1
RETLW 0
RADM CLRF ESUM1
CLRF ESUM2
CLRF ESUM3
CLRF ESUM4
CLRF DSUM1
CLRF DSUM2
CLRF DSUM3
CLRF DSUM4
CLRF DSUM5
CLRF DSUM6
MOVLW 20H
MOVWF CNTH
RADM_1 MOVLW 00
MOVWF CNTL
RADM_2 MOVLW 64H
MOVWF R3
MOVLW 85H
MOVWF R2
MOVF BUF1,0
MOVWF R1
MOVF BUF0,0
MOVWF R0
CALL DMUL
MOVLW 19H
ADDWF R4,0
MOVWF R0
MOVWF BUF0
BTFSC PSW,0
INCF R5
MOVLW 36H
ADDWF R5,0
MOVWF R1
MOVWF BUF1
MOVF R0,0
ADDWF ESUM1,1
BUFSS PSW,0
GOTO EADD_1
INCF ESUM2
BTFSS PSW,2
GOTO EADD_1
INCF ESUM3
BTFSS PSW,2
GOTO EADD_1
INCF ESUM4
EADD_1 MOVF R1,0
ADDWF ESUM2,1
BTFSS PSW,0
GOTO EADD_2
BTFSS PSW,2
GOTO EADD_2
INCF ESUM4
EADD_2 BTFSC R1,7
GOTO RADM_3
COMF R0,1
COMF R1,1
MOVLW 1
ADDWF R0,1
BTFSC PSW,0
INCF R1
RADM_3 MOVLW 80H
ADDWF R1,1
MOVF R1,0
MOVWF R3
MOVF R0,0
MOVWF R2
CALL DMUL
MOVF R4,0
ADDWF DSUM1,1
BTFSS PSW,0
GOTO DADD_1
INCF DSUM2
BTFSS PSW,2
GOTO DADD_1
INCF DSUM3
BTFSS PSW,2
GOTO DADD_1
INCF DSUM4
BTFSS PSW,2
GOTO DADD_1
INCF DSUM6
DADD_1 MOVF R5,0
ADDWF DSUM2,1
BTFSS PSW,0
GOTO DADD_2
INCF DSUM3
BTFSS PSW,2
GOTO DADD_2
INCF DSUM4
BTFSS PSW,2
GOTO DADD_2
INCF DSUM5
BTFSS PSW,2
GOTO DADD_2
INCF DSSUM6
DADD_2 MOVF R6,0
ADDWF DSUM3,1
BTFSS PSW,0
GOTO DADD_3
INCF DSUM4
BTFSS PSW,2
GOTO DADD_3
INCF DSUM5
BTFSS PSW,2
GOTO DADD_3
INCF DSUM6
DADD_3 MOVF R7,0
ADDWF DSUM4,1
BTFSS PSW,0
GOTO DADD_4
INCF DSUM5
BTFSS PSW,2
GOTO DADD_4
INCF DSUM6
DADD_4 DECFSZ CNTL
GOTO RADM_2
DECFSZ CNTH
GOTO RADM_1
MOVLW 5
MOVWF CNTL
RADM_4 BCF PSW,0
RRF ESUM4
RRF ESUM3
RRF ESUM2
RRF ESUM1
DECFSZ CNTL
GOTO RADM_4
MOVLW 5
MOVWF CNTL
RADM_5 BCF PSW,0
RRF DSUM6
RRF DSUM5
RRF DSUM4
RRF DSUM3
RRF DSUM2
RRF DSUM1
DECFSZ CNTL
GOTO RADM_5
LOOP GOTO LOOP
END