hola amigo del foro mis respetos y admiracion para todos ustedes espero me puedan ayudar mi duda es la siguiente: Hace dias compre una sonda logica de display de 7 segmetos que utiliza el pic 16f84a, por error de medicion (sobrevoltaje) queme la punta y por consiguiente el pic 16f84a el cual remplace con otro igual. El kit de punta logica trajo un cd con material de programacion y varios codigos fuente entre esos el de la punta logica (archivo asm) el cual monte en el mplab y saque el archivo .hex correspondiente y cargue al nuevo pic 16f84a con la tarjeta pickit. Se lo monto a la sonda logica el cual no funciona absolutamente nada, ya probe el display y se que esta bueno y demas componentes le he cargado otros archivox hex al pic y funciona correctamente. Mi pregunta sera q el codigo fuente tiene un problema o alguna configuracion que hay que cambiar? para que funcione, le pido ayuda al que me vendio la punta y no quiere recibir mi llamada solo me dice q ese es el codigo que no lo moleste mas. Les agradezco su ayuda el codigo es el siguiente:
list p=16f84;, s=off
ESTADO EQU 03H
OPCION EQU 81H
TRISA EQU 85H
TRISB EQU 86H
PORTA EQU 05H
PORTB EQU 06H
INTCON EQU 0BH
TMR0 EQU 01H
PC EQU 02H
PHZ equ 7; RB7
PPRUEB equ 6; RB6
PLED equ 5 ; RB5
BUZZ equ 4 ; RB4
loops equ 0dh ;utilizado en retardos (milisegundos)
loops2 equ 0eh ;utilizado en retardos
BANDERA EQU 0CH
TEM EQU 0FH
ORG 0x000 ;vector de reset
GOTO MAIN
ORG 0x004 ; vector de interrupcion
BTFSS BANDERA,1 ;CHEQUEO BANDERA DE QUE SE HA
GOTO UNOCERO ; PRESENTADO UN ESTADO DE ALTA
; IMPEDANCIA.
BTFSS PORTB, 5 ; SI ESE ES EL CASO, CADA QUE
BSF PORTB, 5 ; OCURRA UNA INTERRUPCION, SE ORIGINA
;BTFSS PORTB, 4 ; POR LOS PINES 4 Y 5 DEL PUERTO B,
;BSF PORTB, 4 ; UNA SEÑAL DE PWM, GENERADA CAMBIANDO
BTFSC PORTB, 5 ; ALTERNADAMENTE EL ESTADO DE ESTAS
BCF PORTB, 5 ; DOS LINEAS, LAS CUALES CORRESPONDEN
;BTFSC PORTB, 4 ; AL DIODO LED INDICADOR Y AL ZUMBADOR.
;BCF PORTB, 4 ;
; BTFSC BANDERA,7
; GOTO INO
;INI MOVLW 0X04
; CLRF TEM
;INO INCF TEM,1
; SUBWF TEM,1
; BTFSS ESTADO,2
; GOTO NO
;:SI CLRF TEM
; BTFSS PORTB,4
; BSF PORTB,4
; BTFSC PORTB,4
; BCF PORTB,4
; BCF BANDERA,7
; GOTO SS
;NO BSF BANDERA,7
; CALL RETARDO
SS BSF ESTADO, 5 ; VOY A LA PAGINA 1
BCF INTCON, 2 ; B0RRO LA BANDERA DE INTER. DEL TMR0
BCF ESTADO, 5 ; VUELVO A LA PAGINA 0
MOVLW 0xAA ; CONFIGURO EL PORCENTAJE DE CICLO UTIL
MOVWF TMR0 ; EN EL TEMPORIZADOR TMR0.
RETFIE
UNOCERO BTFSC BANDERA,0 ; SI NO HAY ESTADO DE ALTA IMPEDANCIA,
GOTO UNO ; SE VERIFICA EL BIT 0 DEL REGISTRO BANDERA
BTFSS PORTB, 4 ; PARA DETERMINAR SI SE HA LEIDO UN CERO
BSF PORTB, 4 ; O UN UNO. SI SE HA LEIDO UN CERO (BIT
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BTFSC PORTB, 4 ; CERO --> 0), SE MANDA UNA SEÑAL DE PWM HACIA
BCF PORTB, 4 ; EL ZUMBADOR A UNA FRECUENCIA MENOR QUE LA DE HZ.
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF ESTADO, 5 ; VOY A LA PAGINA 1
BCF INTCON, 2 ; B0RRO LA BANDERA DE INTER. DEL TMR0
BCF ESTADO, 5 ; VUELVO A LA PAGINA 0
; CALL RETARDO
MOVLW 0x06 ; CONFIGURO UN PORCENTAJE DE CICLO UTIL
MOVWF TMR0 ; EN EL TEMPORIZADOR TMR0
RETFIE
UNO BSF PORTB, PLED;
; BTFSS PORTB, 5 ; SI SE HA DETERMINADO UN ESTADO LOGICO ALTO,
; BSF PORTB, 5 ; SE MANDA UNA NUEVA SEÑAL DE PWM HACIA EL
BTFSS PORTB, 4 ; ZUMBADOR, A UNA NUEVA FRECUENCIA MAYOR A
BSF PORTB, 4 ; LA ENVIADA PARA EL ESTADO DE ALTA IMPEDANCIA.
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
; BTFSC PORTB, 5 ; NOTE QUE ESTA RUTINA DE INTERRUPCION SE
; BCF PORTB, 5 ; HA DIVIDIDO EN TRES SUBRUTINAS, CADA UNA DE LAS
BTFSC PORTB, 4 ; CUALES SE ENCARGA DE ENVIAR UNA FRECUENCIA DISTINTA
BCF PORTB, 4 ; PARTIENDO DE UN SOLO TEMPORIZADOR.
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF ESTADO, 5 ; VOY A LA PAGINA 1
BCF INTCON, 2 ; B0RRO LA BANDERA DE INTER. DEL TMR0
BCF ESTADO, 5 ; VUELVO A LA PAGINA 0
MOVLW 0x02 ; CONFIGURO EL PORCENTAJE DE CICLO UTIL
MOVWF TMR0 ; EN EL TEMPORIZADOR TMR0
; CLRF TMR0
RETFIE
;A
MAIN:
BSF ESTADO, 5 ; CONMUTA A LA PAGINA 1
MOVLW B'01000000' ; SE CONFUGRA EL FUNCIONAMIENTO DE LOS PINES
MOVWF TRISB ; DE ACUERDO A LO DISPUESTO EN EL DIAGRAMA
MOVLW B'00000000' ; ESQUEMATICO. SOLO HAY UNA ENTRADA, EL
MOVWF TRISA ; PIN NUMERO SEIS DEL PUERTO B.
BCF OPCION, 5 ; CONFIGURO EL TIMER COMO TEMPORIZADOR
BCF INTCON, 2 ; BORRO BANDERA DE INT. DEL TMR0
BSF INTCON, 7 ; HABILITADOR GLOBAL DE INT.
BCF ESTADO, 5 ; VUELVO A LA PAGINA 0
CLRF BANDERA
;------------ B --------------
loop NOP ; EL PRIMER PASO ES DETERMINAR SI EXISTE
PULSO BTFSS PORTB,6 ; EN LA ENTRADA UNA FRECUENCIA DE PULSOS
GOTO PULSO_BAJO ; EL METODO ES MUY SENCILLO, SOLO SE LEE
PULSO_ALTO ; LA ENTRADA RB6, Y SE VERIFICA QUE ESE
CALL RETARDO ; NIVEL PERMANEZCA DURANTE CIERTO PERIODO
BTFSC PORTB,6 ; DE TIEMPO, EL CUAL ES DETERMINADO POR
GOTO loop1 ; LA RUTINA RETARDO. CAMBIANDO EL VALOR DE
GOTO EST_PULSO ; ESA RUTINA, CAMBIAMOS LA FRECUENCIA DE DETECCION.
PULSO_BAJO ; EN ESTA LINEA ESTAMOS LEYENDO DE NUEVO RB6
CALL RETARDO ; DESPUES DE UN RETARDO PARA CONSTATAR QUE SIGUE
BTFSS PORTB,6 ; EXISTIENDO UN NIVEL LÓGICO BAJO.
GOTO loop1 ; SI AUN EXISTE SIGNIFICA QUE NO HAY ENTRADA DE PULSOS
EST_PULSO ; Y PODEMOS CONTINUAR EL PROGRAMA.
BSF PORTB,1 ; SI SE HA DETECTADO UNA ENTRADA DE PULSOS,
BSF PORTA,1 ; ACTIVAMOS LOS PINES DE LOS PUERTOS
BSF PORTA,2 ; CORRESPONDIENTES PARA QUE SE VISUALICE LA LETRE P
BSF PORTB,0 ; PARA INDICAR QUE ESTA ENTRANDO A LA PUNTA LOGICA
BSF PORTB,2 ; UNA SERIE DE PULSOS A UNA FRECUENCIA DETERMINADA.
BCF PORTB,3
BCF PORTA,3 ; CUANDO SE VISUALIZA LA P, REGRESAMOS A LA ETIQUETA
BCF PORTB,5 ; loop PARA OBSERVAR EN QUE MOMENTO NOS SALIMOS DE
BCF PORTB,4 ; ESTE ESTADO.
GOTO loop
;-------C ----------
loop1 BCF PORTB, PHZ ; RB7 AHORA ESTA EN BAJO...
BTFSC PORTB, PPRUEB ; PRUEBO SI RB6 ES IGUAL A RB7
GOTO nohz
BSF PORTB, PHZ ; .. Y LUEGO PONGO EN ALTO
BTFSS PORTB, PPRUEB ; PRUEBO SI RB6 ES IGUAL A RB7
GOTO nohz
hz BSF BANDERA,1 ; SI LA ENTRADA ES HI Z
BSF PORTB,0 ; SE ACTIVA EL BIT 1 DEL REGISTRO
BCF PORTB,1 ; BANDERA PARA PODER RECONOCER
BSF PORTB,2 ; ESTE ESTADO DENTRO DE LA INTERRUPCION
BSF PORTB,3 ; Y MANDAR LA FRECUENCIA ADECUADA.
BSF PORTA,1 ; AL MISMO TIEMPO SE ACTIVA LA LETRA H
BSF PORTA,2 ; EN EL DISPLAY DE SIETE SEGMENTOS.
BCF PORTA,3 ; FINALMENTE ACTIVO LA INTERRUPCION:
; BSF OPCION,0
; BSF OPCION,1
; BSF OPCION,2
; BSF OPCION,5
; CLRF TMR0
MOVLW 0X04
MOVWF TEM
AGAIN CALL RETARDO
BTFSS PORTB,4
BSF PORTB,4
BTFSC PORTB,4 ; AL DIODO LED INDICADOR Y AL ZUMBADOR.
BCF PORTB,4 ;
DECFSZ TEM,1
GOTO AGAIN
BCF ESTADO, 5 ; VOY A LA PAGINA 1
BSF INTCON, 5 ; HABILITO INT. POR TMR0
BCF ESTADO, 5 ; VUELVO A LA PAGINA 0
GOTO loop
;--------------D --------
nohz BCF BANDERA,1 ; SI LA ENTRADA NO ESTA EN ESTADO DE ALTA Z
BCF PORTB, PHZ ; PONGO EL PIN RB7 EN BAJO, PARA PRUEBAS POSTERIORES
BTFSS PORTB, 6 ; Y LEO FINALMENTE EL PIN 6 DEL PUERTO B
GOTO BAJO ; Y VOY A LA RUTINA CORRESPONDIENTE (ALTO O BAJO)
;------------ E ------------
ALTO BSF PORTB, PLED ; SI LA ENTRADA ESTA EN ALTO, LED ENCENDIDO FULL
BSF BANDERA,0 ; ACTIVO EL BIT 0 DEL REGISTRO BANDERA
BSF PORTB,2 ; PARA RECONOCER ESTE ESTADO DENTRO DE LA
BSF PORTB,3 ; INTERRUPCION.
BCF PORTB,1 ; LUEGO HABILITO LOS PINES ADECUADOS QUE PERMITIRAN
BCF PORTB,0 ; VISUALIZAR EL NUMERO 1 EN EL DISPLAY
BCF PORTA,1 ; DE SIETE SEGMENTOS.
BCF PORTA,2 ; FINALMENTE HABILITO EL FUNCIONAMIENTO
BCF PORTA,3 ; DE LA INTERRUPCION POR EL TMR0
BCF ESTADO, 5 ; VOY A LA PAGINA 1
BSF INTCON, 5 ; HABILITO INT. POR TMR0
BCF ESTADO, 5 ; VUELVO A LA PAGINA 0
GOTO loop
; ----------- F ---------
BAJO BCF PORTB, PLED ; SI LA ENTRADA ESTA EN BAJO, SE DEBE APAGAR
BCF BANDERA,0 ; EL LED DE SALIDA, PONER EN CERO EL BIT 0
BSF PORTB,1 ; DEL REGISTRO BANDERA PARA SER DETECTADO
BSF PORTB,2 ; ESTE ESTADO DENTRO DE LA INTERRUPCION,
BSF PORTB,3 ; Y ACTIVAR LOS PINES CORRESPONDIENTES DE
BSF PORTA,1 ; LOS PUERTOS PARA VISUALIZAR EL NUEMRO
BSF PORTA,2 ; O EN EL DISPLAY DE SIETE SEGMENTOS.
BSF PORTA,3 ; FINALMENTE SE ACTIVA LA INTERRUPCION
BCF PORTB,0 ; POR TIMER0.
CALL RETARDO
BCF ESTADO, 5 ; VOY A LA PAGINA 1
BSF INTCON, 5 ; HABILITO INT. POR TMR0
BCF ESTADO, 5 ; VUELVO A LA PAGINA 0
GOTO loop
RETARDO ;subrutina de retardo de 100 milisegundos
movlw D'20' ;el registro loops contiene el n£mero
movwf loops ;de milisegundos del retardo
top2 movlw D'30' ;
movwf loops2
top; CLRF TMR0;
nop
nop
nop
nop
nop
nop
decfsz loops2 ;pregunta si termino 1 ms
goto top
decfsz loops ;pregunta si termina el retardo
goto top2
retlw 0
end