hola saludos preguntando una duda, es que queria hacer pequenos ejercisios y me encontre este que ess un dado que Básicamente es un registro que cuenta del 1 al 6 ,se borra y vuelve a empezar a contar hasta que detecte una pulsación, dicho numero queda almacenado y hago que parpadee 3 veces, se apaga y continua rodando con el siguiente numero. mi problema es que esta hecho para el pic16f84a y yo lo queria para el pic16f87a , pero cambie las plantillas ya para el que quiero y me paraece que en el 16f877a tiene todas las entradas y salidas que salen del 16f84a, pero no se que mas cambiarle , y al hacerlo no me jala no seque otra cosa me falte , aqui esta el codigo:
;DIRECTIVAS DEL PROGRAMA
LIST p=16F84A
RADIX HEX
;ETIQUETAS DEL PROGRAMA
W EQU 0x00
F EQU 0x01
TMRO_OPT EQU 0x01
PC EQU 0x02
Z EQU 0X02
ESTADO EQU 0x03
PUERTAA EQU 0x05
PUERTAB EQU 0x06
INTCON EQU 0x0B
NUMERO EQU 0x10 ;REGISTRO AUXILIAR
VER EQU 0x11 ;REGISTRO AUXILIAR
ACTIVAR EQU 0x13 ;REGISTRO AUXILIAR
;PROGRAMA PRINCIPAL
ORG 0 ;COMENZAREMOS EN LA DIRECCION 0
goto INICIO ;SALTAREMOS A LA DIRECCION 5
;PARA SOBREPASAR EL VECTOR
ORG 5 ;DE INTERRUPCION.
INICIO bsf ESTADO, 5 ;NOS SITUAMOS EN EL BANCO 1.
movlw b'00000111' ;CARGA EL VALOR MAXIMO EN EL
movwf TMRO_OPT ;PREDIVISOR TMR0 ( 256 ).
movlw b'00000001' ;CARGO RA0 COMO ENTRADA.
movwf PUERTAA
clrf PUERTAB ;PUERTAB ACTUA COMO SALIDA.
bcf ESTADO, 5 ;NOS SITUAMOS EN EL BANCO 0.
clrf PUERTAA ;BORRAMOS PUERTAA.
clrf PUERTAB ;BORRAMOS PUERTAB.
;******************* RUTINA DE ACTIVACION DEL ZUMBADOR ************************
ACTIVA btfss PUERTAA,0 ;ESPERA A QUE EL PULSADOR
goto ACTIVA ;SEA ACTIVADO.
movlw 0x01 ;DETECTA LA PULSACION Y PONE UN 1
call DIS7SEG ;EN EL DISPLAY Y EL ZUMBADOR
movwf PUERTAB ;FUNCIONARA.
bsf PUERTAA, 1 ;PONE A 1 LA SALIDA RA1, DEL ZUMBADOR
bsf PUERTAA, 2 ;PONE A 1 LA SALIDA RA2, DEL LED
call ZUMBADOR ;LLAMA A LA RUTINA, PIERDE 0'1 SEG.
bcf PUERTAA, 1 ;TERMINA DE SONAR EL ZUMBADOR.
bcf PUERTAA, 2 ;SE APAGA EL LED.
call DISPLAY ;RUTINA QUE PIERDE 0'5 SEGUNDO
clrf PUERTAB ;BORRA EL DISPLAY
;******************** RUTINA DE DESACTIVACION DEL ZUMBADOR ********************
btfss PUERTAA,0 ;COMPRUEBA SI EL PULSADOR SIGUE
;APRETADO.
goto DA_DO ;SI NO ESTA PULSADO VA A DA_DO.
movlw 0x00 ;PONE UN 0 EN W
call DIS7SEG ;LLAMA A LA RUTINA QUE TRANSFORMA
;EL NUMERO PARA SER VISUALIZADO ,
movwf PUERTAB ;ES VISUALIZADO EN LA PUERTAB Y POR
;TANTO EN EL DISPLAY.
call DISPLAY ;PERDIDA DE TIEMPO 0'5 SEGUNDO.
clrf PUERTAB ;BORRA EL DISPLAY.
call DISPLAY
bsf ACTIVAR, 1 ;PONE UN 1 EN EL BITE DEL REGISTRO.
goto DADO ;VA A DADO.
;******************** RUTINA PARA VISUALIZAR EL NUMERO ***********************
DA_DO call DISPLAY ;RUTINA QUE PIERDE 0'5 SEGUNDO.
DADO movlw 0x01 ;EMPEZAMOS CON EL NUMERO 1.
movwf NUMERO ;DEPOSITA EL 1 EN EL REGISTRO NUMERO.
OTRA_VEZ call ESCOGE ;LLAMA A LA RUTINA QUE ESCOGE NUMERO.
call DIS7SEG ;LLAMA A LA RUTINA QUE TRANSFORMA
movwf PUERTAB ;Y VISUALIZA EL NUMERO EN EL DISPLAY.
goto OTRA_VEZ ;VA A, OTRA VEZ.
;******************* RUTINA PARA ESCOGER UN NUMERO ****************************
ESCOGE btfsc PUERTAA, 0 ;ESPERA A QUE SEA ACTIVADO EL
goto VOLVER ;PULSADOR.
SEGUIR movlw b'00000110' ;AQUI COMPARA EL NUMERO , CON EL 6
subwf NUMERO, W ;SI ES UN 6 EMPEZARA A CONTAR DE
btfsc ESTADO, Z ;NUEVO.
clrf NUMERO ;BORRA EL REGISTRO NUMERO.
incf NUMERO, F ;INCREMENTA EL REGISTRO NUMERO Y LO
movfw NUMERO ;DEPOSITA EN EL PROPIO REGISTRO.
call DIS7SEG ;LLAMADA PARA QUE EL NUMERO SE
movwf PUERTAB ;VEA EN EL DISPLAY.
call TIEMPO ;PIERDE 0'05 SEGUNDO.
goto ESCOGE ;VA A ESCOGE.
;******************* RUTINA DE PARPADEO DEL DISPLAY ***************************
VOLVER btfss ACTIVAR, 1 ;TESTEA EL REGISTRO Y SI VALE 1
bsf PUERTAA, 1 ;SALTARA Y EL ZUMBADOR NO SUENA.
bsf PUERTAA, 2 ;ENCIENDE EL LED AL PRESIONAR.
call ZUMBADOR ;PERDIDA DE TIEMPO DE 0'1 SEG.
btfss ACTIVAR, 1 ;SALTA SI EL BITE VALE 1.
bcf PUERTAA, 1 ;APAGA EL ZUMBADOR.
bcf PUERTAA, 2 ;APAGA EL LED.
movfw NUMERO ;W SE CARGA CON EL ULTIMO NUMERO.
call DIS7SEG ;RUTINA PARA VISUALIZAR EL NUNERO
movwf PUERTAB ;EN EL DISPLAY.
call DISPLAY ;PERDIDA DE TIEMPO DE 0'5 SEGUNDO.
clrf PUERTAB ;BORRA EL DISPLAY.
call DISPLAY ;PERDIDA DE TIEMPO DE 0'5 SEGUNDO.
movfw NUMERO ;SE REPITE OTRA VEZ LO MISMO.
call DIS7SEG
movwf PUERTAB
call DISPLAY
clrf PUERTAB
call DISPLAY
movfw NUMERO
call DIS7SEG
movwf PUERTAB
call DISPLAY
clrf PUERTAB
call DISPLAY
movfw NUMERO
call DIS7SEG
movwf PUERTAB
call DISPLAY
clrf PUERTAB
call DISPLAY
goto SEGUIR ;VA A SEGUIR
;******************** RUTINA PARA PERDER TIEMPO ********************************
TIEMPO1 bcf INTCON,2 ;BORRA EL TESTIGO DE DESBORDAMIENTO
movlw 0xD9 ;CARGO EL NUMERO 217 EN TMRO, CON LO
;CUAL CONTARA 39 VECES, (256-217=39).
movwf TMRO_OPT
TIEMPO2 btfss INTCON, 2 ;MIRA EL TESTIGO DE DESBORDAMIENTO
goto TIEMPO2 ;Y SALTARA CUANDO TERMINE DE CONTAR.
decfsz VER,F ;RESTA EL REGISTRO VER Y LO DEPOSITA
goto TIEMPO1 ;EN EL MISMO, HASTA VALER 0.
return
;******************* RUTINA DE 0'1 SEGUNDO *************************************
ZUMBADOR movlw 0x0A ;CARGO EL NUMERO 10 EN W.
goto MAS ;VA A MAS.
;******************* RUTINA DE 0'5 SEGUNDO *************************************
DISPLAY movlw 032 ;CARGO EL NUMERO 50 EN W.
goto MAS ;VA A MAS.
;******************* RUTINA DE 0'05 SEGUNDO ************************************
TIEMPO movlw 0x05 ;CARGO EL NUMERO 5 EN W.
MAS movwf VER ;SE DEPOSITA EN EL REGISTRO VER.
call TIEMPO1 ;VA A TIEMPO1.
return
;****************** RUTINA DE VISUALIZACION ************************************
DIS7SEG addwf PC,F ;COGE EL VALOR HEX Y LO CONVIERTE.
;EN EL NUMERO PARA QUE SE VEA EN
retlw 3F ;DISPLAY.
retlw 06
retlw 5B
retlw 4F
retlw 66
retlw 6D
retlw 7D
END
ojala me puedan ayudar saludos