Autor Tema: pregunta sobre interupcciones  (Leído 2207 veces)

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

Desconectado raptor200

  • PIC10
  • *
  • Mensajes: 39
pregunta sobre interupcciones
« en: 09 de Julio de 2005, 10:28:00 »
Hola a toda la comunidad:

Sonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa Gigante                   Sonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa Gigante                          Sonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa Gigante
Tengo una pregunta para todos y espero que me ayuden:
 tengo la idea deschavetada de hacer un robot con un pic 16f84, he hecho la rutina para que los motores se muevan de acuerdo al mecanismo, (por medio de un retardo de tiempo) pero el problema es que quiero que las entradas del puerto A cuando sean activadas detengan el tiempo de activación o rutina  y una vez que no detecte el sensor continue con la rutina en  la que estaba (en la que se quedóGiño antes de detectar algo en el puerto A, no estoy seguro que se llamen "interrupcciones", mi conocimiento es muy poco pero quiero aprender, les agradezco su gran ayuda y cometarios, ya que no es la primera vez que escribo a este foro y siempre me han ayudado, de antemano gracias por toda su gran ayuda estaré pendiente de cualquier sugerencia que me den  
LloricaLloricaLloricaLloricaLloricaLlorica

GRACIAS  saludos desde Michoacán México


Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: pregunta sobre interupcciones
« Respuesta #1 en: 09 de Julio de 2005, 10:33:00 »
El programa principal se ejecuta tal como es ... cuando una interrupción se produce por cualquiera de los motivos que sopotan los 16f84a, el procesador deja lo que estaba haciendo y se queda por donde iva, atiende a lo que este en la interrupción (en ASM al vector INT que es el 0x04) y cuando termina de ejecutarla esta, sigue por donde iva.

El 84A tiene interrupciones externas en RB0, RB4,5,6 y 7. Así que los sensores que uses conectalos a estos puertos si quieres que puedan probocar interrupciones.
Si juegas contra el mejor, pierdes como los demás.

Desconectado raptor200

  • PIC10
  • *
  • Mensajes: 39
RE: pregunta sobre interupcciones
« Respuesta #2 en: 11 de Julio de 2005, 06:43:00 »
Sonrisa Gigante    Sonrisa Gigante

hola RADON:

gracias por tu respuesta, voy a trabajar en el cambio del pcb que ya había hecho gracias por explicarme lo de las interrupcciones ¿obiamente el puerto A no tiene estas ventajas, verdad?
Perdona la molestia: tienes algún eljercicio de interrupcciones para PIC para programadores de "kinder", ya que no tengo mucha esperiencia he investigado sobre el tema en internet pero si está un poco complicado de entenderle

y aprovechando tu buena fe para ayudarme conoces el IC prog para programar pics, tengo una duda sobre este programa, he programado algunos pics con programas sencillos pero me despliega en la parte inferior una ventana que nunca ha cambiado es la de datos EEprom. ¿Para qué es o que dice o sirve?
Si me pudieras ayudar con esta inquietud te lo voy a agradecer.

VacilandoVacilandoVacilando saludos desde Michoacán México

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: pregunta sobre interupcciones
« Respuesta #3 en: 12 de Julio de 2005, 08:31:00 »
Los datos de la EEPROM del IC-Prog son para grabar esos datos en la EEPROM del PIC. Esta memoria se utiliza para guardar datos no volátiles, ya que si se corta la alimentación no se pierden. Si no vas a utilizar esa memoria, esa ventana te da igual.

Desconectado raptor200

  • PIC10
  • *
  • Mensajes: 39
RE: pregunta sobre interupcciones
« Respuesta #4 en: 14 de Julio de 2005, 06:42:00 »
AvergonzadoAvergonzadoAvergonzadoAvergonzadoGiñohola:

Gracias por la ayuda antoniof y radon sobre las interrupcciones y si entre sus curiosidades tienen algún ejemplo de interrupcciones para un pic 16f84 que pueda comprender se los agradecería

Gracias por tener la buena fe de enseñar a otras personas esto de los pic´s

AvergonzadoAvergonzadoAvergonzadoAvergonzadoAvergonzado                   AvergonzadoAvergonzadoAvergonzadoAvergonzado

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: pregunta sobre interupcciones
« Respuesta #5 en: 14 de Julio de 2005, 07:58:00 »
Esto es lo que encontrado de cuando programaba en ASM, (hace tiempo que lo hago en C), no es lo mejor pero no tengo nada más Llorando

Se trata de un temporizador para la insoladora, va haciendo una cuenta regresiva de un tiempo que se le impone, el programa principal va multiplexando para mostrar el tiempo en 3 displays de 7 segmentos y cuando salta la interrupcione del timer (se desborda) va decrementando una variable que al hacerse 0 en alguna de las siguientes interrupciones hace 1 seg (-mas o menos-).

Por lo que resumo, la temporización se encarga las interrupciones que solo son antendidas cuando desborda, mientras el programa principal hace el multiplexado.

Codigo:
   list   p=16F84A

;*
;* Temporizador insoladora
;* por Daniel González
;*

;*
;* Mapa de memoria
;*

TMR0   EQU   01
OPTION_REG   EQU   01
PCL   EQU   02
STATUS   EQU   03
PORTA   EQU   05
PORTB   EQU   06
INTCON   EQU   0B

REG18   EQU   0C
SEG   EQU   0D
SEGX10   EQU   0E
MIN   EQU   0F
REG1   EQU   10
REG2   EQU   11
REG11   EQU   12
REG12   EQU   13
REG13   EQU   14
REG14   EQU   18
REG15   EQU   17
OLDACUM   EQU   15
NEWSTATUS   EQU   16
RELE   EQU   19


RP0   EQU   5
W   EQU   0
F   EQU   1
Z   EQU   2

#DEFINE   BANCO0   BCF   STATUS,RP0
#DEFINE BANCO1   BSF   STATUS,RP0

;*
;* Comienzo del programa
;*

   ORG   00

   RESET

   GOTO   INICIO

;*
;* Comienzo de la Int
;*

   ORG   04   ; Comienzo de la interrupción

   GOTO   INT

;*
;* Inicio
;*
   
INICIO

;*
;* Configuracion de puertos
;*
   BANCO1
   MOVLW   b"11000"
   MOVWF   PORTA
   MOVLW   b"00000000"
   MOVWF   PORTB   ; Entradas ra3 y ra4,
               ; resto salidas

;*
;* Configuración de las interrupciones
;*

   BANCO0
   BSF   INTCON,7   ; Habilita las int. globalmente

   BANCO1
   MOVLW   b"00000111"
   MOVWF   OPTION_REG
                  ; TMR0 rate como 1:256
                  ; PS asignado a TMR0
                  ; Reloj interno (ciclos de instruccion)
   BANCO0

;*
;* Programa Principal
;*

   CLRF   PORTA   ; Prepara y limpia PORTA
   CLRF   PORTB   ; Prepara y limpia PORTB
   MOVLW   b"10000000"
   MOVWF   RELE
   MOVLW   .18   
   MOVWF   REG18   ; REG18=18
   MOVLW   .0
   MOVWF   MIN   ; MIN = 0
   MOVLW   .0
   MOVWF   SEGX10
   MOVLW   .0
   MOVWF   SEG   ; Carga en todos los reg
            ; de tiempo el valor 0
   
;*
;* Selector de tiempo
;*

MINTAG   CALL   RETARDO50
   CALL   LIBRE
   MOVF   MIN,W
   CALL   DISP
   MOVWF   PORTB
   BSF   PORTA,2   ; Enciende el display min
   NOP
BUCLE1   BTFSC   PORTA,3   ; Si ra3=0 salta
   GOTO   MIN1
   BTFSC   PORTA,4   ; Si ra4=0 salta
   GOTO   SEGX10TAG
   GOTO   BUCLE1

SEGX10TAG   BCF   PORTA,2   ; Apaga el display min
   CALL   RETARDO50
   CALL   LIBRE   
   MOVF   SEGX10,W
   CALL   DISP
   MOVWF   PORTB
   BSF   PORTA,1   ; Enciende el display segx10
   NOP
BUCLE2   BTFSC   PORTA,3   ; Si ra3=0 salta
   GOTO   SEGX101
   BTFSC   PORTA,4   ; Si ra4=0 salta
   GOTO   SEGTAG
   GOTO   BUCLE2

SEGTAG   BCF   PORTA,1   ; Apaga el display segx10
   CALL   RETARDO50   
   CALL   LIBRE
   MOVF   SEG,W
   CALL   DISP
   MOVWF   PORTB
   BSF   PORTA,0   ; Enciende el display seg
   NOP
BUCLE3   BTFSC   PORTA,3   ; Si ra3=0 salta
   GOTO   SEG1
   BTFSC   PORTA,4   ; Si ra4=0 salta
   GOTO   MULTIPLEX
   GOTO   BUCLE3

MULTIPLEX   CALL RETARDO50
   CALL   LIBRE
   GOTO   GO1

;*
;* Incremento de tiempo
;*

MIN1   MOVLW   .9
   SUBWF   MIN,W
   BTFSC   STATUS,Z   ; si MIN=9 no salta
   GOTO   CLRMIN
   INCF   MIN
   CALL   RETARDO50
   GOTO   MINTAG

SEGX101   MOVLW   .5
   SUBWF   SEGX10,W
   BTFSC   STATUS,Z   ; si SEGX10=9 no salta
   GOTO   CLRSEGX10
   INCF   SEGX10
   CALL   RETARDO50
   GOTO   SEGX10TAG

SEG1   MOVLW   .9
   SUBWF   SEG,W
   BTFSC   STATUS,Z   ; si MIN=9 no salta
   GOTO   CLRSEG
   INCF   SEG
   CALL   RETARDO50
   GOTO   SEGTAG

;*
;* Limpia tiempos cuando son 9
;*

CLRMIN   CLRF   MIN
   CALL   RETARDO50
   GOTO   MINTAG

CLRSEGX10   CLRF   SEGX10
   CALL   RETARDO50
   GOTO   SEGX10TAG

CLRSEG   CLRF   SEG
   CALL   RETARDO50
   GOTO   SEGTAG

;*
;* Multiplexado y cuenta atrás
;*   
   
GO1   BTFSC   PORTA,4   ; Si ra4 es 0 salta
   GOTO   CORRE
   BCF   PORTA,1   ; Apaga disp segx10
   BCF   PORTA,2   ; Apaga disp min
   MOVF   SEG, W
   CALL   DISP
   MOVWF   PORTB
   BSF   PORTA,0   ; Enciende disp seg
   CALL   RETARDO3
   BCF   PORTA,0   ; Apaga disp seg
   BCF   PORTA,2   ; Apaga disp min
   MOVF   SEGX10,W
   CALL   DISP   ; Llama a disp
   MOVWF   PORTB
   BSF   PORTA,1   ; Enciende disp segx10
   CALL   RETARDO3
   BCF   PORTA,0   ; Apaga disp seg
   BCF   PORTA,1   ; Apaga disp segx10
   MOVF   MIN, W
   CALL   DISP
   MOVWF   PORTB
   BSF   PORTA,2   ; Enciende disp min
   CALL   RETARDO3
   GOTO   GO1


CORRE

   MOVLW   .39
   MOVWF   TMR0
   BSF   INTCON, 5   ; Hab. int overflow TMR0
   BSF   PORTB,7   ; Activa relé

GO2   BCF   PORTA,1   ; Apaga disp segx10
   BCF   PORTA,2   ; Apaga disp min
   MOVF   SEG ,W
   CALL   DISP
   BTFSC   INTCON,5   ; Si la int desb. TMR0 = 0 salta
   ADDWF   RELE,W
   MOVWF   PORTB
   BSF   PORTA, 0   ; Enciende disp seg
   CALL   RETARDO3
   BCF   PORTA,0   ; Apaga disp seg
   BCF   PORTA,2   ; Apaga disp min
   MOVF   SEGX10, W
   CALL   DISP
   BTFSC   INTCON,5   ; Si la int desb. TMR0 = 0 salta
   ADDWF   RELE,W
   MOVWF   PORTB
   BSF   PORTA,1   ; Enciende disp segx10
   CALL   RETARDO3
   BCF   PORTA,0   ; Apaga disp seg
   BCF   PORTA,1   ; Apaga disp segx10
   MOVF   MIN, W
   CALL   DISP
   BTFSC   INTCON,5   ; Si la int desb. TMR0 = 0 salta
   ADDWF   RELE,W
   MOVWF   PORTB
   BSF   PORTA,2   ; Enciende disp min
   CALL   RETARDO3
   GOTO   GO2

;*
;* Tabla de digitos para el display
;*

DISP   ADDWF   PCL,F

   RETLW   b"01111101"   ; Dígito 0
   RETLW   b"01000001"   ; Dígito 1
   RETLW   b"00111011"   ; Dígito 2
   RETLW   b"01011011"   ; Dígito 3
   RETLW   b"01000111"   ; Dígito 4
   RETLW   b"01011110"   ; Dígito 5
   RETLW   b"01111110"   ; Dígito 6
   RETLW   b"01001001"   ; Dígito 7
   RETLW   b"01111111"   ; Dígito 8
   RETLW   b"01001111"   ; Dígito 9

;*
;* Interrupcion por desbordamiento
;* en el TMR0
;*

INT
   BCF   INTCON,5   ; Deshab. int overflow TMR0
   BCF   INTCON,2   ; Pongo a 0 el flag de TMR0

   MOVWF   OLDACUM
   MOVF   STATUS, W
   BANCO0
   MOVWF   NEWSTATUS

   DECFSZ   REG18,F
   GOTO   GO3

   MOVLW   .0
   ADDWF   SEG,F
   BTFSC   STATUS, Z   ; Comprueba si se activo
                  ; el flag Z, si SEG no era 0 salta
   GOTO   SEG0   ; Salta a SEG0
   DECF   SEG,F
   MOVLW   .18
   MOVWF   REG18
   GOTO   GO3

SEG0   MOVLW   .0
   ADDWF   SEGX10
   BTFSC   STATUS, Z   ; Comprueba si se activo
                  ; el flag Z, si SEGx10 no era 0 salta
   GOTO   SEG0X10
   MOVLW   .18
   MOVWF   REG18
   MOVLW   .9
   MOVWF   SEG
   DECF   SEGX10,F
   GOTO   GO3

SEG0X10   MOVLW   .0
   ADDWF   MIN
   BTFSC   STATUS,Z   ; Comprueba si se activo
                  ; el flag Z, si MIN no era 0 salta
   GOTO   MIN0
   MOVLW   .18
   MOVWF   REG18
   MOVLW   .5
   MOVWF   SEGX10
   MOVLW   .9
   MOVWF   SEG
   DECF   MIN, F
   GOTO   GO3

MIN0   MOVLW   .0
   ADDWF   SEGX10,W
   BTFSS   STATUS,Z   ; Comprueba si SEGX10 tambien es 0
   GOTO   GO3
   MOVLW   .0
   ADDWF   SEG,W
   BTFSS   STATUS,Z   ; Comprueba su SEG tambien es 0
   GOTO   GO3
   GOTO   VUELVE   
   
GO3   MOVLW   .39
   MOVWF   TMR0

   MOVF   NEWSTATUS,W
   MOVWF   STATUS
   SWAPF   OLDACUM,F
   SWAPF   OLDACUM,W

   BSF   INTCON,5   ; Hab. int overflow TMR0
   NOP
VUELVE   RETFIE   ; Regresa de la int

;*
;* Libre Porta
;*

LIBRE   BTFSC   PORTA,3
   GOTO LIBRE
   BTFSC   PORTA,4
   GOTO   LIBRE
   RETURN
;*
;* Retardo de 50 mseg
;*

RETARDO50   movlw   .55      ; 1 set number of repetitions (B)
        movwf   REG12    ; 1 |
PLoop1B   movlw   .181    ; 1 set number of repetitions (A)
        movwf   REG11   ; 1 |
PLoop2B clrwdt              ; 1 clear watchdog
PDelL1B   goto   PDelL2B         ; 2 cycles delay
PDelL2B  
        decfsz  REG11, 1  ; 1 + (1) is the time over? (A)
        goto    PLoop2B    ; 2 no, loop
        decfsz  REG12,  1 ; 1 + (1) is the time over? (B)
        goto    PLoop1B    ; 2 no, loop
PDelL3B goto   PDelL4B         ; 2 cycles delay
PDelL4B clrwdt              ; 1 cycle delay
        return              ; 2+2 Done

;*
;* Retardo 0.3 mseg
;*

RETARDO3   movlw   .1   ; 1 set number of repetitions (B)
      movwf   REG1    ; 1 |
PLoop11 movlw   .73   ; 1 set number of repetitions (A)
        movwf   REG2    ; 1 |
PLoop22 clrwdt  ; 1 clear watchdog
        decfsz  REG2,1   ; 1 + (1) is the time over? (A)
        goto    PLoop22   ; 2 no, loop
        decfsz  REG1,1   ; 1 + (1) is the time over? (B)
        goto    PLoop11   ; 2 no, loop
PDelL11 goto   PDelL22   ; 2 cycles delay
PDelL22   clrwdt  ; 1 cycle delay
        return  ; 2+2 Done

;*
;* END
;*
   END
Si juegas contra el mejor, pierdes como los demás.

Desconectado Micom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 783
RE: pregunta sobre interupcciones
« Respuesta #6 en: 15 de Julio de 2005, 00:03:00 »
Para interrupciones aqui hay una con leds haber si la entiendes. Suerte
http://www.todopic.com.ar/asm/_PRINCIPIANTES/ledpi.txt

El programador GTP USB PLUS es un super programador
GRACIAS dobles amigo SISPIC

Tan solo queda seguir sobreviviendo

Desconectado raptor200

  • PIC10
  • *
  • Mensajes: 39
RE: pregunta sobre interupcciones
« Respuesta #7 en: 23 de Julio de 2005, 14:08:00 »
Sonrisa GiganteSonrisa GiganteSonrisa Gigante

Se los agradezco mucho radon y antoniof voy a intentar esta prueba les platico como me fue hasta pronto y gracias


Muchas risas: D Muchas risas Muchas risas Muchas risas Muchas risas :-


 

anything