TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: eddie323983 en 24 de Noviembre de 2004, 08:15:00

Título: Generación de números aleatorios
Publicado por: eddie323983 en 24 de Noviembre de 2004, 08:15:00
Hola buenas:

Quisiera saber si alguien sabe como generar un número aleatorio con un pic. Muchas Gracias
Título: RE: Generación de números aleatorios
Publicado por: todopic en 24 de Noviembre de 2004, 20:45:00
Hola, depende del uso... pero lo mas simple seria un contador que se este incrementando continuamente en partes del programa, y se detenga al pulsar el pulsador... si es que el diseño lo permite...
los numeros al azar son llamados random, RND, y la generacion randomize Sonrisa Gigante
aclara un poco mas tu necesidad ok?

suerte

Norberto
Título: RE: Generación de números aleatorios
Publicado por: RGL en 25 de Noviembre de 2004, 04:33:00
Si lo haces con Protón (con permiso de mi amigo Norberto) mira qué fácil es:


 VAR1 = RANDOM " Genera un numero aleatorio en la variable VAR1

Saludos

Ricky
Madrid-España
 

 
Título: RE: Generación de números aleatorios
Publicado por: MGLSOFT en 25 de Noviembre de 2004, 05:05:00
Tambien puedes dejar trabajando libre el Timer0 y capturar el valor del conteo en el momento de pulsar el boton.
Te generara un numero aleatorio entre 0 y 255, que normalmente sirve en la mayoria de las aplicaciones...Sonrisa Gigante
Título: RE: Generación de números aleatorios
Publicado por: todopic en 29 de Noviembre de 2004, 13:11:00
loco 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


Título: RE: Generación de números aleatorios
Publicado por: eddie323983 en 07 de Diciembre de 2004, 04:33:00
Muchas gracias por vuestras respuestas. Creo que me voy a quedar con lo de capturar el valor del TMR0 de forma aleatoria ya que me parece mas sencillo.