Autor Tema: LCD+ 16F877A  (Leído 4162 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado PIC_16F877A

  • PIC10
  • *
  • Mensajes: 33
LCD+ 16F877A
« en: 12 de Marzo de 2011, 14:48:33 »
HOLA COMPAÑERO SOY NUEVO EN LOS PIC, TENGO QUE PROYECTO QUE HACER CON LCD +16F877A,  YA HICE EL PROGRAMA, PERO AL COMPILARLO ME GENERA MUCHOS ERRORES, LES PIDO  EL FAVOR QUE ME AYUDEN A CORREGIR  LOS ERRORES, COMO LES DIJES SOY NUEVO EN ESTO SOBRE LOS PICS, LE MUESTRO MI CODIGO  PARA QUE LO VEAN COMO LO HICE Y ME CORRIJAN LOS ERRORES QUE PRESENTA, GRACIAS JOSE LUIS

SOY DE BOGOTA COLOMBIA

LIST P= 16F877A.
    include<p16f877A.inc>
PLC      EQU  0x02
ESTADO   EQU  0x03
PUERTOB  EQU  0x06
PUERTOD  EQU  0x08
PCLATH   EQU  0x0A
RDELAY   EQU  0x21
CONTA0   EQU  0x22
CONTA1   EQU  0x22
CONTA2   EQU  0x23
LETRA    EQU  0x25
FLINEA   EQU  0x26

Linea1LCD  EQU  0x80
Linea2LCD  EQU  0xc0
ClrLCD     EQU  0x01
CasaLCD    EQU  0x02
IncLCD     EQU  0x07
DecLCD     EQU  0x05
OnLCD      EQU  0x0C
OfLCD      EQU  0x08
OnCursor   EQU  0x0E
OffCursor  EQU  0x0C
BlinkCursor EQU  0x0F
IzqLCD     EQU  0x18
DerLCD     EQU  0x1C
IzqCursor  EQU  0x10
DerCursor  EQU  0x14
Funcion    EQU  0x38

RS       EQU   6
RW       EQU   5
E        EQU   7

W        EQU    0
F        EQU    1

         ORG 0
         goto INICIAR
         ORG   5         
   
INICIAR   call  Port_LCD
          call Ini_LCD
rbl      movlw LinealLCD

         call  Comando_LCD
         movlw 0x0f
         movwf Flinea
         clrf  Letra
rb2      movf Letra,W
        Call  Mensaje
        Call Caracter_LCD
        call delay
        incf Letra,F
        decfsz Fliena,F
        goto rb2
        goto segundaL

   
Mensaje   addwf PCL,1
          retlw A'D'
          retlw A'E'
          retlw A'S'
          retlw A'P'
          retlw A'L'
          retlw A'E'
          retlw A'G'
          retlw A'A'
          retlw A'D'
          retlw A'O'
          retlw A'R'
          retlw A' '
          retlw A'L'
          retlw A'C'
          retlw A'D'
          retlw A' '
 
 Mensaje2 addwf  PCL,1              ;Mensaje a desplegar  en el LCD
          retlw  0x20               ;
          retlw  0x50               ;P
          retlw  0x52               ;R
          retlw  0x41               ;A
          retlw  0x43               ;C
          retlw  0x54               ;T
          retlw  0x49               ;I
          retlw  0x43               ;C
          retlw  0x41               ;A
          retlw  0x20               ;
          retlw  0x20               ;
          retlw  0x54               ;T
          retlw  0x52               ;R
          retlw  0x45               ;E
          retlw  0x53               ;S
          retlw  0x20               ;

segundaL  movlw Linea2LCD
          call Comando_LCD   
          movlw  0x0F
          movwf Flinea
          clrf Letra
   rt2    movf Letra,w
          call Mensaje2
          call Caracter_LCD
          call Delay
          incf Letra,F
          decfsz Flinea,F
          goto rt2
   parar  goto parar
  Port_LCD bsf ESTADO,5
           clrf PUERTOD
           clrf PUERTOB
           bcf  ESTADO,5
           bcf  PUERTOD,E
           return
Ini_LCD    call retardo
           bsf PUERTOA,RW
           movlw FuncionLCD
           call Comando_LCD
           call retardo
           movlw FuncionLCD
           call  Comando_LCD
           call  retardo
           movlw FuncionLCD
           call  Comando_LCD
           movlw OnLCD
           call  Comando_LCD
           movlw ClrLCD
           call  Comando_LCD
           movlw DecLCD
           call  Comando_LCD
           movlw  CasaLCD
           call   Comando_LCD
           return

Comando_LCD  bcf   PUERTOD,RS
             bcf   PUERTOD,E
             movwf PUERTOB
             call  Habilita_LCD
             return

Caracter_LCD  bsf   PUERTOD,RS
              bcf   PUERTOD,E
              movwf PUERTOB
              call  Habilita_LCD
              return
 
RETARDO DE 255 MICRO SEG
Habilita_LCD bsf  PUERTOD,E
             movlw 0xFF
             movwf RDELAY
t1           decfsz RDEALY,F
             goto t1
             bcf  PUERTOD,E
             return
 
retardo      movlw  0x01
             movwf  CONTA0
ret2         movlw  0x64
             movwf  CONTA1

ret1         movlw   0x64
             movwf   CONTA2
ret0         decfsz  CONTA2,F
             goto    ret0
             decfsz  CONTA1,F
             goto    ret1
             decfsz  CONTA0,F
             goto    ret2
             return

 delay       movlw    0xFF
             movwf    CONTA0
re2          movlw    0xFF
             movwf    CONTA1
re1          movlw    0x03
             movwf    CONTA2
reo          decfsz   CONTA,F
             goto      re0
             decfsz   CONTA1,F
             goto      re1
             decfsz   CONTA0,F
             goto      re2
             return
             end
 

Desconectado gcgiron

  • PIC10
  • *
  • Mensajes: 42
Re: LCD+ 16F877A
« Respuesta #1 en: 12 de Marzo de 2011, 18:01:45 »
Bienvenido al foro.

Dime que compilador estas usando y que tipo de errores te da?
En este mundo he visto algo más: que no son los veloces los que ganan la carrera, ni los valientes los que ganan la batalla; que no siempre los sabios tienen pan, ni los inteligentes son ricos, ni los instruidos son bien recibidos; todos ellos dependen de un momento de suerte.

Eclesiastes 9:11

Desconectado gcgiron

  • PIC10
  • *
  • Mensajes: 42
Re: LCD+ 16F877A
« Respuesta #2 en: 12 de Marzo de 2011, 18:17:52 »
Cordial saludo.

Mira esta compilación a ver si te sirve.
En este mundo he visto algo más: que no son los veloces los que ganan la carrera, ni los valientes los que ganan la batalla; que no siempre los sabios tienen pan, ni los inteligentes son ricos, ni los instruidos son bien recibidos; todos ellos dependen de un momento de suerte.

Eclesiastes 9:11

Desconectado PIC_16F877A

  • PIC10
  • *
  • Mensajes: 33
Re: LCD+ 16F877A
« Respuesta #3 en: 12 de Marzo de 2011, 18:32:06 »


Dime que compilador estas usando y que tipo de errores te da?
-

el compilador que estoy usando es MPLAB 7.41

Desconectado PIC_16F877A

  • PIC10
  • *
  • Mensajes: 33
Re: LCD+ 16F877A
« Respuesta #4 en: 12 de Marzo de 2011, 18:45:51 »
Bienvenido al foro.

Dime que compilador estas usando y que tipo de errores te da?

TE ADJUNTO LOS ERRORES QUE SE GENERAN

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: LCD+ 16F877A
« Respuesta #5 en: 13 de Marzo de 2011, 03:06:00 »
Los errores que te salen son por que esas etiquetas no estan declaradas al inicio. Tienes que revisar bien y si las variables o las etiquetas de las subrutinas estan en mayusculas o minusculas , tienes que respetar eso, el MPLAB distingue eso. Por eso si una variable la defines como FLINEA, cuado trabajes con ella debes hacerlo tal cual le pusistes el nombre y no Flinea. Tambien si tratas de trabajar con una varible que no fue definida antes (ej: PORTA), tambien te saldra ese error. Fijate en tu subrutina de demoras, ya que trabajas con CONTA1,2,3 pero cuando vuelves a preguntar por ellos para el decremento, solo pones CONTA y por eso tambien te esta saltando ese error. Cuando quieras comentar una linea del codigo, le antepones ";" y asi el MPLAB no lo toma como etiqueta de una subrutina. En fin, los errores que te saltan simplemente es por despiste tuyo, no te preocupes al inicio todos pasamos por esa etapa. Te recomiendo que te des vuelta por el subforo de Assambler, por ahi hay tutoriales de como hacer tus programas y volverlo mas "limpio", por ejemplo creando subrutinas, que las puedes utilizar en x proyectos y solo las tienes que añadir cuando las necesites; asi el programa principal te quedara mas legible. Suerte

Desconectado PIC_16F877A

  • PIC10
  • *
  • Mensajes: 33
Re: LCD+ 16F84A
« Respuesta #6 en: 13 de Marzo de 2011, 10:17:09 »
list p=16f84

indf equ 0h

tmro equ 1

pc equ 2

status equ 3

fsr equ 4

ptoa equ 5

ptob equ 6

r0c equ 0ch

r0d equ 0dh

r13 equ 13h

z equ 2h

c equ 0h

w equ 0h

r equ 1h

e equ 1h

rs equ 0h

org 0

goto inicio

org 05

retardo movlw 0ffh

movwf r13

decre decfsz r13,r

goto decre

retlw 0

control bcf ptoa,rs

goto dato2

dato bsf ptoa,rs

dato2 bsf ptoa,e

movwf ptob

call retardo

bcf ptoa,e

call retardo

retlw 0

tabla2 addwf pc,r

retlw "c"

retlw "u"

retlw "r"

retlw "s"

retlw "o"

retlw " "

retlw "d"

retlw "e"

retlw " "

retlw "m"

retlw "i"

retlw "c"

retlw "r"

retlw "o"

retlw "c"

retlw "o"

retlw "n"

retlw "t"

retlw "r"

retlw "o"

retlw "l"

retlw "a"

retlw "d"

retlw "o"

retlw "r"

retlw "e"

retlw "s"

retlw " "

retlw "p"

retlw "i"

retlw "c"

retlw " "

retlw " "

retlw " "

retlw " "

retlw " "

retlw 0

inicio movlw 0fch

tris ptoa

movlw 00

tris ptob

begin movlw 30h

call control

movlw 07h

call control

movlw 0ch

call control

muestra movlw 0

movwf r0c

ciclo movf r0c,w

call tabla2

call dato

movlw 09fh

movwf r0d

reta1 call retardo

call retardo

decfsz r0d,r

goto reta1

incf r0c,r

movlw 28h

xorwf r0c,w

btfss status,z

goto ciclo

goto muestra

end

 ESTE CODIGO   NO ME DA ERROR AL COMPILARLO  LO SIMULO CON PROTEUS Y ESTA CORRECTO,  EL MENSAJE  EMPIESA  A SALIR  DE  DERECHA A IZQUIERDA TERMINANDO ESTE MENSAJE, COMO PUEDO HACER  QUE ESTE MENSAJE  VUELVA A INICIAR DE IZQUIERDA A DERECHA ESPERO SU AYUDA , GRACIAS JOSE LUIS   

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: LCD+ 16F877A
« Respuesta #7 en: 13 de Marzo de 2011, 15:00:20 »
tendrias que hacer un buble mas  o menos asi:
Código: ASM
  1. mensaje
  2.           ;
  3.           ;aqui colocas la parte de tu programa que envia una sola vez
  4.           ;el mensaje
  5.           ;
  6.           goto   mensaje
  7.  
  8.            END

Con esto siempre estara desplazandose el mensaje indefinidamente. Como te recomende, revise el subforo de assembler ahi hay varios tutoriales y programas que te podran ser de utiliad.
« Última modificación: 13 de Marzo de 2011, 15:08:03 por poseidon20 »

Desconectado PIC_16F877A

  • PIC10
  • *
  • Mensajes: 33
Re: LCD+ 16F877A
« Respuesta #8 en: 13 de Marzo de 2011, 16:47:21 »
tendrias que hacer un buble mas  o menos asi:
Código: ASM
  1. mensaje
  2.           ;
  3.           ;aqui colocas la parte de tu programa que envia una sola vez
  4.           ;el mensaje
  5.           ;
  6.           goto   mensaje
  7.  
  8.            END

Con esto siempre estara desplazandose el mensaje indefinidamente. Como te recomende, revise el subforo de assembler ahi hay varios tutoriales y programas que te podran ser de utiliad.

hola en que parte del programa debo colocarlo lo que me recomienda

jose

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: LCD+ 16F877A
« Respuesta #9 en: 13 de Marzo de 2011, 17:03:27 »
Disculpa, pero no entiendo muy bien tu programa. Quien mejor que tu mismo lo hagas, asi podras aprender.

Desconectado PIC_16F877A

  • PIC10
  • *
  • Mensajes: 33
Re: LCD+ 16F877A
« Respuesta #10 en: 13 de Marzo de 2011, 19:32:59 »
Disculpa, pero no entiendo muy bien tu programa. Quien mejor que tu mismo lo hagas, asi podras aprender.

 este programa no es mio, lo encontre en internet, por eso necesito ayuda,  espero que  me  entiendas jose

Desconectado PIC_16F877A

  • PIC10
  • *
  • Mensajes: 33
Re: LCD+ 16F877A
« Respuesta #11 en: 16 de Marzo de 2011, 07:37:19 »
HOLA AMIGO, MUY AGRADECIDO POR TU PROGRAMA, LO HE PROBADO EN LA PROTOBOARD Y ME FUNCIONO AL 100%,    SOLO HE VISTO QUE TU PROGRAMA  EMPIESA  DERECHA A IZQUIERDA,  COMO SE PUEDE HACER  QUE EL MENSAJE  VUELVA A EMPENZAR DE IZQUIERDA A DERECHA. ME EXPLICO LO QUE TE QUIERO DECIR

  CON EL PROGRAMA QUE TU HICISTE CON EL PIC 16F877A +LCD, EMPIESA DE DERECHA A IZQUIERDA Y EMPIESA HACER LO MISMO, LO QUE ME GUSTARIA QUE ESE MISMO MENSAJE  APAREZCA DE  IZQUIERDA A DERECHA Y CUANDO TERMINE, EMPIESE DE NUEVO DERECHA A IZQUIERDA ASI SUCESIVAMENTE.  GRACIAS JOSE LUIS

Desconectado hectorrcm

  • PIC10
  • *
  • Mensajes: 1
Re: LCD+ 16F877A
« Respuesta #12 en: 08 de Abril de 2011, 17:52:07 »
Soy nuevo por este foro, ya lleve la clase de micros en la uni, solo que estaba muy trabado con la rutina de la LCD, ya que por mas que verificaba mi codigo al parecer todo era correcto, quiero agradecer a gcgiron por su aporte ya que mi codigo era casi exactamente el mismo ya que lo tome del mismo libro, solo con la diferencia que habia 2 retardos con tiempos distintos, esto lo comento por si alguien esta en la misma situacion, ya que si la rutina de inicilaizacion no es exactamente la indicada por fabricante no podra funcionar la LCD.

Saludos!!
« Última modificación: 08 de Abril de 2011, 17:56:28 por hectorrcm »