Autor Tema: transmision de cadena caracteres pic-pc  (Leído 3438 veces)

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

Desconectado honeyzita

  • PIC10
  • *
  • Mensajes: 19
transmision de cadena caracteres pic-pc
« 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

Desconectado karen81

  • PIC10
  • *
  • Mensajes: 22
RE: transmision de cadena caracteres pic-pc
« Respuesta #1 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


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: transmision de cadena caracteres pic-pc
« Respuesta #2 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.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: transmision de cadena caracteres pic-pc
« Respuesta #3 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

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.