• Viernes 29 de Marzo de 2024, 12:59

Autor Tema:  Por favor, que alguien me ayude con el LCD......  (Leído 1861 veces)

ElFabro

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Por favor, que alguien me ayude con el LCD......
« en: Domingo 6 de Diciembre de 2009, 02:18 »
0
Hola, por favor, alguien me puede dar una mano?, estoy trabajando con un microcontrolador qy4A y un display lcd de 16x2 lineas. Lo que quiero es aunque sea poder escribir algo en el lcd, la interfaz es de 8 bits, no de 4 bits. Hasta ahora no logré hacerlo andar.
Buaqué de todo en internet, todas las inicializaciones que encontré para el lcd son totalmente diferentes. No se supone que los pasos para inicializar el lcd son iguales para cualquier lcd alfanumerico?.
Adjunto a continuacion el codigo de mi programa.
Por favor que alguien me de una mano.  :(
Saludos.
Chau.

*********************************************************************************
* Definicion del mapa de Memoria del 68HC908QY4 (68HC908QT1-2/QY1-2)            *
*********************************************************************************

RAM_START       EQU     $0080           ;128 Bytes
ROM_START       EQU     $EE00           ;1,5KBytes, Debería ser $F800 para el QY1
VECTORES        EQU     $FFDE           ;Comienzo de la Tabla de Vectores

E               EQU     0
RS              EQU     4
RW              EQU     5

*********************************************************************************
* Definicion de las variables de RAM                                            *
*********************************************************************************

        org     RAM_START

CONT            rmb     1       ;Variable Contador (1 BYTE DE MEMORIA. UBICADO EN LA POSICION $0080.)
CONT1           rmb     1       ;VARIABLE CONTADOR (1 BYTE DE MEMORIA. UBICADO EN LA POSICION $0081.)
MAX             rmb     1       ;VARIABLE CONTADOR (1 BYTE DE MEMORIA. UBICADO EN LA POSICION $0082.)
CARACTER        rmb     1       ;VARIABLE CARACTER (1 BYTE DE MEMORIA. UBICADO EN LA POSICION $0083.)

*********************************************************************************
* PROGRAMA PRINCIPAL - En este punto arranca el micro luego del Reset           *
*********************************************************************************

$base    10t                            ;Base decimal por Default
$Include        'qtqy_registers.inc'    ;Definiciones de Reg. para QT, QY


        org     ROM_START

start:
        rsp                             ;Reset del stack pointer
        clra                            ;Limpio registros
        clrh
        clrx
        cli                             ;Borro Bit I (habilita interrupciones)

;------ PROGRAMACION DE LOS DISTINTOS MODULOS (HC08) ----------------------------

;------ Programo el CONFIG ------------------------------------------------------
        mov     #%00001001,config1      ;b7=0 COP Reset cycle (largo)
                                        ;b6=0 LVI deshabilitado en Modo Stop
                                        ;b5=0 Señal Reset desde LVI habilida
                                        ;b4=0 LVI habilitado
                                        ;b3=1 LVI opera en modo 5V
                                        ;b2=0 Recup.M/STOP en 4096 2OSCOUT cycl.
                                        ;b1=0 Instruccion STOP Deshabilitada
                                        ;b0=1 Modulo COP Deshabilitado

        mov     #%00000000,config2      ;b7=0 Pull-Up Interna Conectada (IRQ1)
                                        ;b6=0 Funcion Pin IRQ1 desactivada
                                        ;b4,3=00 selecciona Oscilador Interno
                                        ;b0=0 Funcion Pin RST (Reset) inactiva
        nop                             ;Las inst. NOP hacen de Delay para
        nop                             ;  asegurar la configuracion

;------ Programo el Puerto a ----------------------------------------------------

        mov     #%00110001,ddra         ;Programo Pta0, 4, 5 como salida

;------ Programo el Puerto b ----------------------------------------------------

        mov     #%11111111,ddrb         ;Programo Puerto B como Salida
        mov     #%00000000,portb
;--------------------------------------------------------------------------------

        clr MAX
        mov #$FF,MAX

        clr CONT
        mov MAX,CONT

        clr CONT1
        mov #$10,CONT1

;---------------- Programa ------------------------------------------------------

        jsr InitLCD

        mov 'H',CARACTER
        jsr Mandar
        mov 'O',CARACTER
        jsr Mandar
        mov 'L',CARACTER
        jsr Mandar
        mov 'A',CARACTER
        jsr Mandar

Lazo:

        bra Lazo

;---------------- Subrutina de Inicializacion del LCD ---------------------------

InitLCD:

        jsr Ret                         ;Demora de 15 mseg o mas

        bclr E,Porta
        bclr RS,Porta
        bclr RW,Porta

        mov #$38,Portb                  ;Function Set

        bset E,Porta

        mov #$54,MAX                    ;Para producir un retardo de aprox 5 mseg
        jsr Ret                         ;Demora de 5 mseg

        bclr E,Porta
        bclr RS,Porta
        bclr RW,Porta

        mov #$38,Portb                  ;Function Set

        bset E,Porta

        mov #$02,MAX                    ;Para producir un retardo de aprox 100 useg
        jsr Ret                         ;Demora de 100 useg o mas

        bclr E,Porta
        bclr RS,Porta
        bclr RW,Porta

        mov #$38,Portb                  ;Function Set

        bset E,Porta

        mov #$54,MAX                    ;Para producir un retardo de aprox 5 mseg
        jsr Ret                         ;Demora de 5 mseg

        bclr E,Porta
        bclr RS,Porta
        bclr RW,Porta

        mov #$38,Portb                  ;Function Set

        bset E,Porta

        mov #$01,MAX                    ;Para producir un retardo de aprox 40 useg
        jsr Ret                         ;Demora de 40 useg o mas

        bclr E,Porta
        bclr RS,Porta
        bclr RW,Porta

        mov #$38,Portb                  ;Function Set

        bset E,Porta

        mov #$01,MAX                    ;Para producir un retardo de aprox 40 useg
        jsr Ret                         ;Demora de 40 useg o mas

        bclr E,Porta
        bclr RS,Porta
        bclr RW,Porta

        mov #$08,Portb                  ;Display OF. Apagar pantalla,
                                        ;quitar cursor
        bset E,Porta

        mov #$01,MAX                    ;Para producir un retardo de aprox 40 useg
        jsr Ret                         ;Demora de 40 useg o mas

        bclr E,Porta
        bclr RS,Porta
        bclr RW,Porta

        mov #$01,Portb                  ;Display Clear

        bset E,Porta

        mov #$22,MAX                    ;Para producir un retardo de aprox 2 mseg
        jsr Ret                         ;Demora de 2 mseg

        bclr E,Porta
        bclr RS,Porta
        bclr RW,Porta

        mov #$06,Portb                  ;Entry Mode Set

        bset E,Porta

        mov #$01,MAX                    ;Para producir un retardo de aprox 40 useg
        jsr Ret                         ;Demora de 40 useg o mas

        rts

;----------------------- Subrutina para el envio de un caracter al LCD ---------

Mandar:

        lda CARACTER
        bclr E,Porta
        bset RS,Porta
        bclr RW,Porta
        sta Portb
        bset E,Porta
        mov #$02,MAX                    ;Para producir un retardo de aprox 100 useg
        jsr Ret                         ;Demora de aprox 100 useg

        rts

;----------------------- Subrutina de Retardo ----------------------------------

Ret:

        dec CONT        ;4

Ret1:
        nop
        dec CONT1       ;4
        lda CONT1       ;2
        cmp #$00        ;2
        bne Ret1        ;3
        mov #$10,CONT1  ;4
        lda CONT        ;2
        cmp #$00        ;2
        bne Ret         ;3
        mov MAX,CONT    ;4

        rts             ;4

*********************************************************************************
* ADC_ISR - Rutina de Servicio de Conversion Analogico Digital Completada       *
*                                                                               *
*********************************************************************************
adc_isr:
        nop
        rti                     ;retorna

*********************************************************************************
* KEYB_ISR - Keyboard Interrupt Service Routine                                 *
*********************************************************************************
keyb_isr:

        nop

        rti                     ;retorna

*********************************************************************************
* TIM_OV_ISR - Rutina de Servicio de Interrupcion por Overflow del Timer        *
* Es llamada cuando existe un Overflow en el Modulo Contador del Timer, es usada*
* como base de tiempos para la visualizacion en display                         *
*********************************************************************************
tim_ov_isr:

        nop

        rti                             ;retorna

*********************************************************************************
swi_isr:


rti

*********************************************************************************
* TIM_0_ISR - Rutina de Servicio de Interrupcion del Canal 0 del Timer          *
*********************************************************************************
tim_0_isr:

        nop

        rti                     ;retorna

*********************************************************************************
* TIM_1_ISR - Rutina de Servicio de Interrupcion del Canal 1 del Timer          *
*********************************************************************************
tim_1_isr:
        nop
        rti                     ;retorna
*********************************************************************************
* IRQ_ISR - Interrupt Request Service Routine                                   *
*********************************************************************************
irq_isr:
        nop
        rti                     ;retorna

*********************************************************************************
* DUMMY_ISR - Dummy Interrupt Service Routine                                   *
* Rutina de servicio de Interupcion Fantasma, se pone por razones de seguridad  *
*********************************************************************************
dummy_isr:

        rti                     ; vuelve sin hacer nada

*********************************************************************************
* VECTORES - Definicion de Vectores del Sistema                                 *
*********************************************************************************
        org     VECTORES

        dw      adc_isr         ; ADC Conv.Complete Vector      ($FFDE-$FFDF)
        dw      keyb_isr        ; Keyboard Vector               ($FFE0-$FFE1)
        dw      dummy_isr       ; (No Vector Assigned)          ($FFE2-$FFE3)
        dw      dummy_isr       ; (No Vector Assigned)          ($FFE4-$FFE5)
        dw      dummy_isr       ; (No Vector Assigned)          ($FFE6-$FFE7)
        dw      dummy_isr       ; (No Vector Assigned)          ($FFE8-$FFE9)
        dw      dummy_isr       ; (No Vector Assigned)          ($FFEA-$FFEB)
        dw      dummy_isr       ; (No Vector Assigned)          ($FFEC-$FFED)
        dw      dummy_isr       ; (No Vector Assigned)          ($FFEE-$FFEF)
        dw      dummy_isr       ; (No Vector Assigned)          ($FFF0-$FFF1)
        dw      tim_ov_isr      ; TIM1 Overflow Vector          ($FFF2-$FFF3)
        dw      tim_1_isr       ; TIM1 Channel 1 Vector         ($FFF4-$FFF5)
        dw      tim_0_isr       ; TIM1 Channel 0 Vector         ($FFF6-$FFF7)
        dw      dummy_isr       ; (No Vector Assigned)          ($FFF8-$FFF9)
        dw      irq_isr         ; ~IRQ1                         ($FFFA-$FFFB)
        dw      dummy_isr       ; SWI Vector                    ($FFFC-$FFFD)
        dw      start           ; Reset Vector                  ($FFFE-$FFFF)

*********************************************************************************
end