Buenas. He estado montando un juego de dados con el PIC16F84A. Consegui que me diera un numero pseudo-Aleatorio, pero ahora tengo otro problema:
Quiero que cuente hasta 9 (1001), pero termina contando hasta 15 (1111)
Mi idea para solucionarlo era la siguiente: Cuando el numero salga de la subrutina (en su correspondiente variable=NumA), le resto otra variable de referencia que vale 9(1001). Utilizo la instruccion SUBWF, de manera que si el Bit C es 1 (la resta ha dado positiva o cero) salte y lo mande a PortB, sino que me vuelva 0 el valor de NumA antes de mandarla a puerto.
La cuestion es que no consigo hacer que que deje de mandarme numeros mayores que 9 (1001) ¿Como puedo hacer?
De antemano, les agradesco por el tiempo que se han de tomar para leer esto.
;==============================================================================
; ZONA DE DIRECTIVAS =
;==============================================================================
LIST P=16F84A ;Modelo de microcontrolador a utilizar
INCLUDE <P16F84A.INC> ;Inclusión de la librería correspondiente al modelo de PIC
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;Configuración de las banderas de quemado
Cont1 EQU 0x0C
NumA EQU 0x0D
Nref EQU 0x0E
;CONFIGURACION DE PUERTOS
ORG 0
BSF STATUS,RP0
MOVLW B'00001'
MOVWF TRISA
CLRF TRISB
BCF STATUS,RP0
MOVLW B'001'
MOVWF NumA
MOVLW B'1001'
MOVWF Nref
CLRF PORTB
;PRINCIPAL
Principal1
BTFSS PORTA,0
GOTO Principal1
CALL NumRan
CALL Delay
MOVF Nref,0 ;Aqui coloco mi numero de referencia (Nref) b'1001'
SUBWF NumA,0 ;Aqui tomo NumA (que puede tener cualquier valor entre 0 y 15) y le resto Nref (9)
BTFSC STATUS,C ;Aqui pregunto si el BIT C es uno (Es decir, si la resta dio cero o positivo)
;Si el resultado es negativo (c=0) Quiero cargar un 0001 en la Variable NumA
MOVF NumA,0 ;Si el resultado es cero o positivo (c=1), dejo pasar el valor al puerto B
MOVWF PORTB
GOTO Principal1
NumRan
BTFSC NumA, 1
INCF Cont1, f
BTFSC NumA, 3
INCF Cont1, f
BTFSC NumA, 2
INCF Cont1, f
BTFSC NumA, 0
INCF Cont1, f
RRF Cont1, f
RRF NumA, f
CLRF Cont1
RETURN
Delay
NOP
NOP
NOP
NOP
NOP
RETURN
END