Está en la página 1de 3

;*********************************************************************

;* JUEGO: DADO *
;* AUTOR: ANTONIO TRINIDAD VILLASE�OR (dragon33) *
;* PROYECTO PARA PIC 16F84A XT=4Mhz *
;*********************************************************************

__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC

LIST P=16F84A
#include P16F84A.inc

CBLOCK 0x0C

DADO
REG_W
REG_STATUS

ENDC

ORG 0x00
goto INICIO
ORG 4 ;Vector de interrupci�n
movwf REG_W ;salva estado W
swapf STATUS,w
movwf REG_STATUS ;salva estado STATUS

goto COMPARAR ;Cuando se activa el


pulsador va a COMPARAR

Fin_IRQ swapf REG_STATUS,w


movwf STATUS ;restaura estado STATUS
swapf REG_W,f
swapf REG_W,w ;restaura estado de W
bcf INTCON,INTF ;Limpia flag de reconocimiento
(INTF).
retfie ;Retorna y rehabilita las
interrupciones (GIE=1).

INICIO
bsf STATUS,RP0 ;Selecciona pagina 1
movlw b'00000001' ;Puertas B0 entrada, resto
salidas
movwf TRISB ;
clrf TRISA ;PORTA todo salidas
movlw b'11111111'
movwf OPTION_REG ;establece IRQ flanco de
subida
bcf STATUS,RP0 ;Selecciona pagina 0
movlw b'10010000' ;Habilita la interrupci�n INT y la
general.
movwf INTCON
bsf PORTA,0
clrf PORTB
clrw

;
***********************************************************************************
******************************
; SUBRUTINA ENCARGADA DE REALIZAR EL CONTAJE DE 1 A 6
;
***********************************************************************************
******************************

CUENTA_0 ;Empieza a contar


clrf DADO
bsf PORTA,0 ;apagado el display de 7
segmentos
CUENTA_1
bsf PORTA,0
incf DADO,f ;incrementa del 1 al 6
movlw .7 ;pongo 7 en w para
subwf DADO,W ;que lo reste de resultado
en DADO
btfsc STATUS,2 ;si resultado es=0 entonces
cifra DADO = 7
goto CUENTA_0 ;si bandera de STATUS es =
1 resultado resta = 0
goto CUENTA_1 ;bandera estatus se�aliza
1, sigue contando

;
***********************************************************************************
******************************
; AQUI SALTA LA INTERRUPCI�N, COMPARA ESTADO DE "DADO" CON UN VALOR DE 1 A 6, Y
SEG�N SEA VA DONDE MOSTRARLO
;
***********************************************************************************
******************************

COMPARAR movlw d'1' ;coloco 1 en w


subwf DADO,W ;lo resto de contenido
albergado en DADO
btfsc STATUS,2 ;si resultado de la resta
es 0 activa el bit 2 de STATUS a 1
goto ES_1 ;como es 0 no salta y va a
ES_1
movlw d'2' ;como es 1 salta y va a
siguiente n�mero para comparar
subwf DADO,W
btfsc STATUS,2
goto ES_2
movlw d'3'
subwf DADO,W
btfsc STATUS,2
goto ES_3
movlw d'4'
subwf DADO,W
btfsc STATUS,2
goto ES_4
movlw d'5'
subwf DADO,W
btfsc STATUS,2
goto ES_5
movlw d'6'
subwf DADO,W
btfsc STATUS,2
goto ES_6
;
***********************************************************************************
******************************
; SUBRUTINA MUESTRA EL N�MERO
;
***********************************************************************************
******************************

ES_1 movlw b'00001100' ;1


movwf PORTB
bcf PORTA,0
call Retardo_2s
goto Fin_IRQ

ES_2 movlw b'10110110' ;2


movwf PORTB
bcf PORTA,0
call Retardo_2s
goto Fin_IRQ

ES_3 movlw b'10011110' ;3


movwf PORTB
bcf PORTA,0
call Retardo_2s
goto Fin_IRQ

ES_4 movlw b'11001100' ;4


movwf PORTB
bcf PORTA,0
call Retardo_2s
goto Fin_IRQ

ES_5 movlw b'11011010' ;5


movwf PORTB
bcf PORTA,0
call Retardo_2s
goto Fin_IRQ

ES_6 movlw b'11111010' ;6


movwf PORTB
bcf PORTA,0
call Retardo_2s
GOTO Fin_IRQ

INCLUDE <RETARDOS.INC> ;subrutinas de control de


tiempos de retardo.
END

También podría gustarte