Retardo de 1s en MPLAB, mayor tiempo al probar en circuito

Saludos Cordiales colegas:

Desde ayer estoy intentando crear un retardo de tiempo de 1s para un PIC16F877A, bajo lenguaje ensamblador. Según mis calculos y la lógica del programa deberia de tener el retardo de 1s, pero al probarlo en breadboard, el retardo es mucho mayor de 1s, es aproximadamente de 10s :cry: ...... adjunto les envio el código del programa..!!

De antemano, infinitas gracias por su ayuda..!!

Código:
;SEGUNDO PROGRAMA
;Este programa permite enviar al puerto C del microcontrolador un conteo ascendente de 8 bits, con intervalos de
;tiempo de cada dato enviado de 1s. 

					LIST 			P=16F877A
					INCLUDE		"P16F877A.INC"
					
CFG1	EQU		_XT_OSC & _DEBUG_OFF & _PWRTE_ON & _WRT_OFF & _CPD_OFF
CFG2	EQU		_LVP_OFF & _BODEN_ON & _WDT_OFF

__CONFIG 			CFG1 & CFG2

				ORG		0x00
				GOTO		INICIO
				ORG		0x04

INICIO			CLRF		PORTC
				CLRF		TMR0
				BSF		STATUS,RP0
				CLRF		TRISC

;Configuracion de OPTION_REG: RBPU=0, INTEDG=0, T0CS=0,T0SE=0, PSA=0, PS2:PS0=111
				MOVLW	b'00000111'
				MOVWF	OPTION_REG
				BSF		INTCON,TMR0IE
				BCF		STATUS,RP0

;La rutina pausa de 50ms se repetira 20 veces, dando como resultado un retardo de tiempo de 1s.
CUENTA_DEC		EQU		0x21
				MOVLW	d'20'
				MOVWF	CUENTA_DEC
						
				CALL 		PAUSA

PRINCIPAL			INCF		PORTC
				CALL		PAUSA
				GOTO		PRINCIPAL

CARGA_TMR0		EQU		d'256' - d'195'

;Retardo = 4*250ns*195*256 = 49.9ms = 50ms
PAUSA			MOVLW	CARGA_TMR0
				MOVWF	TMR0
				BCF		INTCON,TMR0IF
INC_TMR0			BTFSS	INTCON,TMR0IF
				GOTO		INC_TMR0

;El registro CUENTA_DEC se decrementara hasta que su valor llegue a CERO. Esto permitira repetir 20 veces el bucle
;PAUSA, prolongando asi el retardo original de 50ms. Una vez llegue a CERO el registro CUENTA_DEC, el programa
;saltara a principal donde se incrementara PORTC y se volvera a llamara a la rutia PAUSA.

				DECF		CUENTA_DEC	
				BTFSS	STATUS,Z
				GOTO		PAUSA
				RETURN
				END
 

Adjuntos

  • retardo.pdf
    30.9 KB · Visitas: 2
Atrás
Arriba