Autor Tema: rs232 y pic 16f876  (Leído 2218 veces)

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

Desconectado asd12

  • PIC10
  • *
  • Mensajes: 48
rs232 y pic 16f876
« en: 04 de Diciembre de 2002, 12:53:00 »
Realice un programa para mandar dos datos del pc al pic y otro programa para mandar 2 datos del pic al pc. Los 2 funcionaban bien pero cuando los uni paso algo raro.
El programa espera 2 datos del pc y los pone en 2 posiciones de memoria (DIRECCION Y DATO) Luego pone el dato en la puerta B y los vuelve a transmitir al pc.
El problema esta cuando el pic los devuelve al pc ya que no manda 2 datos sino 4. Manda DIRECCION, DIRECCION, DATO, DATO en ese orden.
El programa es este.


LIST p=16F876
__CONFIG H"3F72"
RADIX HEX
include "P16F876.INC"

DIRECCION EQU 24h
DATO EQU 26H
org 0
goto INICIO
org 0x04
INICIO        bsf STATUS,RP0              ;BANCO 1
                      movlw b"10111111"
movwf TRISC
clrf TRISB
movlw b"00100000"
movwf TXSTA
movlw .25
movwf SPBRG
bcf STATUS,RP0 ;BANCO 0
clrf TMR1L ;Limpia L
clrf TMR1H ;Limpia H
movlw b"10010000" ;Configuracion de la usart
movwf RCSTA ;para recepcion continua
BUCLE BTFSS PIR1,RCIF ;SE HA RECIVIDO ALGO?
GOTO BUCLE
MOVF RCREG,W ;RECIVE DIRECCION
MOVWF DIRECCION
MOVF RCREG,W ;RECIVE DATO
MOVWF DATO
MOVWF PORTB
MOVF DIRECCION,W ;TRANSMITE DIRECCION
MOVWF TXREG
MOVF DATO,W ;TRANSMITE DATO
MOVWF TXREG
BSF STATUS,RP0 ;BANCO 1
TRANSMI BTFSS TXSTA,TRMT ;ESPERA QUE TERMINE DE TRANSMITIR
GOTO TRANSMI
BCF STATUS,RP0 ;BANCO 0
GOTO BUCLE
END

¿Si solo envio dos datos porque llegan 4? ¿Alguien se le ocure algo?

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: rs232 y pic 16f876
« Respuesta #1 en: 05 de Diciembre de 2002, 13:51:00 »
Hola, el problema es que no diferencias direccion de dato....  es decir, cuando llega un  dato en el registro RCREG, tu lo guardas en DIRECCION y en DATO.....
automaticamente, al recibir el primer dato, lo guardas en dos lugares, lo transmites al mismo dato como  DIRECCION y como DATO...
y al llegar el segundo valor, nuevamente se transmite como DIRECCION y como DATO...
se entiende?

Tienes que implementar, por ejemplo un contador, si llega un dato, se coloca en uno, entonces lo guardas en DIRECCION...  si llega otro, incrementas... si es 2, lo guardas en DATO..
el problema lo tienes en la recepcion ok?
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado asd12

  • PIC10
  • *
  • Mensajes: 48
RE: rs232 y pic 16f876
« Respuesta #2 en: 05 de Diciembre de 2002, 14:23:00 »
Gracias.
Se me olvido decir que el pc manda 2 datos seguidos al pic.
El PIR1,RCIF  se pone a 1 al llegar el primer dato y a 0 cuando leo el ultimo.
Yo creia que al leer el 1 dato este se borraba del buffer pero ya veo que no y que tienes razon.
¿Como puedo hacer para saber diferenciar los 2 datos, si al llegar los 2 juntos no veo que ningun bit me abise?
Solo se me ocurre esperar un poco antes de volver a leer el rcreg.
Experimentare a ver que sale.

Desconectado ausina

  • PIC10
  • *
  • Mensajes: 1
RE: rs232 y pic 16f876
« Respuesta #3 en: 02 de Septiembre de 2005, 08:33:00 »
hola necesito enviar y leer una informacion por el puerto serie,
agradeceria si me puesdes enviar ago de inforamacion, yo tuve en su dia un programa que hacei esto pero no lo encuentro, si tienes informacionpara crearlo en delphi te loagradeceria, sin otro particular te envio un saludo y espero noticias tuya.


gracias.


 

anything