Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

10/05/2008 #1


Interrupcion externa con CCS y proteus
Buenaas!

He estado mirando esto de las interrupciones (la de RB0 en este caso) y no hay manera de que me funcione la interrupcion en proteus. El codigo es el siguiente
Código:
#include <16F873.h>
#device adc=8
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES LVP                      //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use fast_io(b)
#byte PORTB=0x06
#byte PORTA=0x05

#int_ext 
PortB_Interrupt()
{
  output_low(PIN_B3);
  delay_ms(30);
}

void main(void)
{
   set_tris_b(0b00000001);
   PORTB=0;
   enable_interrupts(GLOBAL);  
   enable_interrupts(INT_EXT);
   output_high(PIN_B3);
   while(1)
      sleep();
}
En realidad en la interrupcion deberia de mandar un mensage por puerto serie pero este codigo es para probar. El proteus no hace ni caso a la interrupcion. He probado codigos de internet para ver si hacia algo mal yo pero tampoco han funciona.

Otra preguntilla que tengo es que al acabar la funcion de la interrupcion vuelve al sleep no?

Gracias
12/06/2008 #2


Hola, mi recomendacion es que quites esa funcion sleep, que a mi modo de ver no hace nada.
06/08/2008 #3


Pues nada..
Hola, el codigo que escribiste esta bien, de todas modas lo cheque en proteus y pues si funciona, cuando mando un flanco desendente al pin RB0 se apaga el led que estaba prendido, no tienes ningun problema.

Te recuerdo que normalmente el pin RB0/INT0 funciona con un flanco ascendente, osea cuando pasa la entrada de 0 a 1, y para asegurar ese funcionamiento debes de colocar una resistencia conectada a este pin y a tierra.

Si quieres que tu interrupcion se presente cuando cambie de 1 a 0 entonces debes de poner esta linea de codigo.

bit_clear( INTCON2, 6 );

Yo utilizo la RB0/INT0 para detectar el start_bit de una comunicacion serial.
Cuando llega el start_bit (cambio de 1 a 0 en la linea) salto a la interrupcion y alli leo los 8 bits transmitidos.

He probado esta comunicacion para procesar protocolo modbus en RS-485 industrial y no me ah dado ningun problema. Es una solucion muy eficaz cuando quieres mas de un puerto serie.
29/12/2008 #4


Quiero aportar algo en cuanto a la interrupcion, tu puedes configurar el tipo de flanco con el que la quieres activar de la siguiente manera:

int_ext(H_TO_L)
{
Funciones...
}

si la quieres de alto a bajo.

Si la quieres por flanco de bajada coloca (L_TO_H)
29/12/2008 #5

Avatar de Moyano Jonathan

Yo te recomiendo que pruebes la interrupción en una placa experiemental, yo ya tuve varias experiencias con simulaciones fallidas en proteus y me ha funcionado correctamente en la realidad.
29/06/2011 #6


Moyano Jonathan dijo: Ver Mensaje
Yo te recomiendo que pruebes la interrupción en una placa experiemental, yo ya tuve varias experiencias con simulaciones fallidas en proteus y me ha funcionado correctamente en la realidad.
es verdad, lo acabo de corroborar, en el proteus no anda, en la realidad si. Estoy jugando con un display 16x2 y la interrupcion por la pata rb0:
El programa es muy simple, escribo en el lcd "dormido" y mando el micro a dormir, cuando recibo un pulso por la pata rb0/int, el micro despierta, prende un led y escribe en el lcd "despierto". (estoy usando CCS)
Monte en el proteus y nada.
Monte en experimentor y anda perfecto.
Si bien es la primer interrupcion que pruebo, habria q ver si el proteus anda mal con todas las interrupciones en general (flags, enables, etc), o es un problema puntual con la interrupcion rb0/int., seria una lastima q sea un problema "global de interrupciones" porq todos los proyectos que probe hasta ahora sin interrupciones me anduvieron en proteus. Alguien puede corroborar esto? Igualmente tengo q probar muchas asi q si nadie lo hace, volvere a contarles como me fue

saludos
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.