Dado Electronico con PIC16F84

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

  • dado_144.gif
    dado_144.gif
    8.5 KB · Visitas: 2,307
  • dado_753.txt
    5.4 KB · Visitas: 726
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
 
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
 
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
 
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
 
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

  • dado2.rar
    9.5 KB · Visitas: 304
  • dado.rar
    11.1 KB · Visitas: 230
Última edición:
Atrás
Arriba