Autor Tema: Problema con Sincornicacion en 485  (Leído 1252 veces)

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

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Problema con Sincornicacion en 485
« en: 24 de Febrero de 2010, 22:05:35 »
Estoy trabajando con la red 485 y solo tengo un pequeño detalle con el pic Slave

Pic Maestro
Código: C
  1. #include <18f4550.h>
  2. #fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO
  3. #use delay (clock=4M)
  4. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7))
  5. #use standard_io (a)
  6. #use standard_io (b)
  7. #use standard_io (d)
  8. #use standard_io (e)
  9. #BYTE TRISA=0X85
  10. #BYTE PORTA=0X05
  11. #use standard_io (b)
  12. char in,dato,de,un;
  13.  
  14. #int_RDA
  15. RDA_isr()
  16. {
  17.  in=getc();
  18. }
  19.  
  20. void recepcion()
  21. {
  22.   de=in&0xf0;
  23.   un=in&0x0f;
  24.       switch(de)
  25.       {
  26.          case 0x00:
  27.          output_a(0xc0);
  28.          break;
  29.          case 0x10:
  30.          output_a(0xf9);
  31.          break;
  32.          case 0x20:
  33.          output_a(0xa4);
  34.          break;
  35.          case 0x30:
  36.          output_a(0xb0);
  37.          break;
  38.          case 0x40:
  39.          output_a(0x99);
  40.          break;
  41.          case 0x50:
  42.          output_a(0x92);
  43.          break;
  44.          case 0x60:
  45.          output_a(0x82);
  46.          break;
  47.          case 0x70:
  48.          output_a(0xf8);
  49.          break;
  50.          case 0x80:
  51.          output_a(0x80);
  52.          break;
  53.          case 0x90:
  54.          output_a(0x90);
  55.          break;
  56.          }
  57.         switch(un)
  58.       {
  59.          case 0x00:
  60.          output_d(0xc0);
  61.          break;
  62.          case 0x01:
  63.          output_d(0xf9);
  64.          break;
  65.          case 0x02:
  66.          output_d(0xa4);
  67.          break;
  68.          case 0x03:
  69.          output_d(0xb0);
  70.          break;
  71.          case 0x04:
  72.          output_d(0x99);
  73.          break;
  74.          case 0x05:
  75.          output_d(0x92);
  76.          break;
  77.          case 0x06:
  78.          output_d(0x82);
  79.          break;
  80.          case 0x07:
  81.          output_d(0xf8);
  82.          break;
  83.          case 0x08:
  84.          output_d(0x80);
  85.          break;
  86.          case 0x09:
  87.          output_d(0x90);
  88.          break;
  89.            
  90.     }
  91. }
  92.  
  93. void main()
  94. {
  95.   bit_clear(TRISA,0);
  96.   port_b_pullups (true);
  97.   enable_interrupts(INT_RDA);
  98.   enable_interrupts(GLOBAL);
  99.  for(;;){
  100.    output_low(PIN_E2);
  101.    dato=input_b();
  102.    if(input(PIN_e0)==1){
  103.      output_high(PIN_E2);
  104.      putc(dato);
  105.      delay_ms(100);
  106.      output_low(PIN_E2);
  107.      recepcion();
  108.      }
  109.    }
  110. }

Esclavo
Código: C
  1. #include <18f2550.h>
  2. #FUSES NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,NOFCMEN,NOIESO,XT
  3. #use delay(clock=4M)
  4. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
  5. //------------ Pines del LCD ---------------------//
  6. #define LCD_E     PIN_C0
  7. #define LCD_CK    PIN_C1  
  8. #define LCD_DAT   PIN_C2
  9. //--------------------------------------------------//
  10. #include "lcd3.c"
  11. #BYTE TRISA=0X85
  12. #BYTE PORTA=0X05
  13. #use standard_io (b)
  14. char in,dato;
  15. #int_RDA
  16. RDA_isr()
  17. {
  18.  in=getc();
  19.  
  20.  }
  21. void main() {
  22.   port_b_pullups (true);
  23.   bit_clear(TRISA,0);
  24.   lcd_init();
  25.   enable_interrupts(INT_RDA);
  26.   enable_interrupts(GLOBAL);
  27.   output_low(PIN_C4);
  28. for (;;) {
  29.      if(kbhit()){
  30.      output_high(PIN_C4);
  31.      dato=input_b();
  32.      lcd_gotoxy(1,1);
  33.      printf(lcd_putc,"recibiendo=%c",in);
  34.      lcd_gotoxy(1,2);
  35.      printf(lcd_putc,"Enviando=%c",dato);
  36.      putc(dato);
  37.      output_low(PIN_C4);
  38.       }
  39.    }
  40. }
el detalle radica en que tengo que enviarle 4 datos y hasta ese momento me contesta cuando se supone que esta por interrupcion lo cual deveria contestarme despues de que le llega el dato
« Última modificación: 24 de Febrero de 2010, 22:16:33 por darck_khronos »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Problema con Sincornicacion en 485
« Respuesta #1 en: 24 de Febrero de 2010, 22:25:27 »
Ya tienes un tema abierto, considera seguirlo ahí.

http://www.todopic.com.ar/foros/index.php?topic=29593.msg245990#msg245990


 

anything