Dado Electronico con PIC16F84

#1
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.
 

Adjuntos

#2
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
 
#3
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
 
#4
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
 
#6
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
circuito.jpg
 
#8
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
 

Adjuntos

Última edición:
Arriba