Autor Tema: Habilitación del TMR1 con pic18F  (Leído 3869 veces)

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

Desconectado roger

  • PIC10
  • *
  • Mensajes: 3
Habilitación del TMR1 con pic18F
« en: 13 de Junio de 2006, 19:47:56 »
Hola, estoy habilitando una interrupción interna cada X milisegundos y muy bien no se el motivo del porque no funciona!! He probado de ejecutar el código en la prioridad alta y baja pero tampoco!!! os paso un programa sencillo que he hecho simplemente para comprovar su correcto funcionamiento!!! agradecido de vuestra ayuuuuuda!!!!!!!!!!!!!!!! por cierto no os asusteis con el programa que parece largo pero en realidad son 2 líneas.




PIc18F4420

      UDATA

#define    timer1_alt   0x3E   ; Temps de finalització definit entre timer1_alt i timer1_baix
#define      timer1_baix   0x0D   ; Basat en Fosc/4

   

;******************************************************************************
;EEPROM data
; Data to be programmed into the Data EEPROM is defined here

DATA_EEPROM   CODE   0xf00000

      DE   "Test Data",0,1,2,3,4,5

;******************************************************************************
;Reset vector
RESET_VECTOR   CODE   0x0000

      goto   Main      ;go to start of main code

;******************************************************************************
;High priority interrupt vector
; This code will start executing when a high priority interrupt occurs or
; when any interrupt occurs if interrupt priorities are not enabled.

HI_INT_VECTOR   CODE   0x0008

      bra   HighInt      ;go to high priority interrupt routine
   

;******************************************************************************
;Low priority interrupt vector
; This code will start executing when a low priority interrupt occurs.
; This code can be removed if low priority interrupts are not used.

LOW_INT_VECTOR   CODE   0x0018

      bra   LowInt      ;go to low priority interrupt routine

;******************************************************************************
;High priority interrupt routine
; The high priority interrupt code is placed here.

      CODE

HighInt:

;   *** high priority interrupt code goes here ***

      bsf   PORTA,4
      bcf    PIR1, TMR1IF   ; Flag T1 deshabilitado
      retfie   FAST

;******************************************************************************
;Low priority interrupt routine
; The low priority interrupt code is placed here.
; This code can be removed if low priority interrupts are not used.

LowInt:
      
      bsf      PORTA,4
      bcf    PIR1, TMR1IF      ; Flag T1 deshabilitado
               retfie   FAST
;   *** low priority interrupt code goes here ***


      

;******************************************************************************
Main:

   CLRF   PORTA    ; Initialize PORTA by
               ; clearing output
               ; data latches
   CLRF   LATA    ; Alternate method
               ; to clear output
               ; data latches
   MOVLW    0Fh    ; Configure A/D
   MOVWF    ADCON1  ; for digital inputs
   MOVWF    07h    ; Configure comparators
   MOVWF    CMCON   ; for digital input
   MOVLW   0CFh
   MOVWF    TRISA   ; Set RA<3:0> as inputs
             ; RA<5:4> as outputs


;configurar interrupció Timer 1   
       bcf    PIR1, TMR1IF          ; Flag T1 deshabilitat
prueba   movlw   b'01001001'
       movwf   T1CON         ; Configura T1 com a Fosc/4
       movlw   timer1_alt         ; Carrega els registres per tenir una freqüència de mostreig de 5ms
       movwf   TMR1H
       movlw   timer1_baix
       movwf   TMR1L
       bsf      PIE1, TMR1IE   ; Habilita T1
            bsf   PORTA,5
       goto proba


Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Habilitación del TMR1 con pic18F
« Respuesta #1 en: 13 de Junio de 2006, 20:54:57 »
HOla, No encuentro la etiqueta "proba".
Y lo mas grave: no veo donde habilitas INTCON,GIE. Esta linea bsf INTCON,GIE) podrias ubicarla debajo de la linea: bsf      PIE1, TMR1IE   ; Habilita T1
Saludos.

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado roger

  • PIC10
  • *
  • Mensajes: 3
Re: Habilitación del TMR1 con pic18F
« Respuesta #2 en: 14 de Junio de 2006, 17:24:43 »
Hola, cierto tienes razón y además creo que tambien falta el PEIE de INTCON.......... Lo que me ocurre es que el timer1 se me desborda porque el flag se me pone a 1 y ejecuta las instrucciones, pero mi intención es que automáticamente se situe en la HIGHT PRiority para que me ejecute las lecturas!!!!

He hecho un programita muy sencillo para ver si se situa en la hight priority. Funciona de la siguiente manera:
   Inicializo puerto A
   Reseteo los bits de control del timer1
   Configuración del registro INTCON 
   SI el flag de desbordamiento del timer 1 se pone a 1 activa la salida 5 SINO ESPERA
   Si va a la posición de programa 0x0008 activa la salida 4 y vuelve de nuevo al programa principal

Pues bien solo se me activa el bit 5 por lo que nunca se situa en la posición 0x0008, no entiendo el problema a ver si alguien pude indicarme porque llevo batallandoooooooooooooooo dias!!!!  GRÀCIASSSSSS



   LIST P=18F4420, F=INHX32 ;directive to define processor and file format
   #include <P18F4420.INC>    ;processor specific variable definitions


;******************************************************************************
;Reset vector
; This code will start executing when a reset occurs.

RESET_VECTOR   CODE   0x0000
      goto   Main      ;go to start of main code

;******************************************************************************
;High priority interrupt vector
HI_INT_VECTOR   CODE   0x0008

      bra   HighInt      ;go to high priority interrupt routine
   

;******************************************************************************
;Low priority interrupt vector
LOW_INT_VECTOR   CODE   0x0018

      bra   LowInt      ;go to low priority interrupt routine

;******************************************************************************
;High priority interrupt routine
; The high priority interrupt code is placed here.

      CODE

HighInt:
      bcf    PIR1, TMR1IF ; Flag T1 deshabilitado
      BSF   PORTA,4
;      retfie   FAST

;******************************************************************************
;Low priority interrupt routine
; The low priority interrupt code is placed here.
; This code can be removed if low priority interrupts are not used.

LowInt:
      movff   STATUS,STATUS_TEMP   ;save STATUS register
      movff   WREG,WREG_TEMP      ;save working register
      movff   BSR,BSR_TEMP      ;save BSR register

;******************************************************************************
;Start of main program
; The main program code is placed here.

Main:

                CLRF   PORTA    ; Initialize PORTA by
         ; clearing output
         ; data latches
   CLRF   LATA    ; Alternate method
         ; to clear output
         ; data latches
   MOVLW    0Fh    ; Configure A/D
   MOVWF    ADCON1    ; for digital inputs
   MOVWF    07h     ; Configure comparators
   MOVWF    CMCON      ; for digital input
   MOVLW   0CFh
   MOVWF    TRISA       ; Set RA<3:0> as inputs
                            ; RA<5:4> as outputs

   CLRF T1CON    ; Stop Timer1, Internal Clock Source,
         ; T1 oscillator disabled,
         ; prescaler = 1:1
   CLRF TMR1H    ; Clear Timer1 High byte register
   CLRF TMR1L    ; Clear Timer1 Low byte register
   CLRF INTCON    ; Disable interrupts
   CLRF PIE1       ; Disable peripheral interrupts
   CLRF PIR1    ; Clear peripheral interrupts Flags
   
inicio
                BCF PIR1, TMR1IF   ; deshabilitación del flag por software
   MOVLW 0xF0    ; Internal Clock source b'11110000'
         ; with 1:8 prescaler, habilito GIE i PEIE
   MOVWF T1CON    ; Timer1 is stopped and
         ; T1 osc is disabled
   BSF T1CON, TMR1ON    ; Timer1 starts to increment
               
T1_OVFL_WAIT
      BTFSS PIR1, TMR1IF     ;quando PIR1=1 el timer1 se ha desbordado
      GOTO T1_OVFL_WAIT
      BSF   PORTA,5
                    goto inicio
                                end

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Habilitación del TMR1 con pic18F
« Respuesta #3 en: 14 de Junio de 2006, 20:18:24 »
Hola. Te modifique un par de directivas para probarlo, volve a modificarlas a gusto.

Código: ASM
  1. LIST    P=18F4420, F=INHX32 ;directive to define processor and file format
  2.         #include        <P18F4420.INC>    ;processor specific variable definitions
  3.  
  4.  
  5. ;******************************************************************************
  6. ;Reset vector
  7. ; This code will start executing when a reset occurs.
  8.  
  9.         ORG   0x0000
  10.  
  11.         goto   Main      ;go to start of main code
  12.  
  13. ;******************************************************************************
  14. ;High priority interrupt vector
  15.         org     0x8
  16.  
  17.         bra     HighInt      ;go to high priority interrupt routine
  18.    
  19.  
  20. ;******************************************************************************
  21. ;Low priority interrupt vector
  22.         org     0x18
  23.  
  24.         bra     LowInt      ;go to low priority interrupt routine
  25.  
  26. ;******************************************************************************
  27. ;High priority interrupt routine
  28. ; The high priority interrupt code is placed here.
  29.  
  30. HighInt:
  31.         bcf     PIR1, TMR1IF ; Flag T1 deshabilitado
  32.         BSF     PORTA,4
  33.         retfie  FAST
  34.  
  35. ;******************************************************************************
  36. ;Low priority interrupt routine
  37. ; The low priority interrupt code is placed here.
  38. ; This code can be removed if low priority interrupts are not used.
  39.  
  40. LowInt:
  41.         movff   STATUS,STATUS_TEMP   ;save STATUS register
  42.         movff   WREG,WREG_TEMP      ;save working register
  43.         movff   BSR,BSR_TEMP      ;save BSR register
  44.  
  45. ;******************************************************************************
  46. ;Start of main program
  47. ; The main program code is placed here.
  48.  
  49. Main:
  50.  
  51.         CLRF    PORTA    ; Initialize PORTA by
  52.          ; clearing output
  53.          ; data latches
  54.         CLRF    LATA    ; Alternate method
  55.          ; to clear output
  56.          ; data latches
  57.         MOVLW   0Fh    ; Configure A/D
  58.         MOVWF   ADCON1    ; for digital inputs
  59.         MOVWF   07h     ; Configure comparators
  60.         MOVWF   CMCON      ; for digital input
  61.         MOVLW   0CFh
  62.         MOVWF   TRISA       ; Set RA<3:0> as inputs
  63.                             ; RA<5:4> as outputs
  64.  
  65.         CLRF    T1CON    ; Stop Timer1, Internal Clock Source,
  66.          ; T1 oscillator disabled,
  67.          ; prescaler = 1:1
  68.         CLRF    TMR1H    ; Clear Timer1 High byte register
  69.         CLRF    TMR1L    ; Clear Timer1 Low byte register
  70.         CLRF    INTCON    ; Disable interrupts
  71.         CLRF    PIE1       ; Disable peripheral interrupts
  72.         CLRF    PIR1    ; Clear peripheral interrupts Flags
  73.    
  74. inicio
  75.         BCF     PIR1, TMR1IF   ; deshabilitación del flag por software
  76.         MOVLW   0xF0    ; Internal Clock source b'11110000'
  77.          ; with 1:8 prescaler, habilito GIE i PEIE
  78.         MOVWF   T1CON    ; Timer1 is stopped and
  79.          ; T1 osc is disabled
  80.         BSF     T1CON, TMR1ON    ; Timer1 starts to increment
  81.         BSF     PIE1,TMR1IE
  82.         BSF     INTCON,GIE
  83.  
  84.                
  85. T1_OVFL_WAIT
  86.         BTFSS   PIR1, TMR1IF     ;quando PIR1=1 el timer1 se ha desbordado
  87.         GOTO    T1_OVFL_WAIT
  88.  
  89.         BSF     PORTA,5
  90.         goto    inicio
  91.         end

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Habilitación del TMR1 con pic18F
« Respuesta #4 en: 16 de Junio de 2006, 17:50:45 »
Solo quisiera agregar que la prioridad de las interrupciones no se define por el código que uno ubique en 0x0008 o 0x0018, sino mediante el seteo de los registros IPR1, IPR2, IPR3

Es decir si la interrupción del timer1 está en baja prioridad, por más que pongamos el chequeo del flag del timer1 en la rutina de alta prioridad , al ocurrir la interrupción del timer1 irá a 0x0018 y no a 0x0008.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado roger

  • PIC10
  • *
  • Mensajes: 3
Re: Habilitación del TMR1 con pic18F
« Respuesta #5 en: 19 de Junio de 2006, 16:45:48 »
Gràcias a los 2 por vuestra información, de momento aún no lo he probado pero mañana martes lo voy a intentar y a ver como funciona!! tanto si va como si no os informo supongo que a alguien servirá aunque a mi me quede poco tiempoooooo................

Un saludo!!!

Y suerte con lo vuestro

Desconectado gerard

  • PIC10
  • *
  • Mensajes: 13
Re: Habilitación del TMR1 con pic18F
« Respuesta #6 en: 21 de Junio de 2006, 06:28:28 »
Hola

Solo una notita, en este caso y como se comenta se tendría que habilitar el TMR1IP del registro IPR1 para tener la iterrupción de prioridad alta. Pero además supongo que se tendría que habilitar el RCON<7> para habilitar los niveles de prioridad de las interrupciones.............


Si ha servido de algo, suerte!!! y si me equivoco me rectificais que pa esto tamos!!!

Suerte

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Habilitación del TMR1 con pic18F
« Respuesta #7 en: 21 de Junio de 2006, 10:43:38 »
Hola

Solo una notita, en este caso y como se comenta se tendría que habilitar el TMR1IP del registro IPR1 para tener la iterrupción de prioridad alta. Pero además supongo que se tendría que habilitar el RCON<7> para habilitar los niveles de prioridad de las interrupciones.............


Si ha servido de algo, suerte!!! y si me equivoco me rectificais que pa esto tamos!!!

Suerte

Muy buena acotación, es correcto. ;) ;)

Además estoy viendo que el RCON<7> al resetarse el PIC está deshabilitado, es decir en modo compatibilidad de interrupción con los PIC16F por lo cual es necesario ponerlo en 1 desde el código si se quiere usar el nivel de prioridades de interrupción.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything