Hola gente del foro, estoy con un problema similar a este post que encontré con el buscador.
Estoy haciendo unas pruebas con el pic 16F877. Quiero usar el timer 1 para encender y apagar un led del port E, o sea pasado un tiempo lo enciendo y pasado otro tiempo similar lo apago. En la simulacion con el MPLAB funciona pero en la placa no. El codigo es el siguiente:
LIST P=PIC16F877
#INCLUDE <P16F877.INC> ;definiciones del uC
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _LVP_OFF & _CPD_OFF
ERRORLEVEL -306, -302, -307
CBLOCK 0x020
delay
led
fin
ENDC
org 0x00
goto INICIO
org 0x04
bcf STATUS,RP0 ;banco 0
bcf STATUS,RP1
movlw 0x0b ;vuelvo a cargar los valores iniciales
movwf TMR1H ;del timer 1
movlw 0xdb
movwf TMR1L
bcf PIR1,TMR1IF ;borro flag de desbordamiento del timer1
bsf INTCON,GIE ;activo la interrupcion global
decfsz delay,f ;decremento delay y si no es cero
return ;retorna
btfsc led,0 ;verifico si el flag del led esta a 0
goto LED_1 ;el flag de led esta a uno entonces salto a LED_1
bsf PORTE,0 ;activo el led del PORTE,0
movlw 0x06 ;recargo el registro delay
movwf delay
bsf led,0 ;activo el flag de led
return ;retorno
LED_1
bcf PORTE,0 ;apago el led del PORTE,0
movlw 0x06 ;recargo el registro delay
movwf delay
bcf led,0 ;borro el flag de led
return ;retorno
INICIO
bcf STATUS,RP0 ;banco 0
bcf STATUS,RP1 ;banco 0
clrf led ;borro el registro del estado del led usado como flag
clrf fin ;registro usado para mantener un bucle infinito
movlw 0x06 ;cargo a delay con 6
movwf delay ;
movlw B'00000000' ;borro todos los flags aunque solo
movwf PIR1 ;uso el TMR1IF
movlw B'00000000' ;latch del PORTE=0
movwf PORTE ;
bsf STATUS,RP0 ;banco 1
movlw B'10000111' ;configuro los puertos A y E como
movwf ADCON1 ;I/O digitales
movlw 0x00 ;configuro todos los puertos como salidas
movwf TRISA
movwf TRISC
movwf TRISD
movwf TRISE
movwf TRISB
movlw 0x01 ;activo permiso de interrupcion para el
movwf PIE1 ;desbordamiento del TMR1
bcf STATUS,RP0 ;banco 0
movlw 0x0b ;cargo el valor de inicio del timer 1
movwf TMR1H ;de los registros TMR1H
movlw 0xdb ;y TMR1L
movwf TMR1L
movlw B'00110101' ;rango del divisor 1:8 , modo temporizador
movwf T1CON ;e inicio del timer
movlw B'11000000' ;permiso de los perifericos que no se controlan con INTCON y
movwf INTCON ;permiso de interrupcion global
bcf PORTE,0 ;LED del PORTE,0 apagado
bcf led,0 ;flag de led a 0
VERIF1 btfss fin,0 ;bucle infinito ya que fin,0 nunca sera =1
goto $-1
SALIR nop
END
No se si me olvidé de setear algún bit, tal vez en el datasheet haya alguna cita que yo no haya leido. O quizas el pic no funcione bien o el xtal este defectuoso. Asi que recurro a uds a ver si le encuentran algo mal al codigo.
Gracias de antemano.