Autor Tema: comunicacion serial por sof en 16f877a  (Leído 3609 veces)

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

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re:comunicacion serial por sof en 16f877a
« Respuesta #15 en: 31 de Marzo de 2016, 13:04:51 »
si me funciona de forma independiente pero no los dos a la ves

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:comunicacion serial por sof en 16f877a
« Respuesta #16 en: 31 de Marzo de 2016, 18:52:07 »
si me funciona de forma independiente pero no los dos a la ves

Y te lo dije.. Mientras uno esta recibiendo se queda encerrado en RS232.xxxxx como se llame hasta recibir la trama por completo, entonces no se esta ejecutando RS32.xxxx, Lo cual es imposible que ambos funcionen los 2 a la ves, Y ya te presente algunas soluciones. Como usar interrupciones y una maquina de estado para cada uno de las entradas.

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re:comunicacion serial por sof en 16f877a
« Respuesta #17 en: 31 de Marzo de 2016, 19:46:13 »
No, cuando digo que me funciona independientemente me refiero a que solo esta  programado un solo puerto, ahora cuando programo el pic para que tenga dos puertos seriales no funciona ninguno, ni siquiera recibe una vez ni nada  muerto

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:comunicacion serial por sof en 16f877a
« Respuesta #18 en: 31 de Marzo de 2016, 22:33:26 »
Luego de mirar un poquito mas el codigo, no veo el por que no te pueden funcionar ambos. Lo que si tenes un "orden" para enviar las cosas.


Código: ASM
  1. RS232_EsperaBitStart
  2.                 btfsc   RS232_Entrada           ; Lee la entrada y espera a que sea "0".
  3.                 goto    RS232_EsperaBitStart    ; No, pues espera el nivel bajo.

Ya que eso se queda para siempre alli esperando que la entrada se ponga en 0, primero tenes que enviar al PORTD,0 un byte,finalizado ese byte es el turno del PORTC,0 el cual recibira otro byte entero y volver al PORTD,0 , mientras este uno esperando el dato el otro no va a funcionar jamas.

Intentaria quitar lo de enviar datos por ahora, y dejar las salidas con leds para saber cuando es que se activa o no.


Otro tema

Otra cosa mas que no le preste atencion es tu programa, por que dijiste que independientemente funcionaban, entonces no le preste atencion, pero ahora si:

Código: ASM
  1. movlw 7
  2.         movwf CMCON             ; CMCON=7 inhibir los comparadores

eso es del banco1 y lo estas haciendo al comienzo apuntando al banco 0.

Aunque funciona vos no estas modificando los PORTx sino los TRISx, por suerte MCHP los puso en el mismo lugar si tomas los 8bits mas bajos:

Código: ASM
  1. bsf STATUS,RP0          ; Ir banco 1
  2.         movlw b'00000000'       ; valor  portA
  3.         movwf PORTA
  4.         movlw b'00000000'       ; valor  portB                  0 SALIDA---1 ENTRADA
  5.         movwf PORTB
  6.         movlw b'00000001'       ; valor  portC
  7.         movwf PORTC
  8.         movlw b'00000001'       ; valor  portD
  9.         movwf PORTD
  10.         movlw b'00000000'       ; valor  portE
  11.         movwf PORTE

Por

Código: ASM
  1. bsf STATUS,RP0          ; Ir banco 1
  2.         movlw b'00000000'       ; valor  portA
  3.         movwf TRISA
  4.         movlw b'00000000'       ; valor  portB                  0 SALIDA---1 ENTRADA
  5.         movwf TRISB
  6.         movlw b'00000001'       ; valor  portC
  7.         movwf TRISC
  8.         movlw b'00000001'       ; valor  portD
  9.         movwf TRISD
  10.         movlw b'00000000'       ; valor  portE
  11.         movwf TRISE

Aunque funciona es un concepto equivocado.