Autor Tema: Por Favor! Como puedo comunicar 2 PIC877 por las lineas RC6 y RC7???  (Leído 1795 veces)

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

Desconectado gesteva

  • PIC12
  • **
  • Mensajes: 52
Por Favor! Como puedo comunicar 2 PIC877 por las lineas RC6 y RC7???
« en: 22 de Noviembre de 2004, 16:50:00 »
Gracias por entrar a leer acerca de esta duda. Como puedo resolver esto?

Necesito comunicar dos PIC16F877A por RC6 y RC7 de ambos micros. Esto es lo que he intentado hacer:

En el micro numero 1 he puesto este código:

TRISA = %00011111
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %01000000

BO   VAR    WORD

   ADCON1 = %00000110

inicio:
   if porta.0 = 1 then inicio
   
                SEROUT PORTC.6,2400,["HELLO"]

   GOTO inicio

   End

Y en el micro Numero 2 éste es el código que me da error al compilar justo en la linea donde esta la instrucción Serin:


DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTE
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTE
DEFINE LCD_EBIT 1
DEFINE LCD_LINES 2


TRISA = %00011111
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %01000000

DATO   VAR   BYTE
B0   VAR   BYTE

   ADCON1 = %00000110

serial:

   SERIN PORTC7.0,2400,B0  

      LCDOut $fe, 1                      " Limpia la LCD
      LCDOut $fe, 2                      " Posiciona el cursos en el inicio
      LCDOut                     "Recibiendo Datos"                
      LCDOut $fe,$C0,   "Dato = ",#B0
      Pause 100          

   GOTO serial

   End

Bien, no se si esto es una rebusnada de codigo... quisiera que me ofrecieran algunas ideas de porqué no funciona y en qué estoy mal...???

O también si existe otra forma de comunicar estos dos Micros, pero por el puerto serial de cada uno de ellos...

Gracias de nuevo! Rebotado




Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Por Favor! Como puedo comunicar 2 PIC877 por las lineas RC6 y RC7???
« Respuesta #1 en: 24 de Noviembre de 2004, 19:06:00 »
gesteva,
si es c6, y c7 debe ser conUSART entonces, si es asi,aqui un ejemplo funcional:
-------------------------------------------------------------------------------------------------------
DEVICE 16F877
XTAL = 4
DECLARE LCD_DTPIN PORTA.0
DECLARE LCD_ENPIN PORTB.3
DECLARE LCD_RSPIN PORTA.4
DIM VAR1[11] AS BYTE
DIM VAR2[13] AS BYTE  "<--ARRAY
STR VAR1="RESIVIENDO "
STR VAR2="TRANSMITIENDO" "<--STR
HSERIAL_BAUD = 9600         
HSERIAL_RCSTA = %10010000      
HSERIAL_TXSTA = %00100100      
HSERIAL_CLEAR = ON         
   CLS
    PRINT STR VAR2
   HRSOUT STR VAR114 "<---STR NO NECESARIA SI QUIERES LEER TODA LA STR
   END

---------------------------------------------------------------------------------------------------------
DEVICE 16F877
XTAL = 4
DECLARE LCD_DTPIN PORTA.0
DECLARE LCD_ENPIN PORTB.3
DECLARE LCD_RSPIN PORTA.4
DIM VAR1[11] AS BYTE
HSERIAL_BAUD = 9600         
HSERIAL_RCSTA = %10010000   "  10010000   
HSERIAL_TXSTA = %00100100   "  00100100
HSERIAL_CLEAR = ON         
   
   HRSIN STR VAR1   
   CLS
    PRINT STR VAR1
   DELAYMS 2000

   END
--------------------------------------------------------------------------------------------------------
serout y serin son asincronos pero sinUSART del Micro, aqui un ejemplo con SERIN

--------------------------------------------------------------------------------------------------------
DEVICE 16F877
XTAL = 4
DECLARE LCD_DTPIN PORTA.0
DECLARE LCD_ENPIN PORTB.3
DECLARE LCD_RSPIN PORTA.4
DIM ARRAY[11] AS BYTE             
loop:
   SERIN PORTc.6 , 16780 , P_ERROR , 10000 , T_ERROR , [str Array]
   PRINT CLS ,str Array
   GOTO loop
T_ERROR:
   PRINT CLS , "Fuera de Tiempo"
   GOTO loop
P_ERROR:
   PRINT CLS , "Error Paridad"
   GOTO loop
-------------------------------------------------------------------------------------------------------
DEVICE 16F877
XTAL = 4
DECLARE LCD_DTPIN PORTA.0
DECLARE LCD_ENPIN PORTB.3
DECLARE LCD_RSPIN PORTA.4

loop:SEROUT PORTC.7 , 16780 , [ "!!TODOPIC!!" , 13 ]
delayms 2000
   goto loop
---------------------------------------------------------------------------------------------------------


Espero y te sea de ayuda pana.
Salu2

Desconectado gesteva

  • PIC12
  • **
  • Mensajes: 52
RE: Por Favor! Como puedo comunicar 2 PIC877 por las lineas RC6 y RC7???
« Respuesta #2 en: 25 de Noviembre de 2004, 21:46:00 »
Gracias Lager... te comento que he tratado de compilar el cogigo que me has pasado, pero creo que no estamos hablando del mismo compilador pues me da errores, pero me has dado algunas ideas que me han funcionado muy bien. Hice algunas pruebas y este fue el resultado, envío caracteres cargados en distintas variables (B1, B2, B3 y B4) y las recibo del otro lado visualizandolas en la pantalla LCD. Esto es lo que hice...

En el PIC maestro puse esto (éste recibe los datos y los muestra en la LCD):

DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTE
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTE
DEFINE LCD_EBIT 1
DEFINE LCD_LINES 2

TRISA = %00011111
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %01000000

B0   VAR   BYTE

   ADCON1 = %00000110

serial:

   SERIN PORTC.7 , 9600, B0

ESPERA1:

      LCDOut $fe, 1                           " Limpia la LCD
      LCDOut $fe, 2                           " Posiciona el cursor en el inicio
      LCDOut "Recibiendo Datos"      " escrebe
      LCDOut $fe,$C0,   "Data: ", B0
      Pause 200        " Pausa de 200 milisegundos   

   GOTO serial

                End


En el PIC esclavo puse esto (Este envía los datos):


TRISA = %00011111
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %01000000

B1   VAR    BYTE
B2   VAR    BYTE
B3   VAR    BYTE
B4   VAR    BYTE

B1 = "H"
B2 = "o"
B3 = "l"
B4 = "a"

   ADCON1 = %00000110

inicio:

   if porta.0 = 1 then inicio

   SEROUT PORTC.6 , 9600 , [B1, 0]
   pause 205
   SEROUT PORTC.6 , 9600 , [B2, 0]
   PAUSE 205
   SEROUT PORTC.6 , 9600 , [B3, 0]
   pause 205
   SEROUT PORTC.6 , 9600 , [B4, 0]
   PAUSE 205

   GOTO inicio

   End


Gracias por el impulso... Saludos! Rebotado





Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Por Favor! Como puedo comunicar 2 PIC877 por las lineas RC6 y RC7???
« Respuesta #3 en: 25 de Noviembre de 2004, 22:24:00 »
Gesteva,
Una disculpa pana, efectivamente es para otro compilador,pero me da gusto que hayas sacado SOLO tu problema RebotadoRebotado  , eso es lo importante
Acuerdate que si no quieres escribir letra por letra puedes usar Arrays Sonrisa Gigante

Salu2 pana

Desconectado gesteva

  • PIC12
  • **
  • Mensajes: 52
RE: Por Favor! Como puedo comunicar 2 PIC877 por las lineas RC6 y RC7???
« Respuesta #4 en: 26 de Noviembre de 2004, 05:02:00 »
Arrays??? puedes darme mas detalles al respecto? es decir, si puedo enviar una palabra completa, como puedo hacerlo?

Desde ya Gracias... Rebotado

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Por Favor! Como puedo comunicar 2 PIC877 por las lineas RC6 y RC7???
« Respuesta #5 en: 26 de Noviembre de 2004, 09:28:00 »
Para  eso estamos pana, para tratar de ayudarte.
Los arrays te permiten maneja cadenas de informacion(texto) , aunque la forma en que lo haces le da un efecto visual(palabra por palabra) si solo quieres imprimir un texto completo , los arrays trabajan igual pero todo quedaria en una linea de envio,
definiendo el array:
array as byte [3]
array="Hola"
SEROUT2 PORTC.6 , 84, [str array3]

En la pagina de : www.melabs.com encontraras estos y mas ejemplos, en especifico para serin2 y serout2 esta este:
http://www.melabs.com/resources/samples/pbp/ser2mod.bas

Salu2 pana