TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: honeyzita en 19 de Marzo de 2006, 07:47:00

Título: transmision de cadena caracteres pic-pc
Publicado por: honeyzita en 19 de Marzo de 2006, 07:47:00
Hola a todos... estoy realizando un protocolo de comunicacion entre el pic y pc por el puerto serie en ensamblador y me gustaria saber si se puede hacer de una forma rapida el mandar una cadena de caracteres del pic al pc porque es bastante aburrido y repetitivo tener que poner caracter a caracter como estoy realizando ahora.
Lo que hago ahora es lo siguiente:

COMP_TX   BANK1   ; macro para el bank1
   btfss   TXSTA,TRMT;comprueba si acabo de Tx.
   goto   COMP_TX ; no ha terminado
   BANK0              ;macro para el banco 0
RETURN


Datos   movlw  0x50 ;Envia el caracter, valor hex
    movwf TXREG ; del codigo ascii
   CALL COMP_TX
   movlw   0x49 ;caracter ASCII en decimal
   movwf TXREG
   CALL COMP_TX
    movlw  0x4E ;Envia el caracter, valor hex
    movwf TXREG ; del codigo ascii
.....Helado
etc el caso es que tengo que escribir un texto un poco grande en la pantalla y tengo que hacerlo en ensamblador ya que es para mi proyecto de fin de carrera y  me exigen programarlo asi.
Se que es bastante facil en C mandar una cadena de caracteres, a er si alguien sabe tambien una forma rapida en ensamblador
Gracias a todos
Un saludo desde sevilla
Título: RE: transmision de cadena caracteres pic-pc
Publicado por: karen81 en 19 de Marzo de 2006, 12:56:00
pues en ensablador tiene que ser asi, dato por dato, pero si esos datos que vas a enviar los tienes guardados en localidades pudes hacer un lazo que los vaya enviando. asi reduces el codigoRollEyes

Título: RE: transmision de cadena caracteres pic-pc
Publicado por: maunix en 19 de Marzo de 2006, 20:52:00
Escrito originalmente por honeyzita
Hola a todos... estoy realizando un protocolo de comunicacion entre el pic y pc por el puerto serie en ensamblador y me gustaria saber si se puede hacer de una forma rapida el mandar una cadena de caracteres del pic al pc porque es bastante aburrido y repetitivo tener que poner caracter a caracter como estoy realizando ahora.
Lo que hago ahora es lo siguiente:

COMP_TX   BANK1   ; macro para el bank1
   btfss   TXSTA,TRMT;comprueba si acabo de Tx.
   goto   COMP_TX ; no ha terminado
   BANK0              ;macro para el banco 0
RETURN


Datos   movlw  0x50 ;Envia el caracter, valor hex
    movwf TXREG ; del codigo ascii
   CALL COMP_TX
   movlw   0x49 ;caracter ASCII en decimal
   movwf TXREG
   CALL COMP_TX
    movlw  0x4E ;Envia el caracter, valor hex
    movwf TXREG ; del codigo ascii
.....Helado
etc el caso es que tengo que escribir un texto un poco grande en la pantalla y tengo que hacerlo en ensamblador ya que es para mi proyecto de fin de carrera y  me exigen programarlo asi.
Se que es bastante facil en C mandar una cadena de caracteres, a er si alguien sabe tambien una forma rapida en ensamblador
Gracias a todos
Un saludo desde sevilla



Otra forma es que guardes la "cadena contra la cual comparar" contiguamente en memoria y uses el direccionamiento indirecto donde el "indice" del salto sea el nro del byte a comparar.

Título: RE: transmision de cadena caracteres pic-pc
Publicado por: BrunoF en 19 de Marzo de 2006, 21:03:00
Hola. No especificaste si la cadena que envias es estatica o dinamica.

Diciendo "estatica" me refiero a que siempre se envia la misma cadena pre-grabada en la flash.
En ese caso lo mejor es utilizar una tabla con instrucciones retlw XX. Ejemplo:

Codigo:

         clrf   CONTADOR      ;vacio contador

nextbyte      movf   CONTADOR,W
         banksel   getmsg
         call   getmsg
         movwf   TXREG
         CALL   COMP_TX

         incf   CONTADOR,F
         movf   CONTADOR,W
         xorlw   ultimo - getmsg
         btfss   STATUS,Z
         goto   nextbyte

         nop            ;listo el envio!

getmsg         addwf   PCL,F      
         retlw   0x50
         retlw   0x49
ultimo         retlw   0x4E

COMP_TX         BANK1          ; macro para el bank1          
         btfss    TXSTA,TRMT   ;comprueba si acabo de Tx.
         goto    COMP_TX    ; no ha terminado
         BANK0          ;macro para el banco 0
         RETURN




Diciendo "dinamica" me refiero a que la cadena cambia, en este caso a la cadena
seguramente la guardas en la memoria del PIC asignada a los GPRs.
Si la cadena es muy larga te conviene utilizar el acceso indirecto a la memoria(mediante los registros especiales FSR e INDF)
Si el que necesitas es este segundo metodo decime que te hago un programita de ejemplo tambien(no lo hice x las dudas que utilices el que te puse).Sonrisa GiganteSonrisa Gigante
Saludos