
por algun lado lo tenia.... y lo encontre....
; Program RANDOM.ASM
;
; Illustrates an implementation of a 16-bit random number generator.
;
; Assumes 8 LEDs on PORTB. A random pattern is displayed for a random
; amount of time. Continuous loop.
;
; copyright, Peter H. Anderson, MSU, August 9, "97
LIST p=16c84
#include <c:mplabp16c84.inc>
__CONFIG 11h
CONSTANT BASE_VAR=0CH
LOOP3 EQU BASE_VAR+0 ; for timing
LOOP2 EQU BASE_VAR+1
LOOP1 EQU BASE_VAR+2
RAND_HI EQU BASE_VAR+3 ; 16-bit random number
RAND_LO EQU BASE_VAR+4
MAIN:
BSF STATUS, RP0
CLRF TRISB ; all bits on PORTB are outputs
BCF STATUS, RP0
MAIN_1:
CALL RANDOM ; generate 16-bit random number
MOVF RAND_HI, W ; use high byte as random pattern
MOVWF PORTB
MOVF RAND_LO, W ; use low byte as random delay
MOVWF LOOP3
CALL DELAY
GOTO MAIN_1 ; repeat indefinitely
RANDOM:
MOVF RAND_HI, W ; if current random is 0000, make it 00FFH
IORWF RAND_LO, W
BTFSC STATUS, Z
COMF RAND_LO, F
BTFSS RAND_HI, 6 ; hi.7 = hi.7 xor hi.6
MOVLW 00H
BTFSC RAND_HI, 6
MOVLW 80H
XORWF RAND_HI, F
BTFSS RAND_HI, 4 ; hi.7 = hi.7 xor hi.4
MOVLW 00H
BTFSC RAND_HI, 4
MOVLW 80H
XORWF RAND_HI, F
BTFSS RAND_LO, 3 ; hi.7 = hi.7 xor lo.3
MOVLW 00H
BTFSC RAND_LO, 3
MOVLW 80H
XORWF RAND_HI, F
RLF RAND_HI, W ; carry = hi.7
RLF RAND_LO, F ; double left shift
RLF RAND_HI, F
RETURN
DELAY: ; delays loop3 * 10 msecs
MOVLW .10 ; 10 msecs
MOVWF LOOP2
DELAY_1:
MOVLW .110
MOVWF LOOP1
DELAY_2:
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ LOOP1, F
GOTO DELAY_2
DECFSZ LOOP2, F
GOTO DELAY_1
DECFSZ LOOP3, F
GOTO DELAY
RETURN
END