Autor Tema: RB0/INT Pic16f88 y pbp "interrupcion"  (Leído 13746 veces)

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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: RB0/INT Pic16f88 y pbp "interrupcion"
« Respuesta #30 en: 01 de Mayo de 2007, 14:39:01 »
Código: [Seleccionar]
'PROGRAMA PARA PRACTICAR CON INTERRUPCIONES EXTERIORES DEL PIN RB0
'On Interrupt - Interrupts in BASIC
'Turn LED on.  Interrupt on PORTB.0 (INTE) turns LED off.
'Program waits .5 seconds and turns LED back on.
'-------------------------------------------------------------------
'Define SIMULATION_WAITMS_VALUE = 1  'ignora los Waitms
'-------------------------------------------------------------------
Symbol led = PORTB.7  'reasigno nombre al portb.7
ANSEL = %00000000  'los pin I/O digitales
CMCON = 0x07  'comparador a off
OSCCON = 0x7e  'set intrc To 8mhz, se usara reloj interno a 8Mhz
TRISB.7 = 0  'declaro portb.7 como salida
TRISB.0 = 1  'declaro portb.0 como entrada
OPTION_REG = 0x7f  'Enable PORTB pullups
INTCON = 0x90  'Enable INTE interrupt
'-------------------------------------------------------------------
main:
High led  'Turn LED on
Goto main  'Do it forever
End                                               
'Interrupt handler
On Interrupt  'Define interrupt handler, disable interrupt
Low led  'If we get here, turn LED off
WaitMs 500  'Wait 0.5 Seconds
INTCON.1 = 0  'Clear interrupt flag
Resume  'Return to main program, enable interrupt

Nada amigos, el programa funciona perfectamente en la EBasic, no me funciono al principio por un error en los fuses.
« Última modificación: 01 de Mayo de 2007, 14:53:03 por dogflu66 »
Saludos desde Granada, España.

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
Re: RB0/INT Pic16f88 y pbp "interrupcion"
« Respuesta #31 en: 04 de Mayo de 2007, 00:48:55 »
colegas del foro si usan interupcion por soft estan perdiendo mucho mejor por hardware y aca les dejo una plantilla
si son tercos y les gusta el on interrupt no usen pause en los dos sitios pues el pbp se loquea pues para las pauses usa un regiastro interno que si no guardadn su ubicacion anterior me refiero a el pc y esa nota regresa y cae en un limbo bueno aca les dejo para que acoplen a su circuito es para un 16f84 ustedes acoplenlo a su pic funciona igual de las mil maravillas
   
    W_GUARDA   Var   Byte    SYSTEM 'SALVO LA LOCACION DEL REG W
   S_GUARDA   Var   Byte    SYSTEM 'SALVO LA LOCACION DEL REG W
   P_GUARDA   Var   Byte    SYSTEM 'SALVO LA LOCACION DEL REG W
   R0_GUARDA   VAR BYTE   
   R1_GUARDA   VAR BYTE   
   
   
   

    Define    OSC      4 'FRECUENCIA DEL CRISTAL

   Define   INTHAND INTERRUPCIONCITA   'RUTINA PARA INTERRUPCION EN ASM
   I VAR BYTE
   TRISA=0
    TRISB=%00000001
    PORTB=0
    PORTA=0
   



Goto SALTOINTERRUPCION   ' Jump over the interrupt handler


Asm
INTERRUPCIONCITA
   
   
   Movwf   W_GUARDA
   Swapf   STATUS,w
   Clrf   STATUS
   Movwf   S_GUARDA
   Movf   PCLATH,w
   Movwf   P_GUARDA
   
ENDASM   
'ESTE PEQUEÑIN ES MI PROGRAMA DE INTERRUPCION
R0_GUARDA=R0   'R0 Y R1 ES UN REGISTRO INTERNO , QUE ENCONTRE EN UN ARCHIVO DE
                    'EXTENSION .RAM PARA LOS DE 14 BITS ,PBPPIC14.RAM     
R1_GUARDA=R1
   
   
   PORTB=255
   pause 1000
   PORTB=0
   PAUSE 1000
   PORTB=255
   pause 1000
   PORTB=0

R0=R0_GUARDA
R1=R1_GUARDA

   
   INTCON.1=0  'PONGO EL FLAG DE INTER EXTERN A CERO
          'SI PONGO UNN REGISTRO COMO PAUSE EN LA INTERRUPCION
          'AL REGRESAR SE ME CUELGA TODO POR TANTO NO PONER PAUSE EN
          'LA INTERRUPCION
   
ASM
     
    Movf   P_GUARDA,w   ; Restore PCLATH register
   Movwf   PCLATH
   Swapf   S_GUARDA,w   ; Restore STATUS register         
   Movwf   STATUS
   Swapf   W_GUARDA,f
   Swapf   W_GUARDA,w   ; Restore W register
   Retfie   ; Context restore and exit interrupt maco
Endasm

' ** THE MAIN PROGRAM STARTS HERE **

SALTOINTERRUPCION:
   INTCON.7=0   'PONE A CERO LAS INTERRUPCIONES
    OPTION_REG =%10000111
    INTCON.4=1
    INTCON.7=1 'HABILITO INTERRUPCIONES GENERALES
   
'ACA EMPIEZO EL PROGRAMA PRINCIPAL
'EMPEZARA A PARPADEAR EL PUERTOA.0

   
INICIO:   
    PORTA.0=1            
   PAUSE 500            
    PORTA.0=0         
   PAUSE 500      
   Goto INICIO            



Desconectado Eyedol

  • PIC16
  • ***
  • Mensajes: 129
Re: RB0/INT Pic16f88 y pbp "interrupcion"
« Respuesta #32 en: 06 de Octubre de 2007, 19:04:23 »
Saludos a todos los que ayudaron con este tema que habia quedado abandonado por no haber conseguido solucion.... Pues bien yo mismo la consegui... para refrecar el problema consistia en que las interrupciones con un PIC16f88 simulado en Proteus isis 6.9 no funcionaba y se pensaba que el problema era el codigo. el cual era el siguiente:

led var portb.7
ANSEL = %00000000  'los pin I/O digitales, % en bin
CMCON = $07  'comparador a off, 0x en hex
OSCCON = $7e  'set intrc To 8mhz, se usara reloj interno a 8Mhz
TRISB.7 = 0  'declaro portb.7 como salida
TRISB.0 = 1  'declaro portb.0 como entrada, 0-1 activa interrupcion
OPTION_REG = $7f  'Enable PORTB pullups
INTCON = $90  'Enable INTE interrupt

On Interrupt Goto myint ' Define interrupt handler
        INTCON = $90            ' Enable INTE interrupt

loop:   High led                ' Turn LED on
        Goto loop               ' Do it forever


' Interrupt handler
        Disable                 ' No interrupts past this point
myint:  Low led                 ' If we get here, turn LED off
        Pause   500             ' Wait .5 seconds
        INTCON.1 = 0            ' Clear interrupt flag
        Resume                  ' Return to main program
        Enable

Pues este codigo funciona perfectamente ya lo comprobe la NUEVA version 7 de PROTEUS ISIS no presenta fallas con este codigo asi que era un problema con mi vieja version ya que simplemente utilice el codigo y el mismo montaje y funciona sin error alguno. 

Espero que perdonen el haber abandonado el tema es que no hallaba solucion y recien fue que la encontre... Espero que los que sufran este mismo problema ya encuentren solucion con todo lo que aqui se hablo.  :lol: :lol: :-/ :-/ :-/


 

anything