Sei sulla pagina 1di 11

ACTIVIDAD CENTRAL UNIDAD 4

Diseo de productos electrnicos con microcontroladores


Nombre de la actividad: Manejo de salidas en
un microcontrolador: Display de Cristal Lquido
(LCD).
Objetivo
Identificar las instrucciones en un cdigo ASM
para el manejo de salidas a una LCD.
Situacin

Para diferenciar el tipo de producto que llega a la empresa (distribucin y venta), se


requiere que la llegada de camiones sea anunciada con una seal luminosa que
parpadee y en una LCD aparezca el tipo de producto que acaba de llegar, segn se
haya activado el sensor de presencia instalado. Las posibilidades de productos son
NATURAL, LIMN y BAR BQ. Se ha adquirido un sistema automatizado con
microcontroladores y usted debe revisar si el cdigo cumple con las caractersticas
solicitadas.

Procedimiento:

1. Revise los contenidos del curso asociados al Manejo de salidas a una LCD.

2. Consulte informacin para profundizar sobre el funcionamiento y


programacin de las LCD.

Temas asociados

Configuracin de un Display de Cristal Lquido (LCD)


Lenguaje ASM

Entregas
Para este anlisis, puede utilizar la gua que aparece a continuacin para desarrollar
los siguientes productos:
1. Comentarios de las lneas de programacin del cdigo suministrado por el
proveedor de servicios.
2. Descripcin de los pines de entrada y salida utilizados para el sistema
automatizado
3. Diagrama de flujo del programa de automatizacin.

1
Una vez finalizada, comprima el archivo en formato .zip o .rar, dando clic derecho al
archivo, Enviar a, Carpeta comprimida. Luego envela a su facilitador a travs del
medio utilizado para tal fin en el curso.

2
DOCUMENTO GUA
Diseo de productos electrnicos con microcontroladores
1. Comentarios de lneas de cdigo. Escriba los comentarios relacionados con cada
bloque de cdigo.
INCLUDE <P16F628A.INC> ; Definicion del microprocesador a utilizar

CBLOCK0X20
R0C,R0D,R0E,R13,loops,loops2,REG_RX,CONTE,MEMORIA,RX_COMP,RX_ID1,RX_ID2,RX_PRO1,ME
NS_CONT,CON_USER,DATA_IN,CONT_USER,
CONT_INTS,MEM_STATUS,DATA_RUP,DATA_COMP,ID1_SAVE,ID2_SAVE,ID3_SAVE
ENDC

E EQU 2H ; Contador del programa


RS EQU 1H ; Selecciona datos e instrucciones del LCD
ORG 0X00 ; Aqu comienza el micro
GOTO INICIO ; Salta a inicio
RETARDO
CLRWDT ; pone a cero el watchdog
MOVLW D'15' ; Tiempo de permanencia en milsegundos
MOVWF loops ; Subrutina de retardos en milisegundos
top2_1 ; Pregunta si termino retardo
MOVLW D'25' ; Tiempo de permanencia de encendido 25 ms
MOVWF loops2
top_1
CLRWDT
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ loops2,1
GOTO top_1
DECFSZ loops,1
GOTO top2_1
RETLW 0
RETARDO_1
CLRWDT
MOVLW D'100' ; Tiempo de permanencia de encendido
MOVWF loops
top2_2

3
MOVLW D'200' ; Tiempo de permanencia de encendido 200 ms
MOVWF loops2
top_2
CLRWDT
NOP ; Ciclo de maquina de un microsegundo
NOP ; Ciclo de maquina de un microsegundo
NOP ; Ciclo de maquina de un microsegundo
NOP ; Ciclo de maquina de un microsegundo
NOP ; Ciclo de maquina de un microsegundo
NOP ; Ciclo de maquina de un microsegundo
DECFSZ loops2,1 ; Pregunta si termino ya un milisegundo
GOTO top_2 ; Llamamos a la subrutina
DECFSZ ; Decrementa en 1 si esta en loops,1
GOTO top2_2 ; Salta a la subrutina top2 si esta en dos
RETLW 0 ; Pone el registro w en 0

CONTROL
CLRWDT ; Pone en cero el registro watchdog
BCF PORTB,RS ; Pone el LCD en modo escritura
GOTO DATO2 ; Salta al dato 2
DATO
CLRWDT ; Pone en cero el watchdog
BSF PORTB,RS ; Pone el Lcd en modo escritura
DATO2
BSF PORTB,E ; Pone en 2h el puerto B del pic
MOVWF R0E ; Rutina para configurar un dato en el lcd
MOVLW 0FH ; Carga w con el dato of
ANDWFPORTB,1 ; Suma el contenido de w con el registro f
MOVF R0E,W
ANDLW 0F0H ; Se carga el registro w con Oh
IORWF PORTB,1 ; Operacion logica or entre el acumulador w y el registro f del puerto B.
CALL RETARDO ; Llama retardo
BCF PORTB,E
CALL RETARDO
BSF PORTB,E ; Pone en cero el bit E del puerto B
MOVLW 0FH ; Mueve el dato 0f al acumulador
ANDWFPORTB,1 ; Operacion logica and entre el acumulador y el registro f y pone el
puerto B en 1
SWAPF R0E,W ; Intercambio de niveles mas significativo y menos significativo.
ANDLW 0F0H ; Operacion
IORWF PORTB,1 ; Operacion logica or entre el acumulador w y el registro f del puerto B.
CALL RETARDO ; Llama a retardo
BCF PORTB,E ; Pone en cero el bit E del B

4
CALL RETARDO ; Llama a retardo
RETLW 0 ; Regresa de una subrutina con el numero 0 cumulador
INICIO
BSF STATUS,5 ; Pone en 1 el bit 5 del registro status
CLRF TRISB ; Blanquea el puerto B
MOVLW .255 ; Mueve el valor .255 al acumulador
MOVWF TRISA ; Mueve el registro f al acumulador
BCF STATUS,5 ; Pone en 0 el bit 5 de status

CONFI_LCD

MOVLW 02H ; Mueve el valor 02h al acumulador


CALL CONTROL ; Llama a control
MOVLW 28H ; Mueve el valor 28H al acumulador
CALL CONTROL ; Llama a control
MOVLW 0CH ; Mueve el valor 0ch al acumulador
CALL CONTROL ; Llama a control
MOVLW 06H ; Mueve el valor 06h al acumulador
CALL CONTROL ; Llama a control

ENTRADAS
BTFSC PORTA,0 ; Prueba el bit 0 del puerto A, si es cero salta a mensaje 1
GOTO MENSAJE_1 ; Salta al mensaje 1
BTFSC PORTA,1 ; Prueba el bit 1 del puerto A si es uno salta al mensaje 2
GOTO MENSAJE_2 ; Salta al mensaje 2
BTFSC PORTA,2 ; Prueba el bit 2 del Puerto A si es dos salta al mensaje 3
GOTO MENSAJE_3 ; Salta al mensaje 3
GOTO BORRA_LCD ; Salta y borra La LCD
MENSAJE_1
MOVLW 01H ; Carga el valor 01h en el acumulador
CALL CONTROL ; Llama a control
CALL RETARDO ; Llama a retardo
MOVLW " " ; Carga el valor 01h en el acumulador
CALL DATO ; Llama a retardo
MOVLW " " ; Carga el valor 01h en el acumulador
CALL DATO ; Llama a dato
MOVLW " " ; Carga el valor 01h en el acumulador
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el valor 01h en el acumulador
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el valor 01h en el acumulador
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el valor 01h en el acumulador

5
CALL DATO ; Salta a la subrutina dato
MOVLW "N" ; Carga el acumulador con la letra N
CALL DATO; Salta a la subrutina dato
MOVLW "A" ; Carga el acumulador con la letra A
CALL DATO ; Salta a la subrutina dato
MOVLW "T" ; Carga el acumulador con la letra T
CALL DATO ; Salta a la subrutina dato
MOVLW "U" ; Carga el acumulador con la letra U
CALL DATO ; Salta a la subrutina dato
MOVLW "R" ; Carga el acumulador con la letra R
CALL DATO ; Salta a la subrutina dato
MOVLW "A" ; Carga el acumulador con la letra A
CALL DATO ; Salta a la subrutina dato
MOVLW "L" ; Carga el acumulador con la letra L
CALL DATO ; Salta a la subrutina dato
MOVLW ""
CALL DATO ; Salta a la subrutina dato
MOVLW ""
CALL DATO ; Salta a la subrutina dato
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
;LED INTERMITENTE
BSF PORTB,0 ; Pone en cero el puerto B
CALL RETARDO_1 ; Salta a retardo y pone 0
BCF PORTB,0
CALL RETARDO_1 ; Salta a la subrutina 1 del retardo
GOTO ENTRADAS ; Salta a las entradas
MENSAJE_2
MOVLW 01H ; Carga el acumulador con el dato 01h
CALL CONTROL ; Salta a la subrutina control
CALL RETARDO ; Salta alretardo
MOVLW " " ; Carga el dato en el acumulador
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el dato en el acumulador
CALL DATO ; Salta a la subrutina dato

6
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW "L" ; Carga el acumulador con la letra L
CALL DATO ; Salta a la subrutina dato
MOVLW "I" ; Carga el acumulador con la letra I
CALL DATO ; Salta a la subrutina dato
MOVLW "M" ; Carga el acumulador con la letra M
CALL DATO ; Salta a la subrutina dato
MOVLW "O" ; Carga el acumulador con la letra O
CALL DATO ; Salta a la subrutina dato
MOVLW "N" ; Carga el acumulador con la letra N
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
MOVLW " " ; Carga el acumulador con el dato
CALL DATO ; Salta a la subrutina dato
;LED INTERMITENTE
BSF PORTB,0 ; Pone en el PUERTOB
CALL RETARDO_1 ; Genera un retardo de 1 ms
BCF PORTB,0
CALL RETARDO_1
GOTO ENTRADAS ; Salta a las entradas
MENSAJE_3

7
MOVLW 01H ; Carga el acumulador con la cifra 01H
CALL CONTROL ; Salta a la subrutina control
CALL RETARDO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW "B"
CALL DATO
MOVLW "B"
CALL DATO
MOVLW "Q"
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO
MOVLW ""
CALL DATO

8
;LED INTERMITENTE
BSF PORTB,0
CALL RETARDO_1
BCF PORTB,0
CALL RETARDO_1
GOTO ENTRADAS
BORRA_LCD ; Bloque que limpia, es decir borra la lcd
MOVLW 01H
CALL CONTROL
CALL RETARDO
GOTO ENTRADAS
END

2. Descripcin de pines de entrada y salida

ESQUEMA DEL PIC PINES DE ENTRADA PINES DE SALIDA


Entrada es el puerto Salida el puerto
APORTA0 sensor BPORTB2-7 LCDPORTB0
1PORTA1 sensor LED
2PORTA2 sensor 3

3. 3. Diagrama de flujo del programa de automatizacin (cdigo .asm del punto 1)

9
Inicio

Configurar lcd
Configuraci inicial ONTROL

Configuraci puertos Escribe dato y nibble


y lcd

Escrbir DATO
no Bit 0 DE
PORTA =
0? retardos
si
Salto a Mensaje 1

return

Bit 1 DE
PORTA = 0?

Salto a Mensaje 2

no Bit 2 DE
PORTA =
0 ? si

Salto a Mensaje 3

Salto a borrar lcd

fin

10
11