Quiero realizar una practica donde se puedan medir los pulsos del
corazon y mostrarlos en una pantalla de lcd. En este foro he leido
algo sobre como medirlos. Uno de los métodos consisten en usar los
latidos del corazon para activar una interrupcion externa y medir la
longitud entre pulso y pulso
configure un pic 16f84 para que entrara en interrupcion por el portb,0
cada vez que entra en interrupción, utilizo un bit testigo, para indicar
inicio o parada de conteo en un registro X, cuando entra en la interrupcion
testeo un bit, si este bit esta a uno comienza conteo. despues use un
retardo para que incrementara un registro cada milisegundo. a continuacion
muestro una parte de como incrementa:
#DEFINE BIT_CONTEO CONTEO,0 ;BIT TESTIGO QUE ACTIVO O DESACTIVA CONTEO
bucle: BTFSS BIT_CONTEO ;PREGUNTA SI EMPIEZA A CONTA, SINO SIGUE
GOTO NO_CUENTA
INCFSZ CON_P,1 ;INCREMENTA registro CON_P Y SALTA SI ES CERO
GOTO DEL_1
INCF CONTA_1,1 ;VERIFICA SI HAY DESBORDAMIENTO DE REGISTRO
BCF PORTA,2
DEL_1 CALL DELAY_1MS ;
BSF PORTA,2
GOTO bucle
NO_CUENTA BTFSC BIT_CONTEO ;PREGUNTA SI EMPIEZA A CONTA, SINO SIGUE
NOP
CLRF CON_P
CLRF CONTA_1
GOTO bucle
como se ve uso dos registros para contar uno llamado CON_P y otro llamado CONTA_1
esto es para tener una resolucion de 16 bit o 65535. cuando entra en interrupcion
hice el siguente condigo:
INTER: BTFSS INTCON,1 ;VERIFICO SI ES UNA INT EXTERNA SI LO ES SALTA
RETFIE ;FIN DE INTERRUPCION
START_CON MOVLW B"00000000" ;DESACTIVO INTERRUPCION EXTERNA RB0 Y RB4-RB7
MOVWF INTCON
BTFSC BIT_CONTEO ;SALTA A INICIAR CONTEO
GOTO STOP_CON ;SALTA A PARAR CONTEO
BSF BIT_CONTEO ;SEÑALIZADOR DE INICIO DE CONTEO A 1
MOVLW B"10010000" ;ACTIVO INTERRUPCION EXTERNA RB0 Y RB4-RB7
MOVWF INTCON
RETFIE
;
STOP_CON: ;
MOVF CONTA_1,0
MOVWF H_BYTE ;SACO DATO DE REGISTRO BAJO Y LO GURADOEN L_BYTE
MOVF CON_P,0
MOVWF L_BYTE ;SACO DATO DE REGISTRO ALTO Y LO GUARDO EN H_BYTE
CALL B2_BCD ;CONVIERTE EN BCD
CALL MUESTRA ;MUESTRA EN DISPLAY LCD
BCF BIT_CONTEO ;SAÑALIZADOR DE INICIO A 0
MOVLW B"10010000" ;ACTIVO INTERRUPCION EXTERNA RB0 Y RB4-RB7
MOVWF INTCON
RETFIE
Con estas rutina y usando como circuito de prueba un 555 en modo astable para
generar un oscilador de 1 Hz, tengo que en la pantalla de el LCD me muestra el
valor 62720 hasta 62976, hay variancion cuando cuenta y como retardo hice lo
siguiente:
DELAY_1MS: CLRF TOPTION
MOVLW 04H
MOVWF TOPTION ;cargo registro TMR0 con 4
DECRE_A: BTFSS INTCON,2 ;espera que se desborde TMR0 y sale
GOTO DECRE_A
BCF INTCON,2
RETURN
Esto me da un retardo creo que de 1 mseg. no se si esto esta malo si me puede
ayudad muchas gracias.
Yo se que hay una forma de usar el contador interno, he tratado de hacerlo, pero no
he podido configurar el registro option para que me inicie un conteo cada vez
que entra en interrupcion y luego parar cuando salga de él y ademas
tengo muchas confusiones con el uso de los retardos no se si lo hago bien