manejo de lcd y teclado

14
MANEJO DE LCD Y TECLADO 1. Realizar un programa que muestre un mensaje en la primera línea y segunda línea de un LCD que se desplacen CÍCLICAMENTE de izquierdo a derecha, utilice la tabla de instrucciones del LCD, para realizar el programa. list p=17f877a include "p16f877a.inc" CONT1 EQU 20H CONT2 EQU 21H DATOH EQU 23H DATOL EQU 24H INDICE EQU 25H GOTO INICIO RETARDO MOVWF CONT1 ;1 CICLO BUCLE2 MOVLW .249 ;X VECES MOVWF CONT2 ;X VECES BUCLE1 NOP ;X.Y DECFSZ CONT2,1 ;X((Y-1)+2) GOTO BUCLE1 ;2X(Y-1) DECFSZ CONT1,1 ;(X-1)+2 GOTO BUCLE2 ;2(X-1) RETURN SUB_INI MOVLW .15 CALL RETARDO ;DAMOS UN RETRDO MOVLW .3 MOVWF PORTC ;COMENZAMOS LA INCIALIZACIÓN DEL LCD BSF PORTA,1 BCF PORTA,1 MOVLW .5 CALL RETARDO MOVLW .3 MOVWF PORTC ;FUNCTION SET BSF PORTA,1 BCF PORTA,1 MOVLW .1 CALL RETARDO MOVLW .3 MOVWF PORTC ;FUNCTION SET BSF PORTA,1 BCF PORTA,1

Upload: danna-juju

Post on 15-Sep-2015

244 views

Category:

Documents


5 download

DESCRIPTION

manejo de teclado pic 16f877a

TRANSCRIPT

MANEJO DE LCD Y TECLADO

1. Realizar un programa que muestre un mensaje en la primera lnea y segunda lnea de un LCD que se desplacen CCLICAMENTE de izquierdo a derecha, utilice la tabla de instrucciones del LCD, para realizar el programa.

list p=17f877ainclude "p16f877a.inc"

CONT1 EQU 20HCONT2 EQU 21HDATOH EQU 23HDATOL EQU 24HINDICEEQU25HGOTO INICIORETARDOMOVWF CONT1;1 CICLOBUCLE2MOVLW .249;X VECESMOVWF CONT2;X VECESBUCLE1NOP;X.YDECFSZ CONT2,1;X((Y-1)+2)GOTO BUCLE1;2X(Y-1)DECFSZ CONT1,1;(X-1)+2GOTO BUCLE2;2(X-1)

RETURNSUB_INIMOVLW.15CALL RETARDO;DAMOS UN RETRDOMOVLW.3MOVWFPORTC;COMENZAMOS LA INCIALIZACIN DEL LCDBSFPORTA,1BCFPORTA,1MOVLW.5CALL RETARDOMOVLW.3MOVWFPORTC;FUNCTION SETBSFPORTA,1BCFPORTA,1MOVLW.1CALL RETARDOMOVLW.3MOVWFPORTC;FUNCTION SETBSFPORTA,1BCFPORTA,1MOVLW.1CALL RETARDOMOVLW.2MOVWFPORTC;FUNCTION SET (MODO 4 BITS)BSFPORTA,1BCFPORTA,1MOVLW.1CALL RETARDORETURNSUB_COMANDO;SUBRUTINA PARA EL ENVIO DE UN COMANDOBCFPORTA,0;RS = 0MOVWFDATOL;DATOL = WANDLW0XF0;W = W AND 0XF0MOVWFDATOH;DATOH = WSWAPFDATOH,1;INVIERTE LOS NIBBLES DE DATOHMOVFDATOH,0;W = DATOHMOVWFPORTC;PUERTO C = DATOHBSFPORTA,1;ENABLE = 1BCFPORTA,1;ENABLE = 0MOVFDATOL,0;W = DATOLANDLW0X0F;W = W AND 0X0FMOVWFPORTC;PORTC = WBSFPORTA,1BCFPORTA,1MOVLW.1CALLRETARDORETURN;RETORNO DE LA SUB-RUTINA

SUB_DATO;SUBRUTINA PARA EL ENVIO DE UN DATOBSFPORTA,0;RS = 1MOVWFDATOL;DATOL = WANDLW0XF0;W = W AND 0XF0MOVWFDATOH;DATOH = WSWAPFDATOH,1;INVIERTE LOS NIBBLES DE DATOHMOVFDATOH,0;W = DATOHMOVWFPORTC;PUERTO C = DATOHBSFPORTA,1;ENABLE = 1BCFPORTA,1;ENABLE = 0MOVFDATOL,0;W = DATOLANDLW0X0F;W = W AND 0X0FMOVWFPORTC;PORTC = WBSFPORTA,1;ENABLE = 1BCFPORTA,1;ENABLE = 0MOVLW.1CALLRETARDORETURN;RETORNO DE LA SUB-RUTINA

SUB_ADDRES;SUBRUTINA PARA SETEAR POSICIONMOVWFDATOH;DATOH = WBSFDATOH,7;SETEA EL BIT 7 DE DATOHMOVFDATOH,0;W = DATOHCALLSUB_COMANDO;ENVIA EL COMANDO DE LA POSICIONRETURN

TABLA; CONTIENE LO QUE SE VA A MOSTRAR EN EL DISPLAYADDWFPCL,1;SUMA W AL PCLDT "ELECTRONICA",0,"ESPE",0;DATOS A SER PRESENTADOS

INICIOBANKSEL TRISACLRFTRISC;PUERTOC SALIDAMOVLW.6MOVWFADCON1CLRFTRISA;PUERTO SALIDA DIGITALBANKSELPORTACALLSUB_INI;INICIALIZA DISPLAYMOVLW0X28CALLSUB_COMANDO;ENVIA EL COMANDO 0X28MOVLW0X06CALLSUB_COMANDO;ENVIA EL COMANDO 0X06MOVLW0X0CCALLSUB_COMANDO;ENVIA EL COMANDO 0X0CMOVLW0X01CALLSUB_COMANDO;ENVIA EL COMANDO 0X01MOVLW.2CALLRETARDOMOVLW0X0ECALLSUB_ADDRES;UBICACIN EN LA PRIMERA FILA DEL DISPLAY CLRFINDICE;LIMPIAR INDICE

MAINMOVFINDICE,0CALLTABLA;OBTIEN EL PRIMER DATO A ENVIARSEXORLW0X00BTFSCSTATUS,Z;COMAPRA CON 0 PARA SABER SI ACABO LA PRIMERA PALABRAGOTOFIN1;SI, SALTA A FIN1CALLSUB_DATO;NO, ENVIA EL DATOINCFINDICE,1;INCCREMENTA EL INDICEGOTOMAIN;INCIA DE NUEVO ESTE PROCESO

FIN1MOVLW0X4ECALLSUB_ADDRES;UBICACIN EN LA SEGUNDA FILA DEL DISPLAYINCFINDICE;INCREMENTA EL INDICE

FIN2MOVFINDICE,0CALLTABLA;MUESTRA EL CONTENIDO DE LA TABLA PARA LA SEGUNDA PALABRAXORLW0X00BTFSCSTATUS,Z;COMAPRA CON 0 PARA SABER SI ACABO LA SEGUNDA PALABRAGOTOFIN;SI, VA A FINCALLSUB_DATO;NO,ENVA EL DATOINCFINDICE,1; INCREMENTA EL INDICEGOTOFIN2;REPITE ESTE PROCESO

FINMOVLW.15CALLRETARDOMOVLW0X18CALLSUB_COMANDO;COMANDO PARA DESPLAZAR EL CONTENIDO DE LA PANTALLAMOVLW.15CALLRETARDOCLRF INDICE;LIMPIA INDICEGOTOFIN;REPITE EL PROCESOEND

Simulacin:

Diagrama De Flujo:

2. Ingresar por teclado un nmero de dos cifras (unidades y decenas) , que se desplieguen en la primera lnea de un LCD. En la segunda lnea del LCD, mostrar el valor multiplicado por 2. Colocar una tecla que borre la pantalla y reinicie la operacin.

listp=16f877ainclude "p16f877a.inc"TECLAEQU 20HUNO EQU 21HDOSEQU 22HD0EQU 23HD1EQU24HD2EQU 25HUNI1EQU 26HUNI2EQU 27HDEC1EQU 28HDEC2EQU 29HCONTDIGEQU2AHDATOLEQU 2BHDATOHEQU 2CH

ORG 00HGOTOINICIOORG004HGOTOSUB_INTORG 005H

SUB_INI;RUTINA DE INICIALIZACIONMOVLW.15CALL RETARDO;ESPERA 15ms PARA INICIALIZRAMOVLW.3MOVWFPORTC;FUNCTION SETBSFPORTA,1;ENABLE = 1BCFPORTA,1;ENABLE= 0MOVLW.5CALL RETARDO;ESPERA 5 msMOVLW.3MOVWFPORTC;FUNCTION SETBSFPORTA,1;ENABLE = 1BCFPORTA,1;ENABLE = 0MOVLW.1CALL RETARDO;ESPERA 1msMOVLW.3MOVWFPORTC;FUNCTION SETBSFPORTA,1;ENABLE = 1BCFPORTA,1;ENABLE = 0MOVLW.1CALL RETARDO;ESPERA 1msMOVLW.2MOVWFPORTC;FUNCTION SET (MODO 4 BITS)BSFPORTA,1;ENABLE = 1BCFPORTA,1;ENABLE = 0MOVLW.1CALL RETARDO;ESPERA 1ms

MOVLW0X28CALLSUB_COMANDO;ENVIA EL COMANDO 0X28MOVLW0X06CALLSUB_COMANDO;ENVIA EL COMANDO 0X06MOVLW0X0CCALLSUB_COMANDO;ENVIA EL COMANDO 0X0CMOVLW0X01CALLSUB_COMANDO;ENVIA EL COMANDO 0X01MOVLW.2CALLRETARDO;ESPERA 2ms

RETURNSUB_COMANDO;RUTINA PARA EL ENVIO DE UN COMANDOBCFPORTA,0;RS = 0MOVWFDATOL;DATOL = WANDLW0XF0;W = W AND 0XF0MOVWFDATOH;DATOH = WSWAPFDATOH,1;INVIERTE LOS NIBBLES DE DATOHMOVFDATOH,0;W = DATOHMOVWFPORTC;PUERTO C = DATOHBSFPORTA,1;ENABLE = 1BCFPORTA,1;ENABLE = 0MOVFDATOL,0;W = DATOLANDLW0X0F;W = W AND 0X0FMOVWFPORTC;PORTC = WBSFPORTA,1;ENABLE = 1BCFPORTA,1;ENABLE = 0MOVLW.1CALLRETARDO;ESPERA 1msRETURN;RETORNO DE LA SUB-RUTINA

SUB_DATO;RUTINA PARA EL ENVIO DE UN DATOBSFPORTA,0;RS = 1MOVWFDATOL;DATOL = WANDLW0XF0;W = W AND 0XF0MOVWFDATOH;DATOH = WSWAPFDATOH,1;INVIERTE LOS NIBBLES DE DATOHMOVFDATOH,0;W = DATOHMOVWFPORTC;PUERTO C = DATOHBSFPORTA,1;ENABLE = 1BCFPORTA,1;ENABLE = 0MOVFDATOL,0;W = DATOLANDLW0X0F;W = W AND 0X0FMOVWFPORTC;PORTC = WBSFPORTA,1;ENABLE = 1BCFPORTA,1;ENABLE = 0MOVLW.1CALLRETARDO;ESPERA 1msRETURN;RETORNO DE LA SUB-RUTINA

SUB_ADDRES;RUTINA PARA SETEAR POSICIONMOVWFDATOH;DATOH = WBSFDATOH,7;SETEA EL BIT 7 DE DATOHMOVFDATOH,0;W = DATOHCALLSUB_COMANDO;ENVIA EL COMANDO DE LA POSICIONRETURN;RETORNO DE LA SUB-RUTINA

RETARDOMOVWFUNOVOLVER4MOVLW.249MOVWFDOSVOLVER3NOPDECFSZDOS,1GOTOVOLVER3DECFSZUNO,1GOTOVOLVER4RETURNSUB_INT;RECONOCE EL NMERO PRESIONADOMOVFPORTB,0BCFINTCON,GIEBTFSSPORTB,4GOTOSUB_TECINCFTECLA,1BTFSSPORTB,5GOTOSUB_TECINCFTECLA,1BTFSSPORTB,6GOTOSUB_TECINCFTECLA,1BTFSSPORTB,7GOTOSUB_TECINCFTECLA,1GOTO SALIRSUB_TEC;OBITIENE EL NULERO DE ACUERDO A LA TABLA DEL TECLADOMOVFTECLA,0CALLTABLA_TECLADOMOVWFTECLAXORLW0X00BTFSCSTATUS,ZGOTOREINICIOCALLSUB_DATOMOVFUNI1,0MOVWFDEC1MOVFTECLA,0MOVWFUNI1MOVFCONTDIG,0XORLW0X01BTFSCSTATUS,ZGOTOSUMA1INCFCONTDIGGOTO SALIR

SALIR;SALE DE LA INTERRUPCIONCLRFTECLABCFINTCON,RBIFBSFINTCON,GIEMOVLW.200CALLRETARDORETFIEMAS;AUENTA EL CONTADOR QUE DIFERENCIA LOS NUMEROSINCFCONTDIGGOTOSALIRRETURN

REINICIO;LIMPIA EL VALOR INGRESADOCLRFCONTDIGMOVLW0X01CALLSUB_COMANDOGOTOSALIR

SUMA1;IGUALA EL SEGUNDO AL PRIMER NUMEROMOVLW0X42;SUMA, ESTO EQUIVALE A MULTIPLICARLO POR 2CALLSUB_ADDRESMOVLW0X30SUBWFUNI1,1SUBWFDEC1,1MOVFUNI1,0MOVWFUNI2MOVFDEC1,0MOVWFDEC2CALLSUMAMOVFD2,0CALLSUB_DATOMOVFD1,0CALLSUB_DATOMOVFD0,0CALLSUB_DATOGOTO SALIR

TABLA_TECLADO;TABLA ON LOS VALORES DEL TECLADOADDWFPCL,1DT0X37,0X38,0X39,0X00DT0X34,0X35,0X36,0X00DT0X31,0X32,0X33,0X00DT0X00,0X30,0X00,0X00

SUMA6U:;SUMA 6 A LAS UNIDADES CUANDO EL RESULTADO ES MAYOR A 9MOVFD0,0ADDLW.6MOVWFD0MOVLW1HRETURN

SUMA6D:MOVFD1,0ADDLW.6MOVWFD1MOVLW1HRETURN

INICIOBANKSEL TRISAMOVLW 0F0HMOVWFTRISBCLRF TRISC; PC COMO SALIDAMOVLW.6MOVWFADCON1CLRFTRISABCFINTCON,RBIFBSFINTCON,RBIEBSFINTCON,GIEBCFOPTION_REG,7BANKSELPORTACLRFTECLA;MOVLWb'11111110'MOVWFPORTBCALLSUB_INIMOVLW0X00CALLSUB_ADDRESGOTOMAIN

SUMA:MOVFUNI1,0ADDWFUNI2,0;SUMA LAS UNIDADESMOVWFD0;GUARDA EN D0MOVLW.10BCFSTATUS,CSUBWFD0,0;RESTA D0-10MOVLW0HBTFSCSTATUS,C;COMPARA CON LA BANDERA DE CARRYCALLSUMA6U;LLAMA A LA ETIQUETA QUE SUMA 6 SI EL NUMERO ES MAYOR A 9DECENA:;SI ES MENOR SIGUE CON LA SUMA DE LAS DECENASADDWFDEC1,1;SUMA LO QUE TIENE W MOVFD0,0ANDLW0FH;AND CON 0FH PARA DEJAR SOLO LA UNIDAD SIN EL CARRYMOVWFD0;GUARDA EN D0MOVFDEC1,0ADDWFDEC2,0;SUMA DEC1+DEC2MOVWFD1;GUARDA D1MOVLW.10BCF;STATUS,CSUBWFD1,0;RESTA D1-10MOVLW0HBTFSCSTATUS,C;COMPARA CON LA BANDERA DE CARRYCALLSUMA6D;LLAMA A LA ETIQUETA QUE SUMA 6 SI EL NUMERO ES MAYOR A 9CENTENA:;SI ES MENOR SIGUE CON LAS CENTENASMOVWFD2;MUEVE W A D2 SIENDO W=1 O W=0MOVFD1,0ANDLW0FH;REALIZA AND CON OFH PARA DEJAR SOLO LA DECENA SIN EL CARRYMOVWFD1;GUARDA EN D1MOVLW0x30ADDWFD0,1ADDWFD1,1ADDWFD2,1RETURN

MAIN;REALIZA BARRIDO DEL TECLADOMOVLW.20CALLRETARDOMOVLW.4ADDWFTECLA,1MOVLW.16BSFSTATUS,CRLFPORTB,1XORWFTECLA,0BTFSSSTATUS,ZGOTO MAINCLRFTECLAMOVLWb'11111110'MOVWFPORTBGOTO MAINEND

Simulacin:

Diagrama de flujo: