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
...... adjunto les envio el código del programa..!!
De antemano, infinitas gracias por su ayuda..!!
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
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