Autor Tema: Problemita con Transmision serial  (Leído 2000 veces)

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

Desconectado Peliparado

  • PIC10
  • *
  • Mensajes: 14
Problemita con Transmision serial
« en: 06 de Abril de 2005, 14:40:00 »
Buenas, tengo mi circuito armado para transmitir datos a traves del puerto serial (rs232) con MAX232, uso el PIC16F877A. Mi problema es que cuando mando un dato al computador, éste se repite infinitamente (en el hyperterminal), yo solo quiero que se muestre una vez y pare.

El codigo es muy simple:

LIST P=16F877A
INCLUDE <P16F877A.INC>

CONT   EQU 20
DATO   EQU 21
TRUCO   EQU 22
DATO_A   EQU 23
DATO_B   EQU 24

ORG 0x00
GOTO INICIO

ENVIAR      CALL E5MS
         BANKSEL SPBRG
         MOVLW .25
         MOVWF SPBRG
         BSF TXSTA,BRGH
         BANKSEL RCSTA
         BCF RCSTA,SYNC
         BSF RCSTA,SPEN
         BANKSEL TXSTA
         BCF TXSTA,TX9
         BSF TXSTA,TXEN
         BANKSEL TXREG
         MOVF DATO,0
         MOVWF TXREG
REP         BTFSS PIR1,TXIF
         GOTO REP
         BCF PIR1,TXIF
         RETURN

MENSAJE ADDWF PCL,1
      RETLW "J"
      RETLW "u"
      RETLW "l"
      RETLW "i"
      RETLW "a"
      RETLW "n"
      RETLW " "
      RETLW "A"
      RETLW "n"
      RETLW "d"
      RETLW "r"
      RETLW "e"
      RETLW "s"
      RETLW " "
   
INICIO    BSF STATUS,5
      CLRF TRISC
      BCF STATUS,5
      CLRF CONT
      CLRF DATO
      MOVLW .14
      MOVWF TRUCO
      GOTO LEER

LEER   MOVF CONT,0
      CALL MENSAJE
      MOVWF DATO
      MOVF CONT,0
      SUBWF TRUCO,0      
      BTFSC STATUS,2
       GOTO FIN
      CALL ENVIAR
      INCF CONT,1
      GOTO LEER

;E5MS genera una temporizacion de 5mS
                                       
E5MS           MOVLW 0x1a                  
                 MOVWF DATO_B                
                 CLRF DATO_A                  
DELAY_1          DECFSZ DATO_A,1              
                 GOTO DELAY_1                
                 DECFSZ DATO_B,1              
                 GOTO DELAY_1                
                 RETURN

FIN         NOP
         END

En este caso me muestra "julian andres" mil veces, sabiendo que solo quiero que me la muestre una sola vez. Alguien puede ayudarme ?, que me falta o que estoy haciendo mal ?

Gracias

Desconectado jhoanrc

  • PIC10
  • *
  • Mensajes: 11
RE: Problemita con Transmision serial
« Respuesta #1 en: 06 de Abril de 2005, 16:55:00 »
La unica diferencia es que especifique donde es tu programa principal y que la rutina solo lo realice solo una vez.

El error esta en GOTO LEER como siempre se encuentre en ese ciclo siempre lee el mensaje y lo manda por le puerto serial y lo vez en la hiperterminal quita esa instruccion y evitaras tantos problemas....


LIST P=16F877A
INCLUDE <P16F877A.INC>

CONT EQU 20
DATO EQU 21
TRUCO EQU 22
DATO_A EQU 23
DATO_B EQU 24

ORG 0x00
GOTO INICIO

ENVIAR      CALL E5MS
BANKSEL    SPBRG
MOVLW      .25
MOVWF     SPBRG
BSF           TXSTA,BRGH
BANKSEL RCSTA
BCF RCSTA,SYNC
BSF RCSTA,SPEN
BANKSEL TXSTA
BCF TXSTA,TX9
BSF TXSTA,TXEN
BANKSEL TXREG
MOVF DATO,0
MOVWF TXREG
REP BTFSS PIR1,TXIF
GOTO REP
BCF PIR1,TXIF
RETURN

MENSAJE ADDWF PCL,1
RETLW "J"
RETLW "u"
RETLW "l"
RETLW "i"
RETLW "a"
RETLW "n"
RETLW " "
RETLW "A"
RETLW "n"
RETLW "d"
RETLW "r"
RETLW "e"
RETLW "s"
RETLW " "

INICIO BSF STATUS,5
CLRF TRISC
BCF STATUS,5
CLRF CONT
CLRF DATO
MOVLW .14
MOVWF TRUCO
GOTO LEER

LEER MOVF CONT,0
        CALL MENSAJE
        MOVWF DATO
        MOVF CONT,0
        SUBWF TRUCO,0
        BTFSC STATUS,2
        GOTO FIN
        CALL ENVIAR
        INCF CONT,1
       ; GOTO LEER                      ;Quitar este ciclo para dejar de enviar

;E5MS genera una temporizacion de 5mS

E5MS MOVLW 0x1a
         MOVWF DATO_B
         CLRF DATO_A
         DELAY_1 DECFSZ DATO_A,1
        GOTO DELAY_1
        DECFSZ DATO_B,1
       GOTO DELAY_1
        RETURN

FIN NOP
END


Desconectado Peliparado

  • PIC10
  • *
  • Mensajes: 14
RE: Problemita con Transmision serial
« Respuesta #2 en: 06 de Abril de 2005, 17:07:00 »
No, espera, ese GOTO LEER es para que continue mostrando los caracteres, desde la J hasta la s, mira tambien que tengo un GOTO FIN, cuando termine de imprimir los caracteres debe entrar a GOTO FIN e irse a dormir o a no se que ...

En el PICSIMULATOR tambien me repite los datos ....

Desconectado blocktel

  • PIC10
  • *
  • Mensajes: 11
RE: Problemita con Transmision serial
« Respuesta #3 en: 08 de Abril de 2005, 15:32:00 »
A mi me parece que esta bien, creo que el problema esta en
fin
     nop  ; aqui debes de poner sleep , y grabar el pic con perro guardian oof
     end
 saludos

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Problemita con Transmision serial
« Respuesta #4 en: 08 de Abril de 2005, 20:37:00 »
Efectivamente el fallo esta en la etiqueta "FIN" que solo realizas un NOP. de esta forma, el micro seguirá ejecutando las instrucciones que hay depués de esta en la memoria de programa que son todas "ANDLW 0xff" y de que llega a la última dirección te salta al principio, al vector de reset.

Pon esto:

FIN GOTO FIN y listo el micro entra en bucle infinito.

Desconectado Peliparado

  • PIC10
  • *
  • Mensajes: 14
RE: Problemita con Transmision serial
« Respuesta #5 en: 08 de Abril de 2005, 23:37:00 »
muchas gracias !!!!