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