Autor Tema: Ayuda, ejercicio de desbordamiento del A4 ( en pic 16f84a)  (Leído 1879 veces)

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

Desconectado TRUEMALKAVIAN

  • PIC10
  • *
  • Mensajes: 10
Ayuda, ejercicio de desbordamiento del A4 ( en pic 16f84a)
« en: 10 de Octubre de 2011, 15:25:26 »
Buenas, como dice el titulo es un ejercicio el cual cuenta los pulsos de entrada de la pata a4 a un octavo , osea por cada 8 pulso suma uno en el timer0.  cuando se desborde el timer0 se supone que manda la interrupcion y suma en uno un punto en la memoria que e denominado "salida" el cual reemplazara el puerto B  en modo de salida para mostrarlos en led en la salida etc etc .... la cuestion es que lo simule en mlap a traves de "stimulus" pero cuando llegua el desbordamiento no se va al vector de interrupcion no se por que . si  me podriar ayudar por favor . aqui le muestro el codigo que escribi y tambien se los adjuntos (todos los archivos que me genero el mlab y el archivo de stimulus , este archivo tiene la diferencia de que el preescaler esta en 1:1 para poder simularlo mas rapido por lo demas esta igual )


****************************************************************************************************************
   LIST  P=16F84A
   #include <P16F84A.inc>
;
    __CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
;---------------------------------------------------------------
   ORG 0X00
   GOTO INICIO
   ORG 0X04
   GOTO INTERRUP
;---------------------------------------------------------------
BANCO00      MACRO
         BCF   STATUS,RP0
         ENDM

BANCO01      MACRO
         BSF   STATUS,RP0
         ENDM
SALIDA       EQU 0X15
;---------------------------------------------------------------
INICIO      
         CLRW
         BANKSEL TRISB      ; PONEMOS EL BANCO B EN MODO DE SALIDA
         CLRF PORTB
         BSF TRISA,0X04      ; SELECIONAMOS AL A4 COMO ENTRADA
         CLRW
         MOVLW 0XB0            ; PREESCALER 100 (32 PULSO PARA CONTAR UNO LO KE KIERE DECIR QUE QUE CUANDO SE DESBORDE SERA POR UN MULTIPLO DE 8  ...( 256/8 =32 ) POR LO QUE CADA DESBORDAMIENTO YA HABRA HECHO UN EFECTO DE 2 AL CUBO))
         MOVWF OPTION_REG    ; HABILITAMOS LAS INTERRUPCIONES GLOBALES ,ACTIVAMOS A A4 QUE DEJE ENTRAR UN PULSO EXTERNO PARA EL CONTEO DEL TIMER0 Y QUE CUENTE DE HIGH -LOW Y AJUSTAMOS EL PREESCALER EN MULTIPLO DE 8 HACIENDO EL EFECTO DE 2^3= 8 EVITANDO ASI LA NECESITAD DE MULTIPLICAR LUEGO
         BANKSEL PORTA
         CLRF SALIDA
MOSTRAR    CLRF PORTB
         CLRW
         MOVFW SALIDA
         MOVWF PORTB         ; DEBIDO A QUE YA EN EL PREESCALER YA MULTIPLICAMOS POR 8  (8 ES EL RESULTADO DE 2 AL CUBO) NO NECESITAMOS HACER MODIFICACIONES A LA INFORMACION
         GOTO MOSTRAR


INTERRUP
      BCF   STATUS,0X04       ; QUITAMOS EL BIT DE INTERRUPCION DEL STATUS PARA PODER SEGUIR
      CLRW               ; PONEMOS 1 EN W Y SE LO SUMAMOS A SALIDA COMO EL PREESCALER YA HIZO LA CONVERSION DEL LA CUENTA NO HACE HACER OTROS CALCULOS NI PROCEDIMIENTOS.
      MOVLW   0X01
      ADDWF  SALIDA,1
      
   ENDI



END
******************************************************************************************************************

gracias de antemano  ;)  :-/  :D  :-/
   
\../......TrueMalkavian...... \../

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Ayuda, ejercicio de desbordamiento del A4 ( en pic 16f84a)
« Respuesta #1 en: 10 de Octubre de 2011, 15:56:50 »
.


Hola. Hay un par errores por los cuales el programa no funciona:
- Para habilitar las interrupciones globales, hay que poner en 1 el bit GIE del registro INTCON, y para habilitar específicamente la interrupción del timer 0, hay que poner en 1 el bit T0IE, del mismo registro (OPTION_REG no tiene nada que ver con el control de interrupciones).
- Dentro de la interrupción es necesario poner en 0 el bit T0IF del registro INTCON, que se activa automáticamente al entrar en la interrupción, porque sino nunca se puede salir de ella.
- La instrucción para retornar de una interrupción es RETFIE, que iría en lugar de ENDI.

Espero que te sirva. Saludos.

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado TRUEMALKAVIAN

  • PIC10
  • *
  • Mensajes: 10
Re: Ayuda, ejercicio de desbordamiento del A4 ( en pic 16f84a)
« Respuesta #2 en: 10 de Octubre de 2011, 16:43:08 »
GRACIASSSSSSSSSSSSSSSS  :-/ :-/ :-/ :-/

me sirvio mucho , ya correji el error (errores )y funciona de lo mejor aqui les dejo el codigo para el que lo quiera usar.


*****************************************************************************************************

   LIST  P=16F84A
   #include <P16F84A.inc>
;
    __CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
;---------------------------------------------------------------
   ORG 0X00
   GOTO INICIO
   ORG 0X04
   GOTO INTERRUP
;---------------------------------------------------------------
BANCO00      MACRO
         BCF   STATUS,RP0
         ENDM

BANCO01      MACRO
         BSF   STATUS,RP0
         ENDM
SALIDA       EQU 0X15
;---------------------------------------------------------------
INICIO      
         CLRW
         BANKSEL TRISB      ; PONEMOS EL BANCO B EN MODO DE SALIDA
         CLRF PORTB
         BSF TRISA,0X04      ; SELECIONAMOS AL A4 COMO ENTRADA
         CLRW
         MOVLW 0X38            ; PREESCALER 100 (32 PULSO PARA CONTAR UNO LO KE KIERE DECIR QUE QUE CUANDO SE DESBORDE SERA POR UN MULTIPLO DE 8  ...( 256/8 =32 ) POR LO QUE CADA DESBORDAMIENTO YA HABRA HECHO UN EFECTO DE 2 AL CUBO))
         MOVWF OPTION_REG    ; HABILITAMOS LAS INTERRUPCIONES GLOBALES ,ACTIVAMOS A A4 QUE DEJE ENTRAR UN PULSO EXTERNO PARA EL CONTEO DEL TIMER0 Y QUE CUENTE DE HIGH -LOW Y AJUSTAMOS EL PREESCALER EN MULTIPLO DE 8 HACIENDO EL EFECTO DE 2^3= 8 EVITANDO ASI LA NECESITAD DE MULTIPLICAR LUEGO
         CLRW
         MOVLW 0XA0
         MOVWF INTCON      ;AQUI HABILITAMOS INTERRUPCIONES GLOBALES Y EL DE A4         
         BANKSEL PORTA
         CLRF SALIDA
MOSTRAR    CLRF PORTB
X         CLRW
         MOVFW SALIDA
         MOVWF PORTB         ; DEBIDO A QUE YA EN EL PREESCALER YA MULTIPLICAMOS POR 8  (8 ES EL RESULTADO DE 2 AL CUBO) NO NECESITAMOS HACER MODIFICACIONES A LA INFORMACION
         GOTO MOSTRAR


INTERRUP
   
      CLRW               ; PONEMOS 1 EN W Y SE LO SUMAMOS A SALIDA COMO EL PREESCALER YA HIZO LA CONVERSION DEL LA CUENTA NO HACE HACER OTROS CALCULOS NI PROCEDIMIENTOS.
      MOVLW   0X01
      ADDWF  SALIDA,1
      BCF   INTCON,0X02       ; QUITAMOS EL BIT DE INTERRUPCION DEL INTCON PARA PODER SEGUIR
      
   RETFIE



END

   
***********************************************************************************************************
\../......TrueMalkavian...... \../