hola que tal soy nuevo por aqui y me preguntaba si alguien me podria ayudar a solucionar mi problema, les contare estoy haciendo una programacion en el pic16f877a de tal manera que este configurado el modo ADC y el TMR0 con tinterrupciones (ambas) de tal manera que el adc lee el bit de entrada analogica y lo convierte en binario y lo muestra en el puerto b y d ya que es de 10 bits ademas aunado a esto queiro agregarle que mediante desbordes enel tmr0 parapadee un puerto c de tal manera que el parpadeo este en funcion del tiempo dado por la conversion de analogico a digital de tal forma que:
de 0 a 0.4 volts el timempo sea 0 segundos ...0.5 volts de entrada el tiempo sea de 1 segundo a 1.4 volts tambien 1 segundo pero a 1.5 hasta 2.4 el timepo cambie a 2 segundos y asi sucesivamente hasta llegar a 4.5 hasta 5 volts que sean 5 segundos he logrado hacer jalar estos por separado osea un ADC en un pic y un TMR0 en otro pero al querer unirlos en un solo pic el pic convierte el ADC pero no parpaea (funcion del TMR0) por lo que les dejo el asm generado hasta el momento en verdad les agradeceria me guiaran por el buen camino ya que siento que ando navegando a la deriva, por su tiempo y atencion muchas gracias.. bye
;==============================================================================
; PROGRAMA QUE PARPADEA EL PUERTO C CON EL TMR0, EL TIEMPO ESTA DETERMINADO
; POR EL VALOR LEIDO EN PUERTO DE ENTRADA ANALOGICO Y CODIFICADO A DIGITAL
;EL RESULTADO DE LA CONVERSION ES MOSTRADO POR LOS PUERTOS B Y D Y EL PUERTOC
; PARPADEARA COMO SE HA INDICADO CON ANTERIORIDAD
;==============================================================================
LIST P=16F877A
INCLUDE "P16F877A.INC"
CBLOCK 0X20
DATO_ADC_H
DATO_ADC_L
CONT_T0
TEMPORAL_L
TEMPORAL_H
TEMPORAL
DATO
LITERAL
ENDC
ORG 0X00
GOTO INICIO
ORG 0X04
GOTO RSI
INICIO
CALL CONF_PTOS ;CONFIGURAMOS LOS PUERTOS
CLRF PORTB ;LIMPIA EL PUERTOB Y
CLRF PORTC ;Y EL PUERTOC Y D
CLRF PORTD
CALL CONF_ADC
CALL CONF_TMR0
CALL CONF_INT
MOVF LITERAL,W
MOVWF CONT_T0
MOVLW D'61'
MOVWF TMR0
ESPERO BTFSS INTCON,T0IF ;VERIFICA SI LA VANDERA ESTA EN 1
GOTO ESPERO ;SI NO LO ESTA SIGUE VERIFICANDO SI ESTA A UNO
BCF INTCON,T0IF ;SALTA Y APAGA LA VANDERA
BSF ADCON0,2 ;Y COMIENZA LA CONVERSION
GOTO ESPERO
ISR
ALL2 CALL CONF_INT_TMR0
NOP
NOP
NOP
NOP
NOP
NOP
BTFSS INTCON,T0IF
RETFIE
DECFSZ CONT_T0
GOTO SALIR
MOVLW 0XFF
XORWF PORTC,F
SALIR MOVF LITERAL,W
MOVWF TMR0
BCF INTCON,T0IF
RETFIE
RSI
BTFSS PIR1,ADIF ;SE PONDRA EN 1 CUANDO HAYA TERMINADO LA CONVERSIÓN
BTFSS INTCON,T0IF
GOTO ALL
GOTO ALL2 ;SIGUE EN PIE LA CONVERSIÓN
ALL BSF STATUS,RP0 ;BANCO1
MOVF ADRESL,W ;LE CARGA A W LA PARTE BAJA DE LA CONVERSIÓN
BCF STATUS,RP0 ;BANCO0
MOVWF PORTB ;SE MUESTRA EN EL PÚERTOB
MOVF PORTB,W
MOVWF DATO_ADC_L ;Y LO CARGA A DATO_ADC_L (PARTE BAJA)
MOVF ADRESH,W ;LE CARGA A W LA PARTE ALTA DE LA CONVERSIÓN
MOVWF PORTD ;SE MUESTRA EN EL PUERTOD
MOVF PORTD,W
MOVWF DATO_ADC_H ;Y LO CARGA A DATO_ADC_L (PARTE ALTA)
CONVIERTE CALL PARPADEO
CALL ISR
BCF PIR1,ADIF ;LIMPIA LA VANDERA PARA ESPERAR OTRA CONVERSIÓN
RETFIE
;=========================================================================================
;-------SUBRUTINAS QUE CONFIGURAN LOS PUERTOS Y HABILITAN EL ADC Y EL TMR0----------------
CONF_PTOS
BSF STATUS,RP0 ;BANCO1
BSF TRISA,2 ;SELECCIÓN DE LA ENTRADA ANALÓGICA
CLRF PORTB ;LIMPIAMOS EL PUERTOB ASÍ COMO
CLRF PORTC ;EL PUERTOC
CLRF PORTD ;ASI COMO EL PUERTOD
MOVLW 0X03 ;SELECCIONAMOS EL PRESCALADOR DE 8
MOVWF OPTION_REG ;EN EL REGISTRO OPTION_REG
BCF STATUS,RP0 ;BANCO0
RETURN
CONF_ADC
BSF STATUS,RP0 ;BANCO1
MOVLW 0X80 ;LE CARGAMOS UN 80H
MOVWF ADCON1 ;AL ADCON1 PARA JUSTIFICAR ALA DERECHA
BCF STATUS,RP0 ;BANCO0
MOVLW 0X51 ;LE CARGAMOS UN 51H
MOVWF ADCON0 ;AL ADCON0 PARA SELECCIONAR EL RELOJ,CANAL Y PRESCALDOR
RETURN
CONF_INT
BCF PIR1,ADIF ;SE LIMPIA LA VANDERA
BSF STATUS,RP0 ;BANCO1
BSF PIE1,ADIE ;SE HABILITA LA INTERRUPCIÓN
BCF STATUS,RP0 ;BANCO0
BSF INTCON,PEIE ;SE HABILITA LA INTERRUPCIÓN DE LOS PERIFERICOS
BSF INTCON,GIE ;SE HABILITA EL GIE
RETURN
CONF_INT_TMR0
movlw 0xA0 ; 1010 0000 en binario
movwf INTCON ; Habilitamos GIE y T0IE (interrupción del TMR0)
RETURN
CONF_TMR0
BSF STATUS,5 ;CONFIGURO EL TMR0 EN ACTIVO POR INTERRUPCIONES
MOVLW 0X07
MOVWF OPTION_REG
BCF STATUS,5
RETURN
;==RUTINA QUE OBTIENE EL MSB DE LA CONVERSION DELA CONVERSION Y EL LSB DE LA CONVERSION MAS ALTA Y LOS UNE
;DESPUES DE UNIRLOS Y DETERMINA EL VALOR A CARGAR EN LA VARIABLE TIMER PARA SABER CUANTO TIEMPO VA PARPADEAR
;EL PUERTO C DEL PIC
PARPADEO
MOVLW 0XF0 ;OBTENGO MEDIANTE SWAP Y OR Y AND LOS BITS MSB Y LSB UNIDOS EN UN SOLO REGISTRO
ANDWF DATO_ADC_L,W
MOVWF TEMPORAL_L
CLRF DATO_ADC_L
MOVF TEMPORAL_L,W
MOVWF DATO_ADC_L
CLRF TEMPORAL_L
SWAPF DATO_ADC_L,W
MOVWF TEMPORAL_L
CLRF DATO_ADC_L
MOVF TEMPORAL_L,W
MOVWF DATO_ADC_L
CLRF TEMPORAL_L
SWAPF DATO_ADC_H
MOVLW 0XF0
ANDWF DATO_ADC_H,W
MOVWF TEMPORAL_H
CLRF DATO_ADC_H
MOVF TEMPORAL_H,W
MOVWF DATO_ADC_H
CLRF TEMPORAL_H
MOVF DATO_ADC_H,W
IORWF DATO_ADC_L,W
MOVWF TEMPORAL
CALL ASK
NADA NOP
RETURN
;A PARTIR DE AQUI COMPARO EL DATO OBTENIDO CON UNA TABLA Y DECIDO CUAL LITERAL
;MUEVO AL CONTADOR DEL TMR0 PARA EL PARPADEO
ASK
CLRF DATO
PUNTO_UNO
MOVLW 01H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_NADA
GOTO PUNTO_DOS
RETURN
PUNTO_DOS
MOVLW 02H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_NADA
GOTO PUNTO_TRES
RETURN
PUNTO_TRES
MOVLW 03H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_NADA
GOTO PUNTO_CUATRO
RETURN
PUNTO_CUATRO
MOVLW 05H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_NADA
GOTO PUNTO_CINCO
RETURN
;---TERMINA EL RANGO DE 0 SEGUNDOS A ENVIAR
PUNTO_CINCO
MOVLW 06H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_UNO
GOTO PUNTO_SEIS
RETURN
PUNTO_SEIS
MOVLW 07H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_UNO
GOTO PUNTO_SIETE
RETURN
PUNTO_SIETE
MOVLW 08H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_UNO
GOTO PUNTO_OCHO
RETURN
PUNTO_OCHO
MOVLW 0AH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_UNO
GOTO PUNTO_NUEVE
RETURN
PUNTO_NUEVE
MOVLW 0BH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_UNO
GOTO _1
RETURN
_1
MOVLW 0CH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_UNO
GOTO _11
RETURN
_11
MOVLW 0EH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_UNO
GOTO _12
RETURN
_12
MOVLW 0FH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_UNO
GOTO _13
RETURN
_13
MOVLW 10H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_UNO
GOTO _14
RETURN
_14
MOVLW 11H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_UNO
GOTO _15
RETURN
;--TERMINA EL RANGO DE 1 SEGUNDO PARA ENVIAR
_15
MOVLW 13H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_DOS
GOTO _16
RETURN
_16
MOVLW 14H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_DOS
GOTO _17
RETURN
_17
MOVLW 15H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_DOS
GOTO _18
RETURN
_18
MOVLW 17H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_DOS
GOTO _19
RETURN
_19
MOVLW 18H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_DOS
GOTO _20
RETURN
_20
MOVLW 19H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_DOS
GOTO _21
RETURN
_21
MOVLW 1AH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_DOS
GOTO _22
RETURN
_22
MOVLW 1CH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_DOS
GOTO _23
RETURN
_23
MOVLW 1DH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_DOS
GOTO _24
RETURN
_24
MOVLW 1EH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_DOS
GOTO _25
RETURN
;----TERMINA RANGO DE 2 SEGUNDOS----
_25
MOVLW 20H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_TRES
GOTO _26
RETURN
_26
MOVLW 21H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_TRES
GOTO _27
RETURN
_27
MOVLW 22H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_TRES
GOTO _28
RETURN
_28
MOVLW 23H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_TRES
GOTO _29
RETURN
_29
MOVLW 25H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_TRES
GOTO _30
RETURN
_30
MOVLW 26H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_TRES
GOTO _31
RETURN
_31
MOVLW 27H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_TRES
GOTO _32
RETURN
_32
MOVLW 28H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_TRES
GOTO _33
RETURN
_33
MOVLW 2AH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_TRES
GOTO _34
RETURN
_34
MOVLW 2BH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_TRES
GOTO _35
RETURN
;----TERMINA RANGO DE 3 SEGUNDOS----
_35
MOVLW 2CH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CUATRO
GOTO _36
RETURN
_36
MOVLW 2EH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CUATRO
GOTO _37
RETURN
_37
MOVLW 2FH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CUATRO
GOTO _38
RETURN
_38
MOVLW 30H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CUATRO
GOTO _39
RETURN
_39
MOVLW 31H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CUATRO
GOTO _40
RETURN
_40
MOVLW 33H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CUATRO
GOTO _41
RETURN
_41
MOVLW 34H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CUATRO
GOTO _42
RETURN
_42
MOVLW 35H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CUATRO
GOTO _43
RETURN
_43
MOVLW 37H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CUATRO
GOTO _34
RETURN
_44
MOVLW 38H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CUATRO
GOTO _45
RETURN
;----SE TERMINA EL RANGO DE 4-------
_45
MOVLW 39H
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CINCO
GOTO _46
RETURN
_46
MOVLW 3AH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CINCO
GOTO _47
RETURN
_47
MOVLW 3CH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CINCO
GOTO _48
RETURN
_48
MOVLW 3DH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CINCO
GOTO _49
RETURN
_49
MOVLW 3EH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CINCO
GOTO _50
RETURN
_50
MOVLW 3FH
SUBWF TEMPORAL,W
MOVWF DATO
BTFSS STATUS,Z
GOTO ENVIA_CINCO
RETURN
_5X
RETURN
;----SE TERMINA EL RANGO DE 5----
;-----SUBRUTINA QUE ENVIA LA VARIABLE AL TRM0-----
ENVIA_NADA
MOVLW 0X00
MOVWF LITERAL
GOTO NADA
ENVIA_UNO
MOVLW 0X10
MOVWF LITERAL
GOTO NADA
ENVIA_DOS
MOVLW 0X40
MOVWF LITERAL
GOTO NADA
ENVIA_TRES
MOVLW 0X60
MOVWF LITERAL
GOTO NADA
ENVIA_CUATRO
MOVLW 0X80
MOVWF LITERAL
GOTO NADA
ENVIA_CINCO
MOVLW 0X100
MOVWF LITERAL
GOTO NADA
END