jueves, 27 de noviembre de 2008

LCD MAS ENTRADAS DIGITALES CON PIC16F877 EN ENSAMBLADOR

En respuesta a nuestro lector "alve mont" de Colombia se realizo este programa con el fin de poder ayudarlo en lo que esta en nuestro alcance.

DESCRIPCION:

Este programa maneja un lcd de 16*2 y los 4 bits del puerto D como entrada con el pic16f877.Este sencillo ejemplo nos muestra el uso de las entradas digitales del Mc,en el interior del micro se encuentran 10 letreros que seran mostrados dependiendo de que combinacion binaria se encuentre en la entrada del puerto D.

Para el LCD se utiliza todo el puerto C para enviar el dato y los 2 pines menos significativos del puerto B para el RS Y EL E.

Nota: retrado calculado para un cristal de 20 Mhz

MATERIALES:

- PIC16F877A
- Resistencias de 4.7K,2.2k
- Cristal de 20MHZ
- Push Botton
- Fuente de DC de 5 volts
- Protoboard
- LCD
- Capacitores

RUTINAS IMPORTANTES DEL PROGRAMA:
;-----------------------------------------------------------------
;"rutina que verifica que valor binario se encuentra en la entrada"
bucle:
clrf aux
movf PORTD,W
movwf aux
xorlw b'00000001'
btfsc STATUS,Z
goto blank

movf aux,W
movwf aux
xorlw b'00000010'
btfsc STATUS,Z
goto blank1

movf aux,W
movwf aux
xorlw b'00000011'
btfsc STATUS,Z
goto blank2

movf aux,W
movwf aux
xorlw b'00000100'
btfsc STATUS,Z
goto blank3

movf aux,W
movwf aux
xorlw b'00000101'
btfsc STATUS,Z
goto blank4

movf aux,W
movwf aux
xorlw b'00000110'
btfsc STATUS,Z
goto blank5

movf aux,W
movwf aux
xorlw b'00000111'
btfsc STATUS,Z
goto blank6

movf aux,W
movwf aux
xorlw b'00001000'
btfsc STATUS,Z
goto blank7

movf aux,W
movwf aux
xorlw b'00001001'
btfsc STATUS,Z
goto blank8

movf aux,W
movwf aux
xorlw b'00001010'
btfsc STATUS,Z
goto blank9



goto bucle
;-----------------------------------------------------------------
;"Fragmento de la rutina que manda a llamar el letrero a imprimir en pantalla"
blank:
call limpia
a:
lcdwr letrero,a,bucle
; call linea2
;///////////////////////////////////////////////////////////////////////////////////////
blank1:
call limpia
a1:
lcdwr letrero1,a1,bucle
;//////////////////////////////////////////////////////////////////////////////////////
blank2:
call limpia
a2:
lcdwr letrero2,a2,bucle
;////////////////////////////////////////////////////////////////////////////////////
;-------------------------------------------------------------------
;"Fragmento de los 10 letreros que muestra el programa"
letrero:
addwf PCL, F
dt "Andres Barrera",0x04
letrero1:
addwf PCL, F
dt"Dumar Bernal",0x04
letrero2:
addwf PCL, F
dt"Jose Bohorquez",0x04
;---------------------------------------------------------------
;"Macro que realiza el despliege del letrero";
lcdwr macro Escri, Es0, Es1
movfw Contado ;Movemos el valor de contador a W
call Escri ;Llamamos a Escri
call envia ;Llamamos a envia
incf Contado, F ;Incrementamos contador
movlw 0x04 ;Movemos este valor a W y despues
subwf Temp,F ;se lo restamos a Temp
btfss STATUS, Z ;y verificamos si se puso la bandera de 0
goto Es0 ;Vamos a Es0 lo cual indica que no se ha terminado de mandar la cadena
clrf Contado ;Limpiamos el contador
goto Es1 ;Vamos a Es1
endm

;-------------------------------------------------------

Espero que esto sea de gran ayuda para "alve mont" de Colombia.

Saludos.

No hay comentarios: