Autor Tema: DATOS SERIALES  (Leído 2771 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado parsud

  • PIC10
  • *
  • Mensajes: 16
DATOS SERIALES
« en: 27 de Abril de 2006, 12:42:34 »
HOLA AMIGOS DEL FORO, NO SE PORQUE PERO NO PUDE INGRESAR AL FORO A TRAVES DE MI NOMBRE YA REGISTRADO COMO NEOSUD, PERO YA ENTRE COMO PARSUD.

ESTOY LEYENDO LOS DATOS Q SON ENVIADOS DESDE UNA PC A TRAVES DEL PROGRAMA PROCOM PLUS, PARA LO CUAL UTIULIZO UN PIC16F876A CON UN XTAL DE 20MHZ, EL PROGRAMA FUNCIONA BIEN CUANDO SE TRATA DE ENVIAR 1, 2 O 3 CARACTERES A LA VEZ ES DECIR SI ENVIO EL DATO 3 O 45 ESTE LLEGA AL PIC Q EN VERDAD LLEGAN 2 Y 3 DATOS RESPECTIVAMENTE YA Q PRESIONO LA TECLA ENTER PARA Q SE ENVIE Y ESTE CONSTITUYE UN DATO TAMBIEN, HASTA EL PROGRAMA TRABAJA BIEN PERO CUANDO ENVIO DATOS COMO 234 O 6789, EL PIC SOLO LEE LOS 3 PRIMEROS DIGITOS Y LO DEMAS NO LO RECEPCIONA, ES MAS SI DESPUES DE RECIBIR EL TERCER DATO NO LE AGREGO ALGUNAS LINEAS MAS DE LO Q TIENEN PARA LOS 2 PRIMEROS DIGITOS, EL PIC TERMINARIA NO FUNCIONANDO LA RECEPCION AUNQUE EL PIC SIGUE HACIENDO LO DEMAS SIN RECEPCIONAR LOS DATOS Q SE LE ENVIA.

ESTE PROBLEMA ME ESTA CAUSANDO DOLORES DE CABEZA Y NECESITO SOLUCIONARLO LO MAS PRONTO POSIBLE.
ACUDO A UDS YA Q DEBEN HABER PASADO POR SITUACIONES PARECIDAS, LES AGRADECERIA  SI PUEDEN AYUDARME EN ESTE TEMA.

ESTE ES EL PROGRAMA Q HE REALIZADO:


 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
;9600 BAUDIOS
;EL PROCOM PLUSS ESTA CONFIGURADO PARA Q TABAJE A ESA VELOCIDAD Y SOLO LO UTILIZO
;PARA ENVIAR DATOS AL PIC


      LIST   P=16F876A,   W=1
      INCLUDE   "P16F876A.INC"

      CBLOCK   0X20
DELAY,TEMPORAL1,TEMPORAL,DIR_EE,VECES,TEMPORAL2
TEMPORAL3,TEMPORAL4,ESPIA,B_PORTA,VECES2

      ENDC


      ORG   0X00

      GOTO   INICIO
      ORG   0X04
      GOTO   RECEPCION
      ORG   0X05

INICIO

         BSF   STATUS,RP0
         BCF   STATUS,RP1
         MOVLW   B'0110'
         MOVWF   ADCON1
         CLRF   TRISA
         CLRF   TRISB
         MOVLW   B'10000000'
         MOVWF   TRISC   
         MOVLW   B'0010'
         MOVWF   OPTION_REG
         MOVLW   .129
         MOVWF   SPBRG
         MOVLW   B'01101101'
         MOVWF   TXSTA
         MOVLW   B'11000000'
         MOVWF   INTCON
         MOVLW   B'00100000'
         MOVWF   PIE1
         BCF   STATUS,RP0
         BCF   STATUS,RP1


         MOVLW   B'11010000'     
         MOVWF   RCSTA

         CLRF   PORTB
         CLRF   VECES
         CLRF   VECES2


EMPEZAR
         BCF   STATUS,RP0
         BSF   STATUS,RP1

         MOVLW   B'11000000'
         MOVWF   INTCON
         MOVLW   B'00100000'
         MOVWF   PIE1

         BCF   STATUS,RP1

         MOVLW   0XEF
         MOVWF   PORTB
         CALL   RETARDO_1S         

         GOTO   EMPEZAR



;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
RECEPCION
      INCF    VECES2,1
      MOVF   VECES2,0
      XORLW   .1
      BTFSS   STATUS,Z
      GOTO   RX2?
      GOTO   RX1

RX2?                   MOVF   VECES2,0
      XORLW   .2
      BTFSS   STATUS,Z
      GOTO   RX3?
      GOTO   RX2

RX3?                   MOVF   VECES2,0
      XORLW   .3
      BTFSS   STATUS,Z
      GOTO   RX4?
      GOTO   RX3

RX4?                   MOVF   VECES2,0
      XORLW   .4
      BTFSS   STATUS,Z
      GOTO   SALIR
      GOTO   RX4

RX1      BTFSS   PIR1,5
      GOTO   RX1
      NOP

      MOVF   RCREG,0
      MOVWF   TEMPORAL1
      MOVLW   0XBF
      MOVWF   PORTB
      CALL    RETARDO_1S
      BCF   PIR1,RCIF
      RETFIE


RX2      BTFSS   PIR1,5
      GOTO   RX2
      NOP

      MOVF   RCREG,0
      MOVWF   TEMPORAL2
      MOVLW   0X86
      MOVWF   PORTB
      CALL    RETARDO_1S
      BCF   PIR1,RCIF
      RETFIE

RX3      BTFSS   PIR1,5
      GOTO   RX3
      NOP
;.....................................................................................................
;TUVE Q PONER ESTAS LINEAS DE PROGRAMA SINO CUANDO ENVIO 4 DATOS LA RECEPCION QUEDA INHIBIDA AUNQUE EL
;PROGRAMA SIGUE FUNCIONANDO
      BCF   RCSTA,OERR
      BCF   RCSTA,CREN


      BCF   RCSTA,CREN
      MOVF   RCREG,0
                           
      MOVWF   TEMPORAL3
      CLRF   RCSTA
      CLRF   TXREG
   
      BSF   STATUS,RP0
      BCF   STATUS,RP1
      CLRF   TXSTA
      MOVLW   B'01101101'
      MOVWF   TXSTA
      BCF   STATUS,RP0
      MOVLW   B'11010000'     
      MOVWF   RCSTA
;.....................................................................................................
;.....................................................................................................


      MOVF   RCREG,0
      MOVWF   TEMPORAL3
      MOVLW   0X87
      MOVWF   PORTB
      CALL    RETARDO_1S
      BCF      PIR1,RCIF
      RETFIE

RX4      BTFSS   PIR1,5
      GOTO   RX4
      NOP

      MOVF   RCREG,0
      MOVWF   TEMPORAL4
      MOVLW   0XE6
      MOVWF   PORTB
      CALL    RETARDO_1S
SALIR                   BCF   PIR1,RCIF
      CLRF   VECES2
      RETFIE








      

RETARDO_1MSP0   
         MOVLW   .5
         MOVWF   DELAY
BUCLE2P0   
         CLRF   TMR0
BUCLE1P0   
         MOVLW   .10
         SUBWF   TMR0,0
         BTFSS   STATUS,Z
         GOTO   BUCLE1P0
         DECFSZ   DELAY,1
         GOTO   BUCLE2P0
         RETURN



RETARDO_1S
         BSF      STATUS,RP0
         MOVLW   B'0101'
         MOVWF   OPTION_REG
         BCF      STATUS,RP0
      
         MOVLW   .250
         MOVWF   DELAY
SALTO2A      
         CLRF   TMR0
SALTO1A   
         MOVLW   .180
         SUBWF   TMR0,0
         BTFSS   STATUS,Z
         GOTO   SALTO1A
         DECFSZ   DELAY,1
         GOTO   SALTO2A
      
         BSF   STATUS,RP0
         MOVLW   B'0010'
         MOVWF   OPTION_REG
         BCF   STATUS,RP0

         RETURN

RETARDO_1S_
         BSF   STATUS,RP0
         MOVLW   B'0101'
         MOVWF   OPTION_REG
         BCF   STATUS,RP0
      
         MOVLW   .63
         MOVWF   DELAY
SALTO2A_   
         CLRF   TMR0
SALTO1A_
         MOVLW   .13
         SUBWF   TMR0,0
         BTFSS   STATUS,Z
         GOTO   SALTO1A_
         DECFSZ   DELAY,1
         GOTO   SALTO2A_
      
         BSF   STATUS,RP0
         MOVLW   B'0010'
         MOVWF   OPTION_REG
         BCF   STATUS,RP0

         RETURN      

         END

ESPERO PUEDAN AYUDARME CON UN EJEMPLO Q HAYAN HECHO, NECESITO Q PUEDA RECIBIR DATOS COMO: M23456736 O HOLA, MASTER, ESCLAVO, RUYGFJKNGNDKL,ETC

SALUDOS


« Última modificación: 27 de Abril de 2006, 12:58:19 por parsud »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: DATOS SERIALES
« Respuesta #1 en: 27 de Abril de 2006, 15:12:30 »
Hola.
         MOVLW   B'01101101'
         MOVWF   TXSTA

Estas utilizando 9 bits de recepcion(bit 6=bit de paridad) Cuidado con esto..Si estas usando esta configuracion, asegura que el programa de PC envie el bit de paridad(noveno bit), sino se te va a producir una desincronizacion en la recepcion de datos.

    MOVF   RCREG,0
      MOVWF   TEMPORAL1
      MOVLW   0XBF
      MOVWF   PORTB
      CALL    RETARDO_1S

Mire a simple vista el programa, y esta parte puede ser conflictiva.Estas llamando a un retardo de 1 segundo luego de leer el dato.Si el programa de PC sigue enviando los restantes datos mientras el programa esta dentro de RETARDO_1S, el buffer se desborda, y comenzaras a perder los datos...

Otra cosa: ¿como estas enviando los datos desde el programa de PC? ¿como byte o como caracter? un dato como 6789 enviado como byte tendria una longitud de 2 bytes, mientras que enviado como caracter, su longitud seria de 4 bytes.

Exitos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado parsud

  • PIC10
  • *
  • Mensajes: 16
Re: DATOS SERIALES
« Respuesta #2 en: 29 de Abril de 2006, 02:37:38 »
GRACIAS POR SU RESPUESTA, ES ALGO Q TENDRE Q REVIZAR, YA ESTARE COMENTANDOLE AL RESPECTO COMO ME FUE.

CON RESPECTO A LO Q ES COMUNICACION SERIAL DE PC A PIC, TENGO DOS TARJETAS IGUALES Q RECEPCIONAN DATOS ENVIADOS DESDE UN PROGRAMA HECHO EN VISUAL BASIC, ESTE PROGRAMA EN VISUAL BASIC PERMITE ENCENDER UNOS LEDS EN CADA MODULO, UNO DE LOS MODULO LO ROTULO COMO ESCLAVO1 Y EL OTRO COMO ESCLAVO 2, ENTONCES CADA VEZ Q EN PROGRAMA DEL VB SELECCIONO EL ESCLAVO 1 LOS DATOS SON RECEPCIONADOS POR AMBAS TARJETAS PERO SOLO UNO DE ELLOS ACTIALIZA SUS LEDS DEPENDIENDO DEL VALOR Q SE ENVIE, DE FORMA SIMILAR ES CON EL OTRO ESCLAVO, LAS TARJETAS FUNCIONAN BIEN CUANDO ESTA LA PC Y UNO DE LOS ESCLAVOS, PERO CUANDO CONECTO LOS DOS ESCLAVOS AL PUERTO SERIE EL DATO LLEGA A AMBAS TARJETAS PERO SOLO UNO DE ELLOS ACTUALIZA SUS LEDS CUANDO PREVIAMENTE SE LE HA SELECCIONADO MIENTRAS Q CUANDO SELECCIONO EN VB EL OTRO MODULO ESTE NO ACTUALIZA NADA.
MI PREGUNTA ES: ES POSIBLE EN RS232 HACER ESTO DE CONECTAR DOS TARJETAS A TRAVES DEL PUERTO SERIAL O SE ESTA SOBRECARGANDO EL PUERTO.

SE PUEDE HACER UNA INTERFACE PARA SOLUCIONAR DE ALGUNA MANERA ESTE PROBLEMA.

EL PROGRAMA EN EL PIC NO SOLO RECEPCIONA EL DATO SINO Q TAMBIEN LO ENVIA A LA PC PARA Q EL PROGRAMA EN VB ACTUALISE SUS CARGAS.

EL PROGRAMA FUNCIONA PERFECTO SI SOLO LE CONECTO UN ESCLAVO PERO CON LOS DOS SOLO RECEPCIONA BIEN AQUEL ESCLAVO Q PRIMERO RECIBE EL DATO PERO PARECE Q NO LO ENVIA DE VUELTA A LA PC YA Q EL VB NO ACTUALIZA SUS CARGAS.

AGRADECIA SI ME PUEDEN AYUDAR CON ESTE DILEMA.

YA LES ESCRIBIRE PARA COMENTARLES COMO ME FUE CON EL PROGRAMA ACTERIOR.

SALUDOS

Desconectado JavisusII

  • PIC12
  • **
  • Mensajes: 79
Re: DATOS SERIALES
« Respuesta #3 en: 02 de Mayo de 2006, 18:23:18 »
Hola parsud, he leído tu post y en fín no quiero entrar donde no me llaman pero:

yo primero me aseguraría si utilizas un activex en visual de que está por ejemplo
en 19200,8,n,1 sin protocolo (por ejemplo)

Yo utilizo normalmente el 18F8720 y ultimamente el dsPIC 30F6014, así que no
puedo aydarte demasiado la verdad pero, yo lo que haría es un pequeño programa de
pruebas, muy muy pequeño.
Y por último vigila el típico error de principiantes:
  Haz una subrutina del tipo MIraroverrun()
  bcf RCSTA,CREN
  bsf RCSTA,CREN
   (esto último quita el error) este error inhibe el buffer.
 :(


Xavi (Barcelona)