Autor Tema: Comunicacion USART con LCD en ASM  (Leído 5778 veces)

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

Desconectado mestanza

  • PIC10
  • *
  • Mensajes: 22
Comunicacion USART con LCD en ASM
« en: 08 de Marzo de 2013, 14:41:55 »
Poseo un problema con lo expresado en el tema.. Poseo un Pic16f887 estoy realizando una comunicacion serial usart (pic-pic), en el pic "esclavo" tengo un lcd conectado y en el pic "maestro" tengo un teclado matricial, toda la programacion esta es assembler.. Logre establecer la comunicacion, me muestra el numero en el lcd cada vez que presiono un boton en teclado matricial, perfecto!! pero poseo un detalle en la programacion del mismo:

Si presiono un boton en el pic-maestro (ejemplo el 1), en la pantalla lcd del pic-exclavo me mostrara el numero 1
Si presiono cualquier otro boton en el pic-maestro (ejemplo el 7), en la pantalla lcd del pic-exclavo me mostrara el numero 7, borrando el numero 1 mostrado anteriormente

Mi pregunta es, como puedo acumular los numeros sucesivamente? es decir, en lugar que me borre la pantalla me acumule los numeros presionados, para mi caso de ejemplo se muestre:

17

y siga sucesivamente.. Gracias por la ayuda

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 936
Re: Comunicacion USART con LCD en ASM
« Respuesta #1 en: 08 de Marzo de 2013, 14:57:53 »
Para poder ayudarte es necesario ver el código ASM.
El programa que actulmente tienes puede haberse hecho de miles de formas, por tanto para poder entenderlo y ayudarte, cualquiera de nosotros debe ver primero el código fuente.

Ideal, si además del código anexaras el diagrama de conexionado. Sin un poco más de información es como dar "palos a ciegas".

Saludos.-
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comunicacion USART con LCD en ASM
« Respuesta #2 en: 08 de Marzo de 2013, 15:22:26 »

Creo que lo que tienes que hacer es apuntar hacia la nueva posición donde deseas hacer la escritura, recuerda que la posición 0 de la fila 1 para la LCD es b'10000000', a partir, de esta dirección puedes recorre todo el arreglo de columnas que posea el modulo LCD que estes utilizando.
Un saludo desde Pereira - Colombia

Desconectado mestanza

  • PIC10
  • *
  • Mensajes: 22
Re: Comunicacion USART con LCD en ASM
« Respuesta #3 en: 08 de Marzo de 2013, 17:08:40 »
Para poder ayudarte es necesario ver el código ASM.
El programa que actulmente tienes puede haberse hecho de miles de formas, por tanto para poder entenderlo y ayudarte, cualquiera de nosotros debe ver primero el código fuente.

Ideal, si además del código anexaras el diagrama de conexionado. Sin un poco más de información es como dar "palos a ciegas".

Saludos.-

Mi Codigo es el siguiente:


      INCLUDE <P16F887.INC>
      LIST p=16F887

      __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _DEBUG_OFF & _IESO_OFF & _BOR_ON & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
      __CONFIG    _CONFIG2, _WRT_OFF & _BOR40V

      CBLOCK   0X40
      val1
      val2
      ETE
      
      ENDC
;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
            ORG   0x00            ;Inicio en el Vector de Reset
     
            GOTO   INICIO            ;Va a la primera instruccion del programa
               
;<<<<<<------------------- VECTOR DE INTERRUPCION -------------------->>>>>>>

            ORG   0x04            ;Vector de interrupcion

           goto   INTER         ;salta a la linea INTER

;<<<<<<----------------- CONFIGURACION DE LOS REGISTROS GENERALES ------------------->>>>>>>
INICIO     
         BANKSEL   ANSEL;;---Se definen PORTA y PORTB como digitales
         CLRF   ANSEL
         CLRF   ANSELH

         BANKSEL   TRISA
         CLRF   TRISD
         CLRF   TRISE
         
         MOVLW   .25   ;--valor para seleccionar 9600 baudios
         MOVWF   SPBRG
           MOVLW   b'00100100'      ;Configuracion USART modo alta velocidad 9600 baud y activacion de transmision
           MOVWF   TXSTA            ;carga valor anterior en registro asociado al generador del baud rate

         BANKSEL   RCSTA
           MOVLW   b'10010000'      ;Configuracion de la usart
           MOVWF   RCSTA            ;para recepcion continua y habilitacion del USART
            bsf     PIE1,RCIE      ;Habilitacion interrupcion RX
            BANKSEL   INTCON               ;Cambio al banco 0
            movlw   b'11000000'      ;Habilitacion para las
            movwf   INTCON         ;interrupciones generales

         BANKSEL      PORTA
         CLRF      PORTA
         CLRF      PORTB
         CLRF      PORTC
         CLRF      PORTD
         CLRF      PORTE

START_LCD:      
       call INICIA_LCD    ;Configura el LCD

;<<<<<<<<-------------------------VISUALIZACION DE DATO RECIBIDO------------>>>>>>>>>>>>>>
         
leer_teclado

      NOP      ;--Se comporta como un tiempo de asentamiento
      MOVF   RCREG,W;;---Leer el buffer de recepción

         MOVWF      PORTD            ;Visualiza dato recibido

      call ENVIA
      CALL DELAY
      CALL DELAY
      call   INTER
      CLRF   RCREG
      GOTO    leer_teclado



ENVIA:
   
      bsf PORTE,0     ; RS=1 MODO DATO
       call COMANDO    ; Se da de alta el comando
      RETURN
      
;<<<<<<<<-------------------COMPROVACION DE TIPO DE INTERRUPCION------------>>>>>>>>>>>>>>
   
INTER         
         BCF   STATUS,RP0
         BCF   STATUS,RP1         
            btfss   PIR1,RCIF      ;comprueba si el shift register(RSR)esta lleno.y si es asi salta
            retfie               ;retorno de interrupcion si no se ha dado la circunstancia anterior

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


INICIA_LCD:
    bcf PORTE,0      ; RS=0 MODO INSTRUCCION
    movlw 0x01       ; El comando 0x01 limpia la pantalla en el LCD
    movwf PORTD
    call COMANDO     ; Se da de alta el comando
    movlw 0x0C       ; Selecciona la primera línea
    movwf PORTD
    call COMANDO     ; Se da de alta el comando
    movlw 0x3C       ; Se configura el cursor
    movwf PORTD
    call COMANDO     ; Se da de alta el comando
    bsf PORTE, 0     ; Rs=1 MODO DATO
    return

    ;Subrutina para enviar comandos
COMANDO:
    bsf PORTE,1     ; Pone ENABLE en 1
    call DELAY      ; Tiempo de espera
    bcf PORTE,1    ; ENABLE=0   
    call DELAY
    return

    ; Subrutina de retardo
DELAY:           
    movlw 0xFF
    movwf val2
ciclo:
    movlw 0xFF
    movwf val1
ciclo2:
    decfsz val1,1
    goto ciclo2
    decfsz val2,1
    goto ciclo
    return


      END



Si pueden corregirlo con la ayuda que les pido seria genial, gracias!!

Desconectado mestanza

  • PIC10
  • *
  • Mensajes: 22
Re: Comunicacion USART con LCD en ASM
« Respuesta #4 en: 08 de Marzo de 2013, 17:11:14 »

Creo que lo que tienes que hacer es apuntar hacia la nueva posición donde deseas hacer la escritura, recuerda que la posición 0 de la fila 1 para la LCD es b'10000000', a partir, de esta dirección puedes recorre todo el arreglo de columnas que posea el modulo LCD que estes utilizando.

Para ser sinceros, estoy empezando a trabajr con el LCD y aun estoy en fase se "descubrimiento", si me ayudas a como debo configurar el movimiento de posiciones en filas y columnas, estare agradecido

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comunicacion USART con LCD en ASM
« Respuesta #5 en: 08 de Marzo de 2013, 21:41:07 »
mestanza observa el siguiente código

Código: [Seleccionar]
;********************* Rutina de envio de datos ****************

recibe movf rcreg,0
pregunta btfss pir1,5
goto pregunta
addlw 30h ; ASCII
movf rcreg,0
incf posicion,1

;********************* Rutina de control de la LCD *********************

lcd bcf portc,0 ; Inicializar transmisión
goto vaya

lcd_esc bsf portc,0
vaya bsf portc,1 ; activo el modo escritura
movwf portb ; paso al puerto b
call retardo ; pequeño retardo
bcf portc,1 ; para inicializar la lcd
call retardo
return

inicio bcf status,6
bsf status,5 ; banco 1
movlw b'11111111'
movwf porta
movwf portd
movwf porte ; configuro los puerto A,D,E como salida
movlw b'11111100'
movwf portc
movlw b'00000000'
movwf portb ; Puerto B como salida digítales
movlw b'00100100'
movwf txsta ; configuro la transmisión
movlw d'103'
movwf spbrg ; configuro a 4MHz y 2400 bps

bcf status,5 ; banco 0
movlw b'11011000'
movwf rcsta ; Habilitar lqa recepción y el módulo serial

clrf portb ; limpio el puerto
movlw b'10000000' ; Ubica el puntero en la primera posición
call lcd
clrf posicion
movlw b'10000000'
movwf arriba

vuelve clrf vector

call recibe ; Recibe el dato en registro RECREG

movf rcreg,0 ; Paso el respectivo caracter a W
call lcd_esc ; si no es ningun valor
incf posicion,1
decf posicion,1
movf posicion,0
addwf arriba,1
clrf posicion
goto vuelve ; escribe el valor en la LCD
end

La rutina de tiempo simplemente espera a que la lcd de estabilice eso es todo, además, en este código se enseña todo lo que necesitas para tu aplicación, cualquier cosa estaré atento.
« Última modificación: 08 de Marzo de 2013, 21:43:19 por Chenao »
Un saludo desde Pereira - Colombia

Desconectado mestanza

  • PIC10
  • *
  • Mensajes: 22
Re: Comunicacion USART con LCD en ASM
« Respuesta #6 en: 08 de Marzo de 2013, 23:51:09 »
mestanza observa el siguiente código

Código: [Seleccionar]
;********************* Rutina de envio de datos ****************

recibe movf rcreg,0
pregunta btfss pir1,5
goto pregunta
addlw 30h ; ASCII
movf rcreg,0
incf posicion,1

;********************* Rutina de control de la LCD *********************

lcd bcf portc,0 ; Inicializar transmisión
goto vaya

lcd_esc bsf portc,0
vaya bsf portc,1 ; activo el modo escritura
movwf portb ; paso al puerto b
call retardo ; pequeño retardo
bcf portc,1 ; para inicializar la lcd
call retardo
return

inicio bcf status,6
bsf status,5 ; banco 1
movlw b'11111111'
movwf porta
movwf portd
movwf porte ; configuro los puerto A,D,E como salida
movlw b'11111100'
movwf portc
movlw b'00000000'
movwf portb ; Puerto B como salida digítales
movlw b'00100100'
movwf txsta ; configuro la transmisión
movlw d'103'
movwf spbrg ; configuro a 4MHz y 2400 bps

bcf status,5 ; banco 0
movlw b'11011000'
movwf rcsta ; Habilitar lqa recepción y el módulo serial

clrf portb ; limpio el puerto
movlw b'10000000' ; Ubica el puntero en la primera posición
call lcd
clrf posicion
movlw b'10000000'
movwf arriba

vuelve clrf vector

call recibe ; Recibe el dato en registro RECREG

movf rcreg,0 ; Paso el respectivo caracter a W
call lcd_esc ; si no es ningun valor
incf posicion,1
decf posicion,1
movf posicion,0
addwf arriba,1
clrf posicion
goto vuelve ; escribe el valor en la LCD
end

La rutina de tiempo simplemente espera a que la lcd de estabilice eso es todo, además, en este código se enseña todo lo que necesitas para tu aplicación, cualquier cosa estaré atento.

Muchas Gracias Hombre, estoy en proceso de chequearlas, pero antes puedes sacarme de unas dudas de tus codigos?
que hace ?
      addlw   30h      ; ASCII
      movf   rcreg,0
      incf   posicion,1

valor de las variable posicion?

puedo cambiar el siguiente dato por d'25' para que se mueva en 9600baudios?
      movlw   d'103'
      movwf   spbrg      ; configuro a 4MHz y 2400 bps

Gracias!!!!

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comunicacion USART con LCD en ASM
« Respuesta #7 en: 09 de Marzo de 2013, 00:45:42 »
Citar
Muchas Gracias Hombre, estoy en proceso de chequearlas, pero antes puedes sacarme de unas dudas de tus codigos?
que hace ?
      addlw   30h      ; ASCII
      movf   rcreg,0
      incf   posicion,1

Valor que recibe por la comunicación serial lo pasa a ascii (esto se logra sumándole 30h al dato recibido ver hoja de datos de la LCD)

Citar
puedo cambiar el siguiente dato por d'25' para que se mueva en 9600baudios?
      movlw   d'103'
      movwf   spbrg      ; configuro a 4MHz y 2400 bps

Claro la velocidad de la comunicación es independiente del manejo del modulo LCD. Seria bueno que estudiaras el respectivo datasheet de la LCD, en ese documento esta todo lo que necesitas.
Un saludo desde Pereira - Colombia

Desconectado mestanza

  • PIC10
  • *
  • Mensajes: 22
Re: Comunicacion USART con LCD en ASM
« Respuesta #8 en: 09 de Marzo de 2013, 01:07:34 »
Citar
Muchas Gracias Hombre, estoy en proceso de chequearlas, pero antes puedes sacarme de unas dudas de tus codigos?
que hace ?
      addlw   30h      ; ASCII
      movf   rcreg,0
      incf   posicion,1

Valor que recibe por la comunicación serial lo pasa a ascii (esto se logra sumándole 30h al dato recibido ver hoja de datos de la LCD)

Citar
puedo cambiar el siguiente dato por d'25' para que se mueva en 9600baudios?
      movlw   d'103'
      movwf   spbrg      ; configuro a 4MHz y 2400 bps



Claro la velocidad de la comunicación es independiente del manejo del modulo LCD. Seria bueno que estudiaras el respectivo datasheet de la LCD, en ese documento esta todo lo que necesitas.

Perfecto, muchas Gracias!!! Lo tendre presente... dejame adaptar todo esto a mi programa y te dire que tal me fue, vale? Mil gracias nuevamente

Desconectado mestanza

  • PIC10
  • *
  • Mensajes: 22
Re: Comunicacion USART con LCD en ASM
« Respuesta #9 en: 09 de Marzo de 2013, 22:44:12 »
Citar
Muchas Gracias Hombre, estoy en proceso de chequearlas, pero antes puedes sacarme de unas dudas de tus codigos?
que hace ?
      addlw   30h      ; ASCII
      movf   rcreg,0
      incf   posicion,1

Valor que recibe por la comunicación serial lo pasa a ascii (esto se logra sumándole 30h al dato recibido ver hoja de datos de la LCD)

Citar
puedo cambiar el siguiente dato por d'25' para que se mueva en 9600baudios?
      movlw   d'103'
      movwf   spbrg      ; configuro a 4MHz y 2400 bps



Claro la velocidad de la comunicación es independiente del manejo del modulo LCD. Seria bueno que estudiaras el respectivo datasheet de la LCD, en ese documento esta todo lo que necesitas.

Perfecto, muchas Gracias!!! Lo tendre presente... dejame adaptar todo esto a mi programa y te dire que tal me fue, vale? Mil gracias nuevamente

Hombre una pregunta, cuando hace el "call recibe", en donde habilitas el return? despues de "movf   rcreg,0" no? creo entender tu codigo, pero no me anexaste tu configuracion de pines, asumo que las patas de D0-D7 estan conectadas al PORTB, y las patas de RS y E estan conectadas a PORTC pero dudo en cual pata de dicho puerto van.. te agredeceria esa info para terminar de comprender el programa. Gracias

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comunicacion USART con LCD en ASM
« Respuesta #10 en: 10 de Marzo de 2013, 01:36:07 »
Citar
Hombre una pregunta, cuando hace el "call recibe", en donde habilitas el return? despues de "movf   rcreg,0" no? creo entender tu codigo, pero no me anexaste tu configuracion de pines, asumo que las patas de D0-D7 estan conectadas al PORTB, y las patas de RS y E estan conectadas a PORTC pero dudo en cual pata de dicho puerto van.. te agredeceria esa info para terminar de comprender el programa. Gracias

RS -----> RC1
E   -----> RC2

D0 -----> RB0
.
.
D7 -----> RB7

La rutina "recibe" tiene como objetivo recibir un dato por medio del usart del microcontrolador y pasarlo al respectivo ASCII para posteriormente visualizar el dato en la LCD.
Un saludo desde Pereira - Colombia


 

anything