Autor Tema: interrupcion puerto serie  (Leído 2595 veces)

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

ademucero2002

  • Visitante
interrupcion puerto serie
« en: 27 de Marzo de 2006, 13:56:00 »
Hola amigos estoy tratando de hacer una conexión rs232 puedo enviar bien los datos pero cuando trato de hacer una interrupción para leer el buffer del pic todo se desvarajusta ni lee ni escribe aqui les pongo el programa haber si alguien me puede hechar una mano muxas gracias

#include <16F877A.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 NODEBUG                  //No Debug mode for ICD
#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

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)


#int_RDA
#include <ctype.h>
#include <string.h>

int const lenbuff=64;
int addcbuff(char c);
void echos (char c);

char rcvchar=0x00;
int xbuff=0x00;
char cbuff[lenbuff];

//RDA_isr()
void serial_isr()
{
rcvchar=0x00;
if (kbhit())
   {
   rcvchar=getc();
   addcbuff(rcvchar);
   putc (rcvchar);
   }
}

int addcbuff (char c)
   {
   cbuff[xbuff++]=c;
   if (xbuff>lenbuff)
   xbuff=lenbuff;
   }

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(VREF_LOW|-2);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   while (true)
   {
   printf("haciendo tiempo
"Giño;
   delay_ms(1000);
   enable_interrupts(int_rda);                   // Habilita Interrupción RDA

   enable_interrupts(global);                    // Habilita interrupciones

   }
}

le he dado miles de vueltas pero no encuentro el error un saludo

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
RE: interrupcion puerto serie
« Respuesta #1 en: 27 de Marzo de 2006, 14:09:00 »
Mueve  #int_rda justo encima de void serial_isr()

Codigo:


#int_rda
void serial_isr(){
   rcvchar=0x00;
   if (kbhit()){
      rcvchar=getc();
      addcbuff(rcvchar);
      putc (rcvchar);
   }
}




Prueba y dime.


Nota: Si escribes (sin espacios) [ c o d e ] antes de empezar tu código en el post
y (sin espacios) [ / c o d e ] despues de él, te aparecera tu código en el mensaje
mucho mas bonito y sobre todo mucho mas fácil de leer para todos.


Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

ademucero2002

  • Visitante
RE: interrupcion puerto serie
« Respuesta #2 en: 27 de Marzo de 2006, 14:45:00 »
Muchas gracias compañero en lo de "etiquetar" el codigo tienes mucha razón y lo siento pero soy novato jejeejej para la proxima ya lo se tu correción funciona a las mil marabillas haber si puedo continuar que llevaba bastante tiempo atascadillo con esto venga muchas gracias Giño

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
RE: interrupcion puerto serie
« Respuesta #3 en: 27 de Marzo de 2006, 14:55:00 »
Venga, Ademucero, suerte en tu singladura Muchas risas Muchas risas Muchas risas

Solo comentar que la función que vaya exactamente detrás del #int_XXX es la que se
va a ejecutar al saltar la interrupción XXX correspondiente. Lo que hace el compilador
es dirigir el vector de interrupción a la dirección de memoria donde empieza dicha
función.

Al tener tú el #int_rda justo antes de un include vayas tú a saber qué era lo que
se estaba ejecutando al producirse la interrupción. Cualquier cosa era posible.


Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania


 

anything