Autor Tema: interrupciones multiples adc y tmr0  (Leído 2517 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado OSUKARU

  • PIC10
  • *
  • Mensajes: 6
interrupciones multiples adc y tmr0
« en: 26 de Junio de 2009, 16:51:51 »
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
 :shock: :shock: :shock: :shock: :shock: :shock: :mrgreen:
;==============================================================================
;   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


 

anything