Tengo un programa que funciona en el pic 16f84 pero quiero utilizarlo en un 16f628 ojala alguien pueda ayudarme. gracias
INCLUDE "P16F84.INC"
PC EQU 2H
STATUS EQU 3H
PORT_A EQU 5H
PORT_B EQU 6H
SENSOR EQU 1DH
PUERTO EQU 1CH ;GUARDO EL VALOR VIEJO DEL PUERTO
LAP EQU 1BH ;SI LAP=1 MANTIENE EL VISOR SIN ACTUALIZAR
UNIDAD EQU 14H ;CONTADORES UNIDADES
DECENA EQU 15H ;
CENTENA EQU 16H ;
UNIMIL EQU 17H ;
DECMIL EQU 18H ;
CENMIL EQU 19H ;
MILLON EQU 1AH ;
DELAY2 EQU 1EH
DELAY1 EQU 0CH
REFRESH EQU 0DH
TEMPO EQU 13H
Z EQU 2H
C EQU 0H
W EQU 0H
R EQU 1H
E EQU 1H ;PATA18 MICRO A LA PATA 6 (E) HABILITACION DEL MODULO
RS EQU 0H ;PATA17 MICRO A LA PATA 4 DEL MODULO (RS - INSTRUCCION O CARACTER)
; PATA 2 DEL MODULO A +VCC
; 3 REGULA CONTRASTE, AL PUNTO MEDIO DE UN POTE 5K ENTRE VCC Y MASA
; 5 Y 1 A MASA - YO EMPLEO 2 R FIJAS, DE 1K
;PATA 6 DEL PIC----->A LA 7 DEL MODULO
; 7----------> 8
; 8----------->9
; 9---------->10
; 10--------->11
; 11--------->12
; 12--------->13
; 13--------->14
; PARA LA ILUMINACION POSTERIOR, UNA RESISTENCIA DE 220 OHMS A +5V
; PATA 1 DEL MICRO, RESISTENCIA 1K A VCC, Y PULSADOR A MASA
; PATA 2 DEL MICRO, RESISTENCIA 1K A VCC, Y SENSOR (YO EMPLEO INDUCTIVO)
; 17/09/2000, FUNCIONA OK
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;CONFIGURO
;PARA LA GRABACION, CODE PROTECT OFF, RESET DE ENCENDIDO ,ETC
;*****************PROGRAMA PRINCIPAL********************************
ORG 00 ; VECTOR DE RESET DEL 16F84
GOTO INICIO
ORG 05H
RETARDO MOVLW .200
MOVWF TEMPO
DECRE DECFSZ TEMPO,R
GOTO DECRE
RETLW 0
;-----------------------LCD----------------------------------------
CONTROL BCF PORT_A,RS ;ESTA RUTINA GENERA LAS
GOTO DATO2 ;SEÑALES DE CONTROL Y ENVIA
DATO BSF PORT_A,RS ;EL DATO Al MODULO
DATO2 BSF PORT_A,E ;CON INTERFACE DE 8 BITS
MOVWF PORT_B
CALL RETARDO
BCF PORT_A,E
CALL RETARDO
RETLW 0
TABLA2 ADDWF PC,R ;TABLA DE ASCII
DT "0123456789"
;******************************************************************
;--------------------------CONTADOR DE PULSOS-------------
SUMA1
BSF REFRESH,0 ;MARCO UN BIT PARA PRESENTAR EN PANTALLA
;SI ES 1, LO MUESTRA SOLO UNA VEZ
SUME INCF UNIDAD,1
MOVLW .10 ; VERIFICA SI ES IGUAL A 10
XORWF UNIDAD,W ;PREGUNTA SI=10
BTFSS STATUS,Z ;
RETLW 0
CLRF UNIDAD ; SI LLEGO A 10 LA COLOCO EN CERO
;DECENAS
INCF DECENA,1 ;LE SUMO 1 A LA DECENA
MOVLW .10 ; VERIFICA SI ES IGUAL A 10
XORWF DECENA,W ;PREGUNTA SI=10
BTFSS STATUS,Z ;
RETLW 0
CLRF DECENA
;CENTENAS
INCF CENTENA,1 ;LE SUMO 1 A LA DECENA
MOVLW .10 ;VERIFICA SI ES IGUAL A 10
XORWF CENTENA,W ;PREGUNTA SI=10
BTFSS STATUS,Z ;
RETLW 0
CLRF CENTENA
;UNIDAD DE MIL
INCF UNIMIL,1 ;LE SUMO 1 A LA DECENA
MOVLW .10 ;VERIFICA SI ES IGUAL A 10
XORWF UNIMIL,W ;PREGUNTA SI=10
BTFSS STATUS,Z ;
RETLW 0
CLRF UNIMIL
;DECENA DE MIL
INCF DECMIL,1 ;LE SUMO 1 A LA DECENA
MOVLW .10 ;VERIFICA SI ES IGUAL A 10
XORWF DECMIL,W ;PREGUNTA SI=10
BTFSS STATUS,Z ;
RETLW 0
CLRF DECMIL
;CENTENA DE MIL
INCF CENMIL,1 ;LE SUMO 1 A LA DECENA
MOVLW .10 ;VERIFICA SI ES IGUAL A 10
XORWF CENMIL,W ;PREGUNTA SI=10
BTFSS STATUS,Z ;
RETLW 0
CLRF CENMIL
;MILLON
INCF MILLON,1 ;LE SUMO 1 A LA DECENA
MOVLW .10 ;VERIFICA SI ES IGUAL A 10
XORWF MILLON,W ;PREGUNTA SI=10
BTFSS STATUS,Z ;
RETLW 0
CLRF MILLON
RETLW 0
;**************************SENSAR*************************
;DETECTA LOS FLANCOS del SENSOR Y PULSADO DE TECLA
;EL SENSOR ESTA SOBRE UN ENGRANAJE, Y CUENTA LOS "BORDES"
;EN EL MOMENTO DE "SOLTAR" EL PULSADOR QUEDA "FIJO" EL CONTADOR
;Y APARECE LA PALABRA "MEMORIA" EN EL LCD
;---------------------------------------------------------
LEER
COMF PUERTO,F ;TRANSFORMO LOS CEROS EN UNOS
MOVF PORT_A,W ;LEO PORT_A Y GUARDO EN W
ANDWF PUERTO,F
SENSAR ;SENSOR MAGNETICO
BTFSC PUERTO,3
GOTO FLANCO ;SI HAY FLANCO IR A SUMAR
GOTO PULSADOR
SALIDA
MOVF PORT_A,W
MOVWF PUERTO ;GUARDO EL ACTUAL PARA LA PROXIMA VEZ
RETLW 0
FLANCO
CALL SUMA1 ;SI HAY FLANCO, LO SUMO
;Y AHORA PRUEBO EL ESTADO DEL PULSADOR
;--------------------------------------------------------------
PULSADOR ;LEER ESTADO DEL PULSADOR
BTFSS PORT_A,2 ;ESTA SIN PRESIONAR (1) SALTO
GOTO MARCAR
BTFSS REFRESH,2 ;LEO SI YA INDICO QUE PULSARON
GOTO SALIDA
BCF REFRESH,2 ;BORRO LA MARCA,SOLTARON EL PULSADOR
INCF LAP,1 ;SUMA POR CADA FLANCO ASCEND O DESCEND
BCF REFRESH,1 ;BORRO PARA QUE ESCRIBA "MEMORIA"
GOTO SALIDA
MARCAR
BSF REFRESH,2
GOTO SALIDA
;========================================================
INICIO NOP
;CLRF UNIDAD
MOVLW .255 ;PORQUE APARECE EL CONTADOR EN UNO
MOVWF UNIDAD ; Y ASI AL SUMAR EMPIEZA EN CERO (???)
CLRF DECENA
CLRF CENTENA
CLRF UNIMIL
CLRF DECMIL
CLRF CENMIL
CLRF MILLON
CLRF LAP
CLRF REFRESH
CLRF PUERTO
MOVLW 0FCH ;FCH="11111100" PROGRAMACION DE PUERTOS
TRIS PORT_A ;SEGUN CIRCUITO, 2 ENTRADAS (SENSOR Y PULSADOR)
MOVLW 00H
TRIS PORT_B ;TODAS SALIDAS
BEGIN MOVLW 30H ;INICIO DEL MODULO A 8 BITS
CALL CONTROL ;Y UNA LINEA
;MOVLW 07H ;SELECCIONA MODO ROTAR,EL MENSAJE SALE DE LA DERECHA Y PASA A IZQ.
MOVLW 06H ;modo fijo a la izq y se agregan a la derecha
CALL CONTROL ;EL MENSAJE
MOVLW 0CH ;ACTIVA EL DISPLAY
CALL CONTROL
;************************MOSTRAR MARCA**************************
; MICROPIC 2001 *
;***************************************************************
CALL RETARDO
MP2001 ;ESCRIBE CONTADOR EN EL LCD,
BTFSC REFRESH,1
GOTO PRINCIPAL
MOVLW " "
CALL DATO
CALL RETARDO ;PODRIA EMPLEAR UNA TABLA
;Y DECREMENTAR UN CONTADOR
MOVLW " " ;CON LA CANTIDAD DE CARACTERES
CALL DATO ;PERO ESTO ES MUY FACIL!!!!
CALL RETARDO
MOVLW "C"
CALL DATO
CALL RETARDO
MOVLW "O"
CALL DATO
CALL RETARDO
MOVLW "N"
CALL DATO
CALL RETARDO
MOVLW "T"
CALL DATO
CALL RETARDO
MOVLW "A"
CALL DATO
CALL RETARDO
MOVLW "D"
CALL DATO
CALL RETARDO
MOVLW "O"
CALL DATO
CALL RETARDO
MOVLW "R"
CALL DATO
CALL RETARDO
MOVLW " "
CALL DATO
CALL RETARDO
MOVLW "2"
CALL DATO
CALL RETARDO
MOVLW "0"
CALL DATO
CALL RETARDO
MOVLW "0"
CALL DATO
CALL RETARDO
MOVLW "1"
CALL DATO
CALL RETARDO
MOVLW .25
MOVWF DELAY2
RETAR3 MOVLW .255
MOVWF DELAY1 ;RETARDO DE VISUALIZACION DE MARCA
DECRE1 CALL RETARDO ;SOLO APARECE EN EL RESET DE INICIO
DECFSZ DELAY1,R
GOTO DECRE1
DECFSZ DELAY2,R
GOTO RETAR3
;====================================================================
PRINCIPAL
CALL LEER ;SI ESTA PULSADO, QUEDA FIJO LA LECTURA
BTFSC LAP,0 ;PERO CONTINUA CONTANDO PULSOS
GOTO MEMORY ;PRINCIPAL
BTFSS REFRESH,0 ;SI BIT=1 MOSTRAR, LUEGO LO PONGO EN 0
GOTO PRINCIPAL ;PARA NO PERDER TIEMPO EN MOSTRAR LO MISMO
GOTO MOSTRAR
MEMORY ;ESCRIBE "MEMORIA" EN EL LCD, MANTIENE FIJO EL VALOR DEL CONTADOR
BTFSC REFRESH,1 ;PARA UNA FACIL VISUALIZACION, PERO SIGUE
GOTO PRINCIPAL ;INTERNAMENTE ACTUALIZANDO LA CUENTA DE
MOVLW " " ;PULSOS
CALL DATO
CALL RETARDO
MOVLW "M"
CALL DATO
CALL RETARDO
MOVLW "E"
CALL DATO
CALL RETARDO
MOVLW "M"
CALL DATO
CALL RETARDO
MOVLW "O"
CALL DATO
CALL RETARDO
MOVLW "R"
CALL DATO
CALL RETARDO
MOVLW "I"
CALL DATO
CALL RETARDO
MOVLW "A"
CALL DATO
CALL RETARDO
BSF REFRESH,1 ;MEMORIZO QUE YA ESCRIBIO
GOTO PRINCIPAL
;****************<PRESENTACION EN EL LCD>***********************************
MOSTRAR
BCF REFRESH,0 ;BORRO BIT PORQUE YA LO MUESTRO
; MOVLW 0 ;INICIA EL ENVIO DE DATOS
; MOVWF R0C ;AL MODULO
BLANK MOVLW 01H ;BORRA DISPLAY
CALL CONTROL
CICLO
MOVWF " " ;PARA DESPLAZAR UN CARACTER (00H) QUE NO ES VISIBLE
CALL DATO ;Y EMPIECE A ESCRIBIR EN 01H DEL DISPLAY
CALL RETARDO
;CALL LEER
MOVF MILLON,W ;IMPRIMO VALOR DE "MILLON"
CALL TABLA2 ;PASO DEL NUMERO AL ASCII
CALL DATO ;INFORMO AL LCD QUE ENVIO UN "DATO"
CALL RETARDO ;RETARDO POR EL LENTO LCD
CALL LEER ;VOY A LEER POR SI HAY CAMBIOS EN SENSOR
;O PULSADOR DE "MEMORIA"
MOVF CENMIL,W ;
CALL TABLA2 ;IMPRIMO VALOR DE CENTENA DE MILLON
CALL DATO
CALL RETARDO
;CALL LEER
MOVF DECMIL,W ;DECENA DE MILLON
CALL TABLA2
CALL DATO
CALL RETARDO
CALL LEER
MOVF UNIMIL,W ;UNIDAD DE MILLON
CALL TABLA2
CALL DATO
CALL RETARDO
;CALL LEER
MOVF CENTENA,W ;CENTENA
CALL TABLA2
CALL DATO
CALL RETARDO
CALL LEER
MOVF DECENA,W ;DECENA
CALL TABLA2
CALL DATO
CALL RETARDO
;CALL LEER
MOVF UNIDAD,W ;UNIDAD
CALL TABLA2
CALL DATO
CALL RETARDO
CALL LEER
GOTO PRINCIPAL
;************************************************************************
END