# Dado Electronico con PIC16F84



## oscar11111 (May 20, 2006)

Hola,

Tengo un circuito y la programación de un dado electrónico con PIC16F84, genera #'s del 1-6, pero quiero que los genere del 1-7, si me podrías ayudar te lo agradecería.    Es para poder pasar un examen  y soy nuevo en la programación y se me a hecho difícil.


GRACIAS.


----------



## fdesergio (May 20, 2006)

Hola solo debes modificar aca:

texto del asm.



; ****************************************************************
; RUTINA QUE GENERA UN NUMERO ALEATORIO MIENRAS ESTAN PULSANDO RA0
; ****************************************************************

NUM_ALEATORIO:

		bsf     STATUS,RP0		; Seleccionamos Banco 1
		MOVLW	b'00000000'		; Deshabilitamos todas las interrupciones posibles
		MOVWF	INTCON
		bcf     STATUS,RP0		; Seleccionamos Banco 0
		MOVLW	b'00000000'
		MOVWF	PORTB			; Escribimos en el puerto B			
		CLRF	PULSA

SI:		btfss	PORTA,0			; Se explora RA0 para ver si sigue pulsado
		GOTO	NO				; Si no sigue pulsando significa que ya no pulsan y x tanto mostramos
								; el numero aleatorio que hemos generado anteriormente
		INCF	PULSA,F			; Incrementamos valor aleatorio
		MOVF	PULSA,W			; Miramos si es 6 segundos
		SUBLW	8                          ; ACA CAMBIAMOS 7 POR 8
		BTFSS	STATUS,Z		; Si Z esta a 1 es que la resta fue 0 y x tanto 1
		GOTO	SI				; Seguimos generando el numero aleatorio
		MOVLW	1				; Movemos un 0 a segundos, para q la cuenta siga 1..6
		MOVWF	PULSA
		GOTO 	SI				; Seguimos generando el numero aleatorio

NO:		MOVF	PULSA,W			; Movemos el valor de PULSA a W
		MOVWF	SEG				; Movemos el valor de W a SEG, q muestra la rutina MOSTRAR_SEG
		CALL	MOSTRAR_SEG		; Mostramos el numero x el display

		bcf     STATUS,RP0		; Seleccionamos Banco 0 y Cargamos TMR0 con 196
		MOVLW	b'11000100'	
		MOVWF	TMR0			
		MOVLW	b'10100000'		; Permitimos interrupcion de TMR0 y la global GIE
		MOVWF	INTCON			; Habilitamos de nuevo las interrupciones
		CLRF	SEG				; Limpiamos segundos anteriores
		CLRF	NUM				; Limipiamos numeros de interrupciones anteriores
		RETURN

Solo debes cambiar el No 7 por el No 8 en la linea que esta marcado con rojo y listo, el genera un numero aleatorio, se detiene y resta con 7 para saber si es menor o igual a 7 y listo, ah pruebalo pues en esto no hay nada dicho, avisame, chauuuuuu, chauuuuuuuuuuuuuuuuu


----------



## nosferatuspacho (Jun 15, 2009)

creo que tendras que añadir mas numeros
CUATRO: MOVF	SEG,W
		SUBLW	4
		BTFSS	STATUS,Z
		GOTO	CINCO
		MOVLW	b'01100110'
		GOTO	FIN1

CINCO:  MOVF	SEG,W
		SUBLW	5
		BTFSS	STATUS,Z
		GOTO	SEIS
		MOVLW	b'01101101'
		GOTO	FIN1

SEIS:   MOVF	SEG,W

		MOVLW	b'01111101'
		GOTO	FIN1

FIN1:   BCF     STATUS,RP0		; Seleccionamos Banco 0   
		MOVWF	PORTB			; Escribimos en el puerto B	
		RETURN


----------



## bio (Jun 25, 2010)

disculpa me podrian ayudar esque tengo que entregar un proyecto de dado electronico con el pic 16f877
que al momento de encender el circuito cuente aleatoriamente del 0 al 6 y al presionar un boton marque un numero aleatorio necesito compilarlo en C y simularlo  en el proteus deceo me puedan ayudar
gracias


----------



## fernandoae (Jun 26, 2010)

Si no planteas cual es tu duda dificilmente te podamos ayudar...


----------



## bio (Jun 26, 2010)

mi duda es bueno mejor seria mi problema es que no puedo acer el circuito para poder simularlo en el proteus,
puse una imagen del circuito que tengo,espero la puedan ver, y me resulvan la duda deen donde estoy mal en el circuito para que trabaje


----------



## fernandoae (Jun 26, 2010)

El circuito esta bien. Tenes el hex?


----------



## bio (Jun 26, 2010)

si lo tengo lo hice en el programa PIC C Compiler 
aki en archivo

mira aki tengo otro programa en c y ninguno me funciona sera que tengo mal una variable o es mi circuito no se como resolverlo espero me puedan ayudar a resolver mi problema gracias


----------

