Autor Tema: sdcc pic12f675 comportamiento interrupcion problema  (Leído 1636 veces)

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

Desconectado gato_hexadecimal

  • PIC10
  • *
  • Mensajes: 7
sdcc pic12f675 comportamiento interrupcion problema
« en: 08 de Febrero de 2017, 20:51:52 »
Hola:

Junto con saludarles,    expongo este Mi dilema:

Pasa que en assembler los pics aparentemente me andaban bien (realicé cosas simples)

Pero decanté por C   (sdcc).

Realicé un programa que hace parpadear un led verde durante el la función main(),,  mientras un led rojo que copia el estado de INTF  permanece apagado

Cuando presiono un botón,   debiera saltar al método de interrupción,  apagar el led verde y prender el rojo (copiando de INTF)  y luego apagar el rojo (copiando INTF)   y retornar al main()....

EL asunto es que cuando ejecuto el programa en el pic,     lo primero que hace es ejecutar la función de interrupción y luego el main...   cuando presiono el botón,   con suerte se ejecuta una vez mas la interrupción y luego ya nunca mas,   por mas que presione el botón....  Solo sigue eternamente ejecutando el While del main...

Este es el programa:

¿que estoy configurando mal en los GPIO (puertos) ?  según el SDCCman.pdf    la declaración de la función de interrupción está correcta.


#include <pic12f675.h>
#include <stdint.h>

static __code unsigned long int __at (0x2007) config = _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _CP_OFF & _CPD_OFF;

unsigned long int conteo;

void delay(unsigned long int);  //pre declaracion de un metodo.


void Intr(void) __interrupt 0
{
    GP5 = 0;                   //Led  verde que solo enciende en el main()
   
    GP4 = INTF;                //Led rojo que permite ver el flag de INTE
    delay(20000);              //espero un poco... solo por comodidad visual
     INTF = 0;                 //apago el flag de INTE
    GP4 = INTF;                //muestro el estado del flag de INTE  con led rojo

}



void main(void)
{
TRISIO = 0;
INTF=0;
INTE=1;
GIE=1;
INTEDG = 0; 
ANSEL = 0;     //deshabilitar entradas analogicas
CMCON = 0x07;  //apago el comparador (por si a caso)

 GP4 = INTF;  //muestro el estado del flag de INTE  con led rojo (debe estar apagado)

   while ( 1 )
   {
      
   GP5 =  GP5 ^ 1;      // bandera led verde parpadeant que indica que estoy en el main          GP5 = (GP5 XOR 1)
   
   delay(10000);

   }

}


void delay(unsigned long int valor)
    {
      conteo = 0;

        while ( conteo < valor )
      {
      
         conteo++;
      }
    }
   





Desconectado gato_hexadecimal

  • PIC10
  • *
  • Mensajes: 7
Re:sdcc pic12f675 comportamiento interrupcion problema
« Respuesta #1 en: 08 de Febrero de 2017, 22:32:57 »
Solucionado !!!!!  cambié el registro TRISIO   a    0x04      (0000 0100 )     cosa que el pin GP2  quede como entrada  !

Solo eso era.   Espero a alguien le sirva  ;-)


 

anything