programa en c para lcd de 2x16 y p16f877
Publicado por Elena (3 intervenciones) el 30/10/2006 10:35:54
Hola buenas!Llevo ya con un problema ma´s de un mes y es que por mucho que programo n ensamblador el 16f877 para que el lcd me saque unos datos no lo consigo .Los datos provienen del conversor A/D que recoge muestras de sensores. Me sale continuamente una linea negra en la línea inferior del lcd. Por ello he pensado que quizá haya diferencias entre el 16f877 y el 16f877a?sería más fácil programarlo en c, aunque tenga que aprenser un poco?hay algún programa para poderlo hacer que me podais dejar?Con una muestra como esta para la librería para el control de lcd, testeo las patillasdel pic por donde saco los datos hacia el lcd y obtengo 0000 0010 , cuando he dicho que saque un uno asci. ESTOY DESESPERADA NECESITO AYUDA PORQUE ES QUE NO TENGO NI IDEA DE CUAL ES EL PROBLEMA!!!!!!!!!! AGRADEZCO MUCHISIMO CUALQUIER AYUDA
LCD_ENABLE
BSF PORTC,2 ;ENABLE, ACTIVAMOS E
NOP ;ESPERAMOS 1US
BCF PORTC,2 ;DISABLE, DESACTIVAMOS E
RETURN
LCD_BUSY
BSF PORTC,1 ;MODO LECTURA, ACTIVAMOS R/^W
BSF STATUS,RP0
MOVLW 0xFF
MOVWF TRISD ;PUERTA D ENTRADAS
BCF STATUS,RP0
BSF PORTC,2 ;ENABLE
NOP ;ESPERAMOS 1US
L_BUSY
BTFSC PORTD,7 ;¿OCUPADO?
B L_BUSY ;ESTA OCUPADO
BCF PORTC,2 ;NO ESTA OCUPADO, DISABLE
BSF STATUS,RP0
CLRF TRISD ;PUERTA B SALIDAS
BCF STATUS,RP0
BCF PORTC,1 ;MODO ESCRITURA, DESACTIVAMOS R/^W
RETURN
LCD_CODIGO
BCF PORTC,1
BCF PORTC,0 ;MODO COMANDO, DESACTIVAMOS RS
MOVWF DATO_CODIGO
CALL LCD_BUSY
MOVF DATO_CODIGO,W
MOVWF PORTD ;SACA EL CODIGO DE LA INSTRUCCIÓN QUE ESTA EN W
B LCD_ENABLE; PULSO DE ENABLE PARA TRANSMITIR COMANDO
LCD_DATOS
BCF PORTC,0 ;MODO COMANDO
MOVWF DATO_CODIGO
CALL LCD_BUSY
MOVF DATO_CODIGO,W
MOVWF PORTD ;SACAMOS EL DATO EN ASCII PREVIAMENTE SITUADO EN W
BSF PORTC,0 ;MODO DATO, ACTIVAMOS RS
B LCD_ENABLE
LCD_INICIALIZACION
BCF STATUS,RP1
BCF STATUS,RP0
MOVLW b'00111000' ; BORRAMOS LCD Y VAMOS A HOME
CALL LCD_CODIGO
MOVLW b'00001110' ; LCD SE INCREMENTA UNA UNIDAD
CALL LCD_CODIGO
MOVLW b'00000110' ; LCD ON, CURSOR OFF, PARPADEO OFF
CALL LCD_CODIGO
RETURN
LCD_PUERTOS
BCF STATUS,RP1
BSF STATUS,RP0
BCF TRISB,0
BCF TRISB,2
BCF TRISB,4
BCF TRISB,5
CLRF TRISD ;PUERTO D SALIDAS
BCF TRISC,0
BCF TRISC,1
BCF TRISC,2
BCF TRISC,3
BCF TRISC,4
BCF TRISC,5
BCF TRISE,2
BCF STATUS,RP0
MOVLW b'00000000'
BCF PORTC,0 ;RS
BCF PORTC,2 ;E
BCF PORTC,1 ;R/W
RETURN
RETARDO_5MS
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0X21
MOVWF CONTADOR_1
CLRF CONTADOR
RETARDO_1
DECFSZ CONTADOR,F
B RETARDO_1
CLRF CONTADOR
DECFSZ CONTADOR_1,F
B RETARDO_1
RETURN
LCD_ENABLE
BSF PORTC,2 ;ENABLE, ACTIVAMOS E
NOP ;ESPERAMOS 1US
BCF PORTC,2 ;DISABLE, DESACTIVAMOS E
RETURN
LCD_BUSY
BSF PORTC,1 ;MODO LECTURA, ACTIVAMOS R/^W
BSF STATUS,RP0
MOVLW 0xFF
MOVWF TRISD ;PUERTA D ENTRADAS
BCF STATUS,RP0
BSF PORTC,2 ;ENABLE
NOP ;ESPERAMOS 1US
L_BUSY
BTFSC PORTD,7 ;¿OCUPADO?
B L_BUSY ;ESTA OCUPADO
BCF PORTC,2 ;NO ESTA OCUPADO, DISABLE
BSF STATUS,RP0
CLRF TRISD ;PUERTA B SALIDAS
BCF STATUS,RP0
BCF PORTC,1 ;MODO ESCRITURA, DESACTIVAMOS R/^W
RETURN
LCD_CODIGO
BCF PORTC,1
BCF PORTC,0 ;MODO COMANDO, DESACTIVAMOS RS
MOVWF DATO_CODIGO
CALL LCD_BUSY
MOVF DATO_CODIGO,W
MOVWF PORTD ;SACA EL CODIGO DE LA INSTRUCCIÓN QUE ESTA EN W
B LCD_ENABLE; PULSO DE ENABLE PARA TRANSMITIR COMANDO
LCD_DATOS
BCF PORTC,0 ;MODO COMANDO
MOVWF DATO_CODIGO
CALL LCD_BUSY
MOVF DATO_CODIGO,W
MOVWF PORTD ;SACAMOS EL DATO EN ASCII PREVIAMENTE SITUADO EN W
BSF PORTC,0 ;MODO DATO, ACTIVAMOS RS
B LCD_ENABLE
LCD_INICIALIZACION
BCF STATUS,RP1
BCF STATUS,RP0
MOVLW b'00111000' ; BORRAMOS LCD Y VAMOS A HOME
CALL LCD_CODIGO
MOVLW b'00001110' ; LCD SE INCREMENTA UNA UNIDAD
CALL LCD_CODIGO
MOVLW b'00000110' ; LCD ON, CURSOR OFF, PARPADEO OFF
CALL LCD_CODIGO
RETURN
LCD_PUERTOS
BCF STATUS,RP1
BSF STATUS,RP0
BCF TRISB,0
BCF TRISB,2
BCF TRISB,4
BCF TRISB,5
CLRF TRISD ;PUERTO D SALIDAS
BCF TRISC,0
BCF TRISC,1
BCF TRISC,2
BCF TRISC,3
BCF TRISC,4
BCF TRISC,5
BCF TRISE,2
BCF STATUS,RP0
MOVLW b'00000000'
BCF PORTC,0 ;RS
BCF PORTC,2 ;E
BCF PORTC,1 ;R/W
RETURN
RETARDO_5MS
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0X21
MOVWF CONTADOR_1
CLRF CONTADOR
RETARDO_1
DECFSZ CONTADOR,F
B RETARDO_1
CLRF CONTADOR
DECFSZ CONTADOR_1,F
B RETARDO_1
RETURN
Valora esta pregunta


0