• Lunes 23 de Diciembre de 2024, 12:58

Autor Tema:  Comunicacion Uart-pc  (Leído 1722 veces)

norte75

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Comunicacion Uart-pc
« en: Viernes 26 de Mayo de 2006, 10:54 »
0
hola,

objetivo: mandar dato desde pc al pic 16f877 - via uart asincrona, que procese el dato y lo devuelva pro la uart al pc

he elaborado el siguiente programa en leng. ensamblador, y me gustaria que algún alma caritativa lo revisara antes de implementarlo.

Muchas Gracias

Código:

   LIST P=16F877
   RADIX HEX
   INCLUDE "P16F877.INC"
   dato EQU 20
   reg9bit EQU 21
   ORG 0x00
   goto INICIO
   ORG 0x04
INTER   bcf STATUS,RP0
   btfss PIR1,RCIF      ; se ha recibido datos en RSR register
   goto VOLVER
   btfss RCSTA,FERR   ;si FERR=1 habrá error de frame y no se ejecutara la siguiente instrucción
   goto NOEF
   goto VOLVER      ;existe error de frame y no ejecutamos recepción
NOEF   btfss RCSTA,OERR   ;si OERR=1 habrá error de overrun y no se ejecutara la siguiente instrucción
   goto NOEO
   goto VOLVER      ;existe error de overrun y no ejecutamos recepción
NOEO   movlw D'0'      ; no habria ni overrun ni error de frame,
   btfsc RCSTA,RX9D   ; si el 9th bitRX9D=1 ejecuta siguiente instrucción
   movlw D'1'
   movwf reg9bit      ;meto o bien el 0 o el 1 que haya llegado como noveno bit
   movf RCREG,W
   movwf dato      ;meto el resto de 8 bits en el reg dato
   DECFSZ dato,1      ;una vez rx los 9 bits, para reenviarlo invierto el noveno bit y sumo 1 al octeto
   INCFSZ reg9bit,1   ; si el bit 0 era 1 se pondrá a 0 y si es 0 se pondrá a 1 al sumarle '00000001'
   bsf STATUS,RP0   ; banco 1 , ahora vamos a transmitir
   bsf PIE1, TXIE      ;TXIE=1 permito interrupciones por tx
   bsf TXSTA,TX9D      ;supongo que bit 9 es 1
   btfss reg9bit,0      ;si fuera un 1 se salta siguiente instrucción
   bcf TXSTA,TX9D       ; es un 0 y lo pongo a 0
   bcf STATUS,RP0    ; banco 0 para tarbajar con TXREG
   movf dato,TXREG
   bsf STATUS,RP0   ; banco 1 ,  para trabajar con TXSTA
FINTX   btfss TXSTA,TRMT
   goto FINTX
   bcf PIE1, TXIE      ;TXIE=0 quito permito interrupciones por tx
VOLVER retfie
INICIO   clrf PORTC       ; limpio puerto C que se utilizará en entrada y salida
   movlw b '11000000'
   iorwf INTCON,F       ; OR con  INTCON para activar GIE=PEIE=1 permitir interrupciones
   bcf STATUS,RP0    ; banco 0
   movlw b'11010000'   
   movwf RCSTA       ; SPEN=1 serial port enable, RX9=1 9 bits, CREN=1 continuous receive
             ; ADDEN=0 enables interrupt and load of the receive buffer when RSR<8> is set
   bsf STATUS,RP0       ; banco 1 ,  para trabajar con TXSTA
   movlw b '01100100'    
   movwf TXSTA      ; TXE=1 se tx 9 bits, TXEN=1 tx enable, BRGH=1 high speed (pendiente)
   movlw D '207'       
   movwf SPBRG      ; fosc = 4MHZ, 1200 baudios
   bcf PIE1, TXIE      ; TXIE=0 no permito interrupciones por tx hasta que no reciba datos
   bsf PIE1, RCIE      ; RCIE=1 permito interrupciones por rx
BUCLE goto BUCLE

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Comunicacion Uart-pc
« Respuesta #1 en: Miércoles 31 de Mayo de 2006, 20:04 »
0
Bueno, encontraras muy pocos usuarios con tiempo para rebizar el codigo, es el problema de la mayoria de los programadores de pic.. el tiempo es oro :ph34r: .. hay unas rutinas ya verificadas que funcionan muy bien, podrias compararlas con tu codigo y ver.. http://foros.solocodigo.com/index.php?showtopic=19199 ..

te recomiendo que si vas a programar y trabajar sobre los modulos del pic, trates de analizar y estudiar las rutinas ya creadas y probadas, eso te ahorrara muchos dolores de cabeza y en un proyecto te hara ganar tiempo. :) .. para que inventar la rueda 2 veces?
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»