TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: asogen en 14 de Septiembre de 2010, 22:09:08
-
HOLA, ME ENCONTRE UNAS MACRO PARA MANDAR DATOS AL LCD SIN NECESIDAD DE TABLAS, EL CASO ES QUE FUNCIONAN BIEN PERO SI YO LE PONGO MAS DE 15 FRASES EL LCD SE VA A LA POSICION 1 PORQUE??? AQUI ESTA EL CODIGO
LIST P=16F877A
INCLUDE P16F877A.INC
CBLOCK 0X20
VAR1,VAR2,VAR3, PDel0,POINTER,AUX_LCD,AUX_LETRA, PDel1,R5,ASO
PDel2,TEMPSTAT,TEMPW,VAL1,VAR,HEX1,POS,AUX4,MEN
ENDC
#DEFINE PORT_LCD PORTC ;DEFINE EL PUERTO PARA EL BUS DE DATOS (4 PINES DE MENOR PESO)
LCD_PUTS MACRO STRING
MESSG "El parametro de 'LCD_PUTS' es el nombre de una TABLA de DATOS"
LOCAL LCD_MAS
BSF PORTC,4 ;LINEA 'RS' EN ALTO PARA OPCION DE DATO A VISUALIZAR EN LCD
CLRF POINTER
LCD_MAS MOVF POINTER,W
CALL STRING
MOVWF AUX_LCD
MOVF AUX_LCD,F
BTFSC STATUS,Z
GOTO $+4
CALL LCD_WRITE
INCF POINTER,F
GOTO LCD_MAS
ENDM
LCD_GOTO MACRO line,position
if line>2
error "Linea LCD 1 ó 2!... Corregir parametro en llamado a macro LCD_GOTO"
endif
MOVLW position
if line==1
ADDLW 0X7F
else
ADDLW 0XBF
endif
BCF PORTC,4 ; LINEA 'RS' EN BAJO PARA OPCION DE COMANDO O INSTRUCCION
CALL LCD_WRITE
ENDM
#DEFINE PLAY TRISB,0;
#DEFINE MAS TRISD,5 ;
#DEFINE ENTER TRISC,6
#DEFINE MENOS TRISD,6 ;
#DEFINE ESC TRISC,7
;*********************************************************
ORG 00
GOTO INICIO
ORG 05
;------------------------------------------------------------
FRA
FRA1 ADDWF PCL,F
DT "HOLA ",0X0
FRA2 ADDWF PCL,F
DT "SOY UN . ",0X0
FRA3 ADDWF PCL,F
DT "ESTUDIANTE ",0X0
FRA4 ADDWF PCL,F
DT "DE TECNOLOGIA ",0X0
FRA5 ADDWF PCL,F
DT " ELECTRONICA ",0X0
FRA6 ADDWF PCL,F
DT " DEL",0X0
FRA7 ADDWF PCL,F
DT "PASCUAL BRAVO ",0X0
FRA8 ADDWF PCL,F
DT " EN EL ",0X0
FRA9 ADDWF PCL,F
DT " SEMESTRE ",0X0
FRA10 ADDWF PCL,F
DT " NUMERO ",0X0
FRA11 ADDWF PCL,F
DT " CINCO ",0X0
FRA12 ADDWF PCL,F
DT " DE LA ",0X0
FRA13 ADDWF PCL,F
DT " CIUDAD ",0X0
FRA14 ADDWF PCL,F
DT " DE MEDELLIN ",0X0
FRA15 ADDWF PCL,F
DT "ANTIOQUIA ",0X0
FRA16 ADDWF PCL,F
DT " COLOMBIA ",0X0
FRA17 ADDWF PCL,F
DT " uno ",0X0
FRA18 ADDWF PCL,F
DT " dos ",0X0
INICIO CLRF PORT_LCD
BSF STATUS,RP0 ; CAMBIO A BANCO 1
MOVLW 07
MOVWF OPTION_REG; habilito las res. De pull-up en el port B y la máxima Pres
MOVLW 0XF0
MOVWF PORTB; habilita la part alta de portB como entrada
MOVLW B'11000000'
MOVWF PORT_LCD ;Configura lineas como salidas en el puerto seleccionado
CLRF PORTC
BSF TRISC,6
BSF TRISC,7
MOVLW 0XFF
MOVWF TRISA
BANKSEL ADCON1
CLRF TRISB
BSF TRISB,0
BSF TRISB,1
MOVLW .255
BSF TRISE,0
BSF TRISE,1
BCF TRISE,2
BCF TRISE,PSPMODE ; HABILITACION PARA PUERTO D
MOVLW .255
MOVWF TRISD
MOVLW B'10000101' ;B'10000101' ;
MOVWF ADCON1
BANKSEL ADCON0
MOVLW B'01000001' ;ENIENDE CONVERSION, RA0 CANAL ENTRADA
MOVWF ADCON0
CALL DELAY
MOVLW B'01001000'
MOVWF OPTION_REG
BCF STATUS,RP0 ; CAMBIO A BANCO 0
MOVLW .2
MOVWF ASO
CLRF PORTD
CLRF PORTA
CLRF PORTE
CLRF PORTB
GOTO PROGRAMA
;++++++++++++++++++++++++
PROGRAMA
CALL LCD_INIT
CALL BORDISP
CALL BORDISP
LCD_GOTO 1,1
LCD_PUTS FRA1
LCD_GOTO 2,1
LCD_PUTS FRA2
CALL Delay15Ms
CALL DEL1SEG
CALL DEL1SEG
CALL BORDISP
LCD_GOTO 1,1
LCD_PUTS FRA2
LCD_GOTO 2,1
LCD_PUTS FRA3
CALL Delay15Ms
CALL DEL1SEG
CALL DEL1SEG
CALL BORDISP
LCD_GOTO 1,1
LCD_PUTS FRA4
LCD_GOTO 2,1
LCD_PUTS FRA5
CALL Delay15Ms
CALL DEL1SEG
CALL DEL1SEG
CALL BORDISP
LCD_GOTO 1,1
LCD_PUTS FRA6
LCD_GOTO 2,1
LCD_PUTS FRA7
CALL Delay15Ms
CALL DEL1SEG
CALL DEL1SEG
CALL BORDISP
LCD_GOTO 1,1
LCD_PUTS FRA8
LCD_GOTO 2,1
LCD_PUTS FRA9
CALL Delay15Ms
CALL DEL1SEG
CALL DEL1SEG
CALL BORDISP
LCD_GOTO 1,1
LCD_PUTS FRA9
LCD_GOTO 2,1
LCD_PUTS FRA10
CALL Delay15Ms
CALL DEL1SEG
CALL DEL1SEG
CALL BORDISP
LCD_GOTO 1,1
LCD_PUTS FRA11
LCD_GOTO 2,1
LCD_PUTS FRA12
CALL Delay15Ms
CALL DEL1SEG
CALL DEL1SEG
CALL BORDISP
LCD_GOTO 1,1
LCD_PUTS FRA13
LCD_GOTO 2,1
LCD_PUTS FRA14
CALL Delay15Ms
CALL DEL1SEG
CALL DEL1SEG
CALL BORDISP
LCD_GOTO 1,1
LCD_PUTS FRA15
LCD_GOTO 1,2
LCD_PUTS FRA16
CALL Delay15Ms
CALL DEL1SEG
CALL DEL1SEG
CALL BORDISP
LCD_GOTO 1,1
LCD_PUTS FRA17
LCD_GOTO 1,2
LCD_PUTS FRA18
CALL Delay15Ms
CALL DEL1SEG
CALL DEL1SEG
GOTO PROGRAMA
DELAY MOVLW .3
MOVWF R5
DELAY1 DECFSZ R5
GOTO DELAY1
RETURN
BORDISP
BCF PORTC,4 ; LINEA 'RS' EN BAJO PARA OPCION DE COMANDO O INSTRUCCION
MOVLW 0X01 ;BORRA CONTENIDO DE AMBAS LINEAS
CALL LCD_WRITE
CALL Delay5Ms
RETURN
LCD_INIT BCF PORTC,4 ; LINEA 'RS' EN BAJO PARA OPCION DE COMANDO O INSTRUCCION
CALL Delay15Ms
MOVLW 0XF0
ANDWF PORT_LCD,W
IORLW 0X03
MOVWF PORT_LCD
BSF PORTC,5 ;PERMITE GENERAR EL PULSO DE VALIDACION SOBRE LA LINEA 'E' DEL LCD
NOP ;NECESARIO PARA CRISTALES DE ALTA FRECUENCIA
BCF PORTC,5 ; VALIDACION E DEL DISPLAY
CALL Delay5Ms
BSF PORTC,5 ; VALIDACION E DEL DISPLAY ;PERMITE GENERAR EL PULSO DE VALIDACION SOBRE LA LINEA 'E' DEL LCD
NOP ;NECESARIO PARA CRISTALES DE ALTA FRECUENCIA
BCF PORTC,5 ; LINEA E DE DISPLAY
CALL Delay100Us
BSF PORTC,5 ; LINEA E DE DISPLAY ;PERMITE GENERAR EL PULSO DE VALIDACION SOBRE LA LINEA 'E' DEL LCD
NOP ;NECESARIO PARA CRISTALES DE ALTA FRECUENCIA
BCF PORTC,5 ; LINEA E DE DISPLAY
CALL Delay5Ms
MOVLW 0XF0
ANDWF PORT_LCD,W
IORLW 0X02 ;Modo a 4-Bits
MOVWF PORT_LCD
BSF PORTC,5 ; VALIDACION E DEL DISPLAY ;PERMITE GENERAR EL PULSO DE VALIDACION SOBRE LA LINEA 'E' DEL LCD
NOP ;NECESARIO PARA CRISTALES DE ALTA FRECUENCIA
BCF PORTC,5 ; LINEA E DE DISPLAY
CALL Delay40Us
MOVLW 0X28 ;4-Bits, 2-Lineas activas, Tamaño Fuente 5x8
CALL LCD_WRITE
MOVLW 0X08 ;Display Off
CALL LCD_WRITE
MOVLW 0X0F ;Display On, Display Cursor, Blink Curson ON
CALL LCD_WRITE
MOVLW 0X06 ;Entry Mode
CALL LCD_WRITE
RETURN
;Esta SUBRUTINA permite enviar COMANDO cualquiera a la LCD (INSTRUCCION de CONFIGURACION o CONTROL)
;La Instruccion a enviar necesita ser cargado en 'W' antes de llamar la Subrutina
LCD_INSTRUCCION BCF PORTC,4 ; LINEA 'RS' EN BAJO PARA OPCION DE COMANDO O INSTRUCCION
CALL LCD_WRITE
RETURN
;Esta Subrutina es la que se encarga de enviar un BYTE a la LCD (Bits 7:4, luego Bits 3:0)
;No es una subrutina de uso directo de usuario.
LCD_WRITE MOVWF AUX_LCD
MOVLW 0XF0
ANDWF PORT_LCD,F
SWAPF AUX_LCD,W
ANDLW 0X0F
IORWF PORT_LCD,F
BSF PORTC,5 ; LINEA E DE DISPLAY ;PERMITE GENERAR EL PULSO DE VALIDACION SOBRE LA LINEA 'E' DEL LCD
NOP ;NECESARIO PARA CRISTALES DE ALTA FRECUENCIA
BCF PORTC,5 ; LINEA E DE DISPLAY
MOVLW 0XF0
ANDWF PORT_LCD,F
MOVLW 0X0F
ANDWF AUX_LCD,W
IORWF PORT_LCD,F
BSF PORTC,5 ; LINEA E DE DISPLAY ;PERMITE GENERAR EL PULSO DE VALIDACION SOBRE LA LINEA 'E' DEL LCD
NOP ;NECESARIO PARA CRISTALES DE ALTA FRECUENCIA
BCF PORTC,5 ; LINEA E DE DISPLAY
CALL Delay40Us
RETURN
;-------------------------------------------------------------
; Code generated by PDEL ver 1.0 on 10/05/2005 at 22:31:21
; Description: Waits 40 cycles
;-------------------------------------------------------------
Delay40Us movlw .8 ; 1 set number of repetitions
movwf PDel0 ; 1 |
PLoop01 clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) is the time over?
goto PLoop01 ; 2 no, loop
PDelL11 goto PDelL21 ; 2 cycles delay
PDelL21 clrwdt ; 1 cycle delay
return ; 2+2 Done
;-------------------------------------------------------------
; Code generated by PDEL ver 1.0 on 11/05/2005 at 16:12:21
; Description: Waits 15000 cycles
;-------------------------------------------------------------
Delay15Ms movlw .21 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop12 movlw .142 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop22 clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel1, 1 ; 1 + (1) is the time over? (A)
goto PLoop22 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (B)
goto PLoop12 ; 2 no, loop
clrwdt ; 1 cycle delay
return ; 2+2 Done
;-------------------------------------------------------------
;-------------------------------------------------------------
; Code generated by PDEL ver 1.0 on 11/05/2005 at 16:32:48
; Description: Waits 100 cycles
;-------------------------------------------------------------
Delay100Us movlw .23 ; 1 set number of repetitions
movwf PDel0 ; 1 |
PLoop03 clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) is the time over?
goto PLoop03 ; 2 no, loop
PDelL13 goto PDelL23 ; 2 cycles delay
PDelL23 clrwdt ; 1 cycle delay
return ; 2+2 Done
;-------------------------------------------------------------
;-------------------------------------------------------------
; Code generated by PDEL ver 1.0 on 11/05/2005 at 16:34:11
; Description: Waits 5000 cycles
;-------------------------------------------------------------
Delay5Ms movlw .6 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop14 movlw .207 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop24 clrwdt ; 1 clear watchdog
decfsz PDel1, 1 ; 1 + (1) is the time over? (A)
goto PLoop24 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (B)
goto PLoop14 ; 2 no, loop
PDelL14 goto PDelL24 ; 2 cycles delay
PDelL24 clrwdt ; 1 cycle delay
return ; 2+2 Done
DEL1SEG
movlw .14 ; 1 set number of repetitions (C)
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
DEL1MSG
movlw .156 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop1A movlw .213 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop2A clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel1, 1 ; 1 + (1) is the time over? (A)
goto PLoop2A ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (B)
goto PLoop1A ; 2 no, loop
PDelL1A goto PDelL2 ; 2 cycles delay
PDelL2A goto PDelL3 ; 2 cycles delay
PDelL3 clrwdt ; 1 cycle delay
return ;
;-------------------------------------------------------------
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 26/08/05 Hs 12:13:05
; Descripcion: Delay 5000000 ciclos
;-------------------------------------------------------------
;-------------------------------------------------------------
;-------------------------------------------------------------
;*************
END