Translate, Traductor

jueves, 31 de mayo de 2012

Control de un modulo LCD con un PIC 16F883

Programa que sirve para el control de un modulo LCD (si requiere saber sobre los módulos LCD de un paseo por http://xorwf.blogspot.com/2010/08/modulos-lcd-con-pics.html )

El programa esta hecho para un microcontrolador PIC 16F883 y para ser usado o con otro microcontrolador se necesita cambiar en el código la referencia del PIC y los bit's de configuración.

En el caso de un PIC 16F886 solo necesitaríamos cambiar la referencia del micro en las directivas LIST e INCLUDE

Circuito esquemático



Código fuente para el PIC



LIST P=16F883
INCLUDE P16F883.INC

ERRORLEVEL -302

 __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF

#DEFINE CONTROL PORTA
#DEFINE DATO8BITS PORTB
#DEFINE RS 0
#DEFINE   EN 1
#DEFINE HOME      B'00000011'
#DEFINE BORRAR    B'00000001'
#DEFINE MOV_IZQ   B'00011100' ;OKMUEVE DISP Y CUR IZQ
#DEFINE MOV_DER   B'00011000'
#DEFINE MOV_C_IZQ B'00010000' ;OKMUEVO CURSOR IZQUIERDA
#DEFINE MOV_C_DER B'00010100' ;OKMUEVO CURSOR DERECHA
#DEFINE TXT_IZQ   B'00000111' ;DESPLAZO EL TEXTO A LA IZQUIERDA CUANDO ESCRIBO UN CARACTER
#DEFINE TXT_DER   B'00000100' ;DESPLAZO EL TEXTO A LA DERECHA CUANDO ESCRIBO UN CARACTER



CBLOCK 0X20
MPDEL0, PDEL0, PDEL1, PDEL2, VAR_CURSOR
VECES_IZQ, VECES_DER, VAL1, PDel0, VECES_M, MOV_TAB
ENDC

ORG 00H
GOTO CONFIGURA

;-------------------------------------------------------------
; CODE GENERATED BY PDEL  VER 1.0  ON 08/06/2007 AT 05:50:40 P.M.
; DESCRIPTION: WAITS 1000000 CYCLES
;-------------------------------------------------------------
PDELAY   MOVLW     .14       ; 1 SET NUMBER OF REPETITIONS (C)
PDELAY2         MOVWF     PDEL0     ; 1 |
PLOOP0   MOVLW     .72       ; 1 SET NUMBER OF REPETITIONS (B)
        MOVWF     PDEL1     ; 1 |
PLOOP1   MOVLW     .247       ; 1 SET NUMBER OF REPETITIONS (A)
        MOVWF     PDEL2     ; 1 |
PLOOP2   CLRWDT           ; 1 CLEAR WATCHDOG
        DECFSZ     PDEL2,1   ; 1 + (1) IS THE TIME OVER? (A)
        GOTO       PLOOP2     ; 2 NO, LOOP
        DECFSZ     PDEL1,1 ; 1 + (1) IS THE TIME OVER? (B)
        GOTO       PLOOP1     ; 2 NO, LOOP
        DECFSZ     PDEL0,1 ; 1 + (1) IS THE TIME OVER? (C)
        GOTO       PLOOP0     ; 2 NO, LOOP
PDELL1   GOTO PDELL2         ; 2 CYCLES DELAY
PDELL2   CLRWDT               ; 1 CYCLE DELAY
        RETURN               ; 2+2 DONE
;-------------------------------------------------------------



MPDELAY   MOVLW     .100;.248       ; 1 SET NUMBER OF REPETITIONS
        MOVWF     MPDEL0     ; 1 |
MPLOOP0   CLRWDT           ; 1 CLEAR WATCHDOG
        DECFSZ     MPDEL0,1   ; 1 + (1) IS THE TIME OVER?
        GOTO       MPLOOP0     ; 2 NO, LOOP
MPDELL1   GOTO MPDELL2         ; 2 CYCLES DELAY
MPDELL2   CLRWDT               ; 1 CYCLE DELAY
        RETURN               ; 2+2 DONE


DATO MOVWF DATO8BITS
BSF CONTROL,RS
BSF CONTROL,EN
CALL MPDELAY
BCF CONTROL,EN
CALL MPDELAY
RETURN

INSTRUC MOVWF PORTB
BCF CONTROL,RS
BSF CONTROL,EN
CALL MPDELAY
CALL MPDELAY
BCF CONTROL,EN
CALL MPDELAY
CALL MPDELAY
RETURN

INIT_LCD MOVLW .1
MOVWF PDEL0
CALL PLOOP0
BCF CONTROL,RS
BCF CONTROL,EN
MOVLW B'00111000' ;8 BITS 2 LINEAS 7X5
CALL INSTRUC
MOVLW B'00001111' ;ON LCD, ON CURSOR, ON INTER
CALL INSTRUC
MOVLW BORRAR
CALL INSTRUC
RETURN


LINE_2 MOVLW .64
GOTO_A MOVWF VAR_CURSOR
MOVLW HOME
CALL INSTRUC
SEC_LINE MOVLW MOV_C_DER
CALL INSTRUC
DECFSZ VAR_CURSOR,F
GOTO SEC_LINE
RETURN

DESP_IZQ MOVWF VECES_IZQ
INCF VECES_IZQ,F
DESP_I NOP
DECFSZ VECES_IZQ,F
GOTO DESPI
RETURN
DESPI MOVLW MOV_C_IZQ
CALL INSTRUC
CALL PDELAY
GOTO DESP_I


DESP_DER MOVWF VECES_DER
INCF VECES_DER,F
DESP_D NOP
DECFSZ VECES_DER,F
GOTO DESPD
RETURN
DESPD MOVLW MOV_C_DER
CALL INSTRUC
CALL PDELAY
GOTO DESP_D

BORRAR_R MOVLW BORRAR
CALL INSTRUC
RETURN

HOME_R MOVLW HOME
CALL INSTRUC
RETURN


MARQUESINA MOVWF VECES_M
NOP
MARQ_1 DECFSZ VECES_M,F
GOTO MARQ
RETURN
MARQ MOVLW TXT_IZQ
CALL INSTRUC
MOVLW ' '
CALL DATO
CALL PDELAY
GOTO MARQ_1



ELEC ADDWF PCL,F
DT "ELECTRONICA"



CONFIGURA NOP
BANKSEL ANSEL
    CLRF    ANSEL
    CLRF    ANSELH
    BANKSEL TRISB
    MOVLW    B'01101100'
    MOVWF    OSCCON
    MOVLW    B'00000000'
    MOVWF    TRISA
    MOVLW    B'00000000'
    MOVWF    TRISB
    MOVLW    B'00000000'
    MOVWF    TRISC
    BANKSEL PORTB





EJEMPLO

CALL INIT_LCD
CALL MPDELAY

CLRF MOV_TAB
TAB1 MOVF MOV_TAB,W
CALL ELEC
CALL DATO
INCF MOV_TAB,F
MOVLW .11
XORWF MOV_TAB,W
BTFSS STATUS,Z
GOTO TAB1
CLRF MOV_TAB


CALL PDELAY





INICIO NOP



GOTO INICIO


END

No hay comentarios:

Publicar un comentario