Hola, estoy haciendo un proyecto en el que tengo que recibir la señal analogica de unos sensores, en concreto son 7 sensores. Dichos sensores entran al PIC con señales entre 0 y 5 voltios. Posteriormente debo de transformar esas señales analogicas en digitales, mediante el conversor A/D. Posteriormente una vez realizada la conversion a digital, tengo que enviar el resultado de la misma, es decir, de cada conversion por el puerto serie. El programa que presento a continuacion es el que estoy yo programando y tengo una duda a la hora de llamar las conversiones, ya que deberia de hacer un bucle cuando llamo a la rutina conversion1 por ejemplo, esto es donde trae " Aqui deberia poner instruccion para esperar hasta que haya interrupcion A/D" ¿Que deberia poner? . ¿Alguien me puede ayudar? Muchas gracias. A continuacion presento el programa
;Necesito comprobar lo del tiempo que espero cuando lanzo conversion, es decir, al llamar call conversion y cuando retorno esperar como se hace
list p=16f877
#include<P16F877.INC>
TEMP equ 20h ; Variable de almacenamiento temporal
org 0X00 ;Vector Reset
goto Inicio
org 0x04 ;Vector Interrupcion
goto Servicio_interrupcion
org 0x10
Inicio
movlw 0x2F ; Para configurar como entradas las entradas del registro A
bsf STATUS,RP0 ; Para ir al banco uno a configurar el TRISB
movwf TRISA ; Ya he configurado las entradas de A como analógicas
movlw 0x0E
movwf TRISE ; Configuro tambien las entradas de E como analogicas
bcf STATUS,RP0 ; vuelvo al banco 0 que es donde esta mi programa
call IniciaConversion; llamo a la rutina para iniciar conversion
bucle
;Aqui codigo que envio antes por txreg
call Conversion0
;Aqui deberia poner instruccion para esperar hasta que haya interrupcion A/D
call BucleRetardo
;Aqui codigo que envio antes por txreg
call Conversion1
;Aqui deberia poner instruccion para esperar hasta que haya interrupcion A/D
call BucleRetardo
;Aqui codigo que envio antes por txreg
call Conversion2
;Aqui deberia poner instruccion para esperar hasta que haya interrupcion A/D
call BucleRetardo
;Aqui codigo que envio antes por txreg
call Conversion3
;Aqui deberia poner instruccion para esperar hasta que haya interrupcion A/D
call BucleRetardo
;Aqui codigo que envio antes por txreg
call Conversion4
;Aqui deberia poner instruccion para esperar hasta que haya interrupcion A/D
call BucleRetardo
;Aqui codigo que envio antes por txreg
call Conversion5
;Aqui deberia poner instruccion para esperar hasta que haya interrupcion A/D
call BucleRetardo
;Aqui codigo que envio antes por txreg
call Conversion6
;Aqui deberia poner instruccion para esperar hasta que haya interrupcion A/D
call BucleRetardo
;Aqui codigo que envio antes por txreg
call Conversion7
;Aqui deberia poner instruccion para esperar hasta que haya interrupcion A/D
call BucleRetardo
call bucle ; vuelvo a iniciar la conversion del canal 0
Servicio_interrupcion
btfss PIR1,ADIF ; comprobar si hubo interrupcion en A/D
retfie ; retornamos si no la hubo
movf ADRESH,TXREG ; Hubo interrupcion cojo el dato y lo envio al puerto serie
bcf PIR1,ADIF ; reseteo el flag de interrupcion A/D
call BucleRetardo; Para asegurarnos tiempo entre conversiones
call BucleRetardo;
retfie
IniciaConversion
bsf STATUS,RP0 ; voy al banco 1 para configurar el adcon1
movlw b'00000000' ; configuracion todo entradas analogicas, justifico izquierda
movwf ADCON1
bsf PIE1,ADIE ; Para habilitar las interrupciones de A/D
bcf STATUS,RP0 ; vuelvo al banco 0 para configurar adcon0
bcf PIR1,ADIF ; Limpio el flag de interrupcion
bsf INTCON,PEIE ; Habilito interrupcion de perifericos
bsf INTCON,GIE ; Habilito interrupciones globles
return
Conversion0
bcf STATUS,RP0
movlw b'11000001' ; preparo conversion para canal 0
movwf ADCON0
call BucleRetardo ; para que de tiempo a procesar
bsf ACON0,GO
return
Conversion1
bcf STATUS,RP0 ; vuelvo al banco 0
movlw b'11001001' ; preparo conversion para el canal 1
movwf ADCON0
bsf ADCON0,GO ; Lanzo conversion
return
Conversion2
bcf STATUS,RP0 ; vuelvo al banco 0
movlw b'11010001' ; preparo conversion para el canal 1
movwf ADCON0
bsf ADCON0,GO ; Lanzo conversion
return