Problema con retardo PIC 16F877A

Hola buenas noches, estoy haciendo una tarea de la escuela la cual consiste en elaborar un programa para el pic 16f877a el cual prende un led 9 seg y lo apague igual 9 seg, ya le he estudiado algo y he realizado este programa pero pues no me funciona, la verdad no se donde esten mis errores y les pido por favor me echen una mano para ver donde la estoy regando, les dejo mi programa:

Código:
LIST P=16F877A
INCLUDE <P16F877A.INC>

;-----------------INICIO--------------
RESETTING      ORG 0x00
	       GOTO CONF

AUXREG         EQU 0x20

CONF           MOVLW b'01000111'
               BCF STATUS,RP1
               BSF STATUS,RP0
               MOVWF OPTION_REG
               BCF STATUS,RP0
               MOVLW b'00000001'
               MOVWF TRISB
               CLRF PORTB

BUTTON_PRESSED   BTFSC PORTB,0
                 GOTO BUTTON_PRESSED
                 BSF PORTB,1
                 MOVLW d'137'
                 MOVWF AUXREG
                 CALL TEMPO
                 BCF PORTB,1
                 CALL TEMPO
                 GOTO BUTTON_PRESSED

TEMPO            BCF INTCON,2
                 MOVLW 0x00
                 MOVWF TMR0
                 ESPERA         BTFSS INTCON,2
                                GOTO ESPERA
                 DECFSZ AUXREG,1
                 GOTO TEMPO
                 RETURN

END

Primeramente utilice la temporización máxima que se puede lograr con este micro que es de 65.536mS, cargue un valor de 0 al tmr0 para que contara de 0 a 255 y asi utilizar la temporizacion maxima, utilice un preescaler de 256, y para lograr los 9 segundos use un registro auxiliar el cual se decrementa 137 veces para lograr los 9 segundos.

Saludos y espero me puedan orientar un poco.
Gracias.
 
Estas configurando mal el Puerto B. En tu bloque CONF accedes al banco 0 e intentas configurar el TRISB que esta en el banco 1, por eso no funciona... saludos.

PDTA: y hazle caso a Darkbytes, ese programa te calcula times exactos.
 
Hola a todos, soy nuevo en el foro y apenas comienzo con la electrónica.
Estoy tratando de hacer un programa de un led parpadeante en MPLAB.
El programa consiste en encender y apagar un led conectado a RB0 con una duración de 1 seg.
El programa si me corre, pero a la hora de compilar en el simulador me aparecen errores.
Si alguien me puede orientar para saber en que estoy mal se lo agradeceré mucho, saludos.
Este es el programa:

Código:
list p=16f877a ;list directive to dafine processor
#include <p16f877a.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

      CBLOCK 0X20 
      CONTA_1
      CONTA_2
      CONTA_3
      ENDC

#define LED PORTB,0 
      ORG 0
      GOTO inicio
      ORG 5
inicio
      Bsf STATUS,RP0 
      Bcf STATUS,RP1
      Movlw .7 
      Movwf ADCON1
      Clrf TRISB 
      Bcf STATUS,RP0 

inicio_principal
      Bsf LED 
      Call Retardo_1s 
      BCF LED 
      Call Retardo_1s 
      Goto inicio_principal 
Retardo_1s
      movlw .10 
      movwf CONTA_2 
      movlw .100 
      movwf CONTA_2 
      movlw .250 
      movwf CONTA_1 
      nop 
      decfsz CONTA_1,F 
      goto $-.2 
      decfsz CONTA_2,F 
      goto $-.6 
      decfsz CONTA_3,F 
      goto $-.10 
      return 
end
 
Hola a todos, soy nuevo en el foro y apenas comienzo con la electrónica.
Estoy tratando de hacer un programa de un led parpadeante en MPLAB.
El programa consiste en encender y apagar un led conectado a RB0 con una duración de 1 seg.
El programa si me corre, pero a la hora de compilar en el simulador me aparecen errores.
Si alguien me puede orientar para saber en que estoy mal se lo agradeceré mucho, saludos.
No creo que tengas errores de compilación, lo que debes tener son advertencias por no indentar la cabecera y end, más los clásicos mensajes de selección de bancos.

El problema en tu código es la rutina de retardo de 1 segundo.
Trata como una costumbre, comentar las partes del código y también a que frecuencia trabajará el oscilador.

Puedes fácilmente generar las rutinas de retardo con el programa que mencioné anteriormente PDEL, o utilizar el programa on-line Delay Code Generator de Nikolai Golovchenko.

Ambos son sencillos de utilizar y generan resultados muy precisos.

Suerte.
 
Atrás
Arriba