Hola Hansot, si bien el programa se nota que es de principiante o sea de que recién estas empezando con esto de la programación, pues no veo nada que indique o pueda quemarte algo de la etapa del oscilador por causa de la programación.
Si a un micro le cargas ese programa, le das alimentación y no conectas nada a sus pines, pues de inmediato entrará a oscilar.
Ahora, que le conectas a los pines y como funciona el programa, pues esto no lo e controlado.
Igual te paso algunos consejos con respecto a la manera de redactar tu programa:
------------------------------------------------------------------------------------------------
Tu colocas:
LIST P=16F877A
#INCLUDE <P16F877A.INC>
__CONFIG 0X3F3A
Es más fácil de entender incluso para vos si usaras:
LIST P=16F877A
#INCLUDE <P16F877A.INC>
__CONFIG _HS_OSC&_WDT_OFF&_PWRTE_OFF&_BODEN_OFF&_LVP_OFF&_CPD_OFF&_WRT_OFF&_DEBUG_OFF&_CP_OFF
Se que es más largo, pero mucho más fácil de entender.
------------------------------------------------------------------------------------------------
Luego defines las direcciones de todos los registros, PORTA, PORTB, etc. Si usas la declaración: #INCLUDE <P16F877A.INC> Todos esas direcciones ya están definidas, por lo que no es necesario declararlas.
Busca en la dirección:
C:\Archivos de programa\Microchip
Ahí encontraras el archivo "p16f877a" (sin comillas), que te detalla todas las definiciones que se usan para este micro en particular si defines el INCLUDE tal como lo as hecho
------------------------------------------------------------------------------------------------
CLRF PORTA
CLRF PORTB
CLRF PORTC
Deben ir antes de definir los registros TRIS corespondientes
------------------------------------------------------------------------------------------------
Para definir la memoria RAM es más fácil con el cblock --> endc.
De esta manera no tienes que andar colocándole una posición exacta a cada variable, o sea no necesitas el EQU.
------------------------------------------------------------------------------------------------
Aunque no uses las interrupciones es bueno definirlas, un buen inicio de programa es el siguiente:
ORG 0
clrwdt
bcf STATUS,RP0 ;Selecciono el banco 0
bcf STATUS,RP1
goto PRINCIPIO
ORG 4
clrf INTCON ; En el caso de no usar las interrupciones
return
------------------------------------------------------------------------------------------------
Las tablas siempre van primero e inmediatamente después de definir el vector de inicio y el de interrupciones
------------------------------------------------------------------------------------------------
Entonces el programa te quedaría algo como esto:
LIST P=16F877A
#INCLUDE <P16F877A.INC>
__CONFIG _HS_OSC&_WDT_OFF&_PWRTE_OFF&_BODEN_OFF&_LVP_OFF&_CPD_OFF&_WRT_OFF&_DEBUG_OFF&_CP_OFF
;---------------------------------------------------------------------------------------------------------
; Definición de la RAM
cblock 0x20
TIM1
TIM2
TIM3
CNT
CNT2
endc
;---------------------------------------------------------------------------------------------------------
; Definición de vectores de inicio e interrupciones
ORG 0
clrwdt
bcf STATUS,RP0 ;Selecciono el banco 0
bcf STATUS,RP1
goto PRINCIPIO
ORG 4
clrf INTCON ; En el caso de no usar las interrupciones
return
;---------------------------------------------------------------------------------------------------------
;Tabla
BCD7SEG
ADDWF PCL,1 ; SE INCREMENTA EL CONTADOR
RETLW B'00000000' ; 0
RETLW B'00000001' ; 1
RETLW B'00000010' ; 2
RETLW B'00000011' ; 3
RETLW B'00000100' ; 4
RETLW B'00000101' ; 5
RETLW B'00000110' ; 6
RETLW B'00000111' ; 7
RETLW B'00001000' ; 8
RETLW B'00001001' ; 9
CLRF CNT ; SI LLEGA A 10 EL CONTADOR SE RESETEA
RETLW B'0000000' ; 0
;---------------------------------------------------------------------------------------------------------
; Inicio del programa principal
PRINCIPIO
CLRF PORTA ; LIMPIA PUERTO A
CLRF PORTB ; LIMPIA PUERTO B
CLRF PORTC ; LIMPIA PUERTO C
BSF STATUS,RP0 ; BANCO 1
MOVLW 0X06
MOVWF ADCON1 ; CONFIGURA TODOS LOS PINES COMO SALIDAS DIGITALES
MOVLW B'00111111'
MOVWF TRISA ; PUERTO A ENTRADAS
MOVLW B'00000000'
MOVWF TRISB ; PUERTO B SALIDAS
MOVLW B'00000000'
MOVWF TRISC ; PUERTO C SALIDAS
BCF STATUS,RP0 ; BANCO 0
GOTO INICIO
;---------------------------------------------------------------------------------------------------------
INICIO
MOVLW 0X00
MOVWF CNT ; CONTADOR = 0
MOVLW 0X0A
MOVWF CNT2
TEST
BTFSS PORTA,0 ; PULSAR BOTON PARA INICIAR
GOTO TEST ; TESTEAR BOTON
REBOT
BTFSC PORTA,0
GOTO REBOT ; ANTIREBOTE
DERECHA
MOVLW B'00110011'
MOVWF PORTB ; PASO 1
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
MOVLW B'01100110'
MOVWF PORTB ; PASO 2
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
MOVLW B'11001100'
MOVWF PORTB ; PASO 3
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
MOVLW B'10011001'
MOVWF PORTB ; PASO 4
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
BTFSC PORTA,1 ; SENSOR 1 INTERRUMPIDO?
GOTO DERECHA ; REPITE CICLO
IZQUIERDA
MOVLW B'00111001'
MOVWF PORTB ; PASO 1
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
MOVLW B'01101100'
MOVWF PORTB ; PASO 2
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
MOVLW B'11000110'
MOVWF PORTB ; PASO 3
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
MOVLW B'10010011'
MOVWF PORTB ; PASO 4
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
BTFSC PORTA,2 ; SENSOR 2 INTERRUMPIDO?
GOTO IZQUIERDA ; REPITE CICLO
DERECHA2
MOVLW B'00110000'
MOVWF PORTB ; PASO 1
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
MOVLW B'01100000'
MOVWF PORTB ; PASO 2
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
MOVLW B'11000000'
MOVWF PORTB ; PASO 3
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
MOVLW B'10010000'
MOVWF PORTB ; PASO 4
CALL DEMORA ; 0.1 SEGUNDOS
CLRF PORTB
BTFSC PORTA,3 ; SENSOR 3 INTERRUMPIDO?
GOTO DERECHA2 ; REPITE CICLO
INCF CNT,f ; INCREMENTAMOS CONTADOR
MOVFW CNT ;
CALL BCD7SEG ; LLAMAMOS A LA TABLA
MOVWF PORTC ; CARGAMOS TABLA EN PORTB
DECFSZ CNT2,f ; CNT2 = 0 ?
GOTO DERECHA ; NO, SE REPITE EL CICLO
GOTO INICIO ; SI, SE RESETEA EL PROGRAMA
;---------------------------------------------------------------------------------------------------------
DEMORA
MOVLW 0x3F ; RETARDO DE 0.1 SEGUNDOS
MOVWF TIM1
MOVLW 0x90
MOVWF TIM2
Delay_0
DECFSZ TIM1,f
GOTO $+2
DECFSZ TIM2,f
GOTO Delay_0
GOTO $+1
RETURN
;---------------------------------------------------------------------------------------------------------
END
Lo cual es mucho más fácil de entender y eventualmente corregir
Espero te sea de ayuda.
Un saludo.
Atte. CARLOS.