Sie sind auf Seite 1von 6

;*******************************************************************************

;*NOTA:ES NECESARIO ESPECIFICAR DONDE SE DEBERAN GUARDAR LOS DATOS


AL UTILIZAR *

;* UNA DETERMINADA INSTRUCCIN, SI ES QUE SE REDUNDA, EL PROGRAMA


INDICARA *

;* SI ES QUE NO DEJENLO TAL Y COMO ESTA, YA QUE ESTO DETERMINARA SI


EL PRO-*

;* GRAMA FUNCIONA O NO. *

;*******************************************************************************

LIST P=16F877A

INCLUDE <P16F877A.INC>

RADIX HEX

;*********************************************

;* *

;* ZONA ETIQUETAS *

;* *

;*********************************************

ESTADO EQU 0x03

PUERTOB EQU 0x06

PUERTOD EQU 0x08

TECLA EQU 0x20

W EQU 0

F EQU 1

;*********************************************

;* Inicio del programa *

;* Manipulacion de un teclado *

;* Visualizacion en un Display 7-seg *


;*********************************************

ORG 0x00

GOTO INICIO

ORG 0x05

INICIO

BSF ESTADO,5 ; SI BIT RP0(BIT 5) ES 1, NOS PERMITE ACCEDER AL BANCO 1

MOVLW 0xF0 ; CONFIGURAMOS EL PUERTO B DESDE EL RB0-RB3 COMO


SALIDAS Y

MOVWF PUERTOB ; DESDE RB4-RB7 COMO ENTRADA

CLRF PUERTOD ; CONFIGURAMOS EL PUERTO A COMO SALIDA

BCF OPTION_REG,7

BCF ESTADO,5 ; SI BIT RP0(BIT 5) ES 0, NOS PERMITE ACCEDER AL BANCO 0

MOVLW B'01000000' ; SIGNO CON EL QUE INICIA EL 7-SEG "-"

MOVWF PUERTOD ; EL CUAL ES CARGADO A LA SALIDA CONECTADA A ESTE

PRINCIPAL ; PROGRAMA PRINCIPAL

CALL TECLADO ; LLAMAMOS AL TECLADO

MOVWF PUERTOD ; CARGAMOS EL VALOR DEL TECLADO EN EL 7-


SEGMENTOS

GOTO PRINCIPAL ; INICIAMOS EL BUCLE INFINITO

TECLADO ; PROGRAMA TECLADO

CLRF TECLA ; BORRAMOS EL REGISTRO TECLADO

MOVLW B'00001110' ; CARGAMOS EL REGISTRO DE TRABAJO CON EL VALOR


00001110

MOVWF PUERTOB ; PARA LUEGO CARGARLO AL PUERTO B


CHEQ_COL ; PROG. PARA ANALIZAR LAS COLUMNAS Y VER QUE TECLA ES
PULSADA

BTFSS PUERTOB,4 ; ANALIZA EL BIT 4 DEL PUERTO B, SI "0" VA AL ANTIRRE. Y


"1" SALTA

GOTO ANTIRREBOTES ; REDIRIGE A LA RUTINA ANTIRREBOTES

INCF TECLA,F

BTFSS PUERTOB,5 ; ANALIZA EL BIT 5 DEL PUERTO B, SI "0" VA AL ANTIRRE. Y


"1" SALTA

GOTO ANTIRREBOTES ; REDIRIGE A LA RUTINA ANTIRREBOTES

INCF TECLA,F

BTFSS PUERTOB,6 ; ANALIZA EL BIT 6 DEL PUERTO B, SI "0" VA AL ANTIRRE. Y


"1" SALTA

GOTO ANTIRREBOTES ; REDIRIGE A LA RUTINA ANTIRREBOTES

INCF TECLA,F

BTFSS PUERTOB,7 ; ANALIZA EL BIT 7 DEL PUERTO B, SI "0" VA AL ANTIRRE. Y


"1" SALTA

GOTO ANTIRREBOTES ; REDIRIGE A LA RUTINA ANTIRREBOTES

INCF TECLA,F

MOVLW 0x10 ; CARGAMOS EL VALOR DE 16 EN REGISTRO DE TRABAJO

SUBWF TECLA,W ; RESTAMOS EL VALOR DEL REGISTRO DE TRABAJO CON DE


LA TECLA

;
********************************************************************************
*

; PUEDEN DARSE DOS COSAS EN ESTA DIFERENCIA, SI LA RESTA ES CERO EL


FLAG Z DEL *

; REGISTRO OPTION SE PONE EN "1" Y SI EL VALOR DE LA RESTA ES DIFERENTE


DE CERO, *
; EL FLAG Z SE PONE EN CERO, ESTO SERA UTILIZADO PARA LOS SALTOS
CONDICIONADOS *

; EN EL PROGRAMA. *

;
********************************************************************************
*

BTFSC ESTADO,2 ; SI EL BIT Z ES CERO SALTA Y SI NO PASA A LA STE LINEA

GOTO TECLADO ; REFIRIGE EL PROGRAMA A LA RUTINA TECLADO CUANDO


"Z" ES 1; ES

; ES DECIR EL VALOR DE LA TECLA ES IGUAL A 16, CON ELLO


NINGU-

; NA TECLA A SIDO APRENTADA.

BSF ESTADO,0 ; SE PONE EN 1 EL FLAG C DEL REGISTRO OPTION DADO QUE


LA INS-

; RLF PASA POR EL BIT C EL CUAL SIEMPRE PROVEE UN 1, PARA


QUE

; ASI AL CORRE A LA IZQUIERDA EL UNICO BIT QUE SE MUEVE ES


EL

; PUES SI NO SE HACE ELLO NO SOLO ABRA UNA COLUMNA


ANALIZADA

; SI NO VARIAS, POR OTRO LADO NO INTERESA EL ESTADO DE


LOS DE

; MAS ALTO PESO, PUES SON ENTRADAS RECEPCIONAN ESTADOS


LOGICOS

; NO LOS PROVEEN.

RLF PUERTOB,F ; SE CORRE EL CERO DEL PUERTOB UN LUGAR HACIA LA


IZQUIERDA

GOTO CHEQ_COL ; SE REGIRIGE AL PROGRAMDA QUE ANALIZA LAS


COLUMNAS
ANTIRREBOTES ; RUNTINA ANITRREBOTES, LA CUAL ANALIZA LAS FILAS
HASTA QUE LA

; LA TECLA DEJE DE SER PULSADA

BUCLE1

BTFSS PUERTOB,4 ; SI LA TECLA SIGUE SIENDO PULSADA, ENTRA EN UN


BUCLE INFINITO

; SI NO ES PULSADA SALTA A LA SIGUIENTE INSTRUCCION

GOTO BUCLE1

BUCLE2

BTFSS PUERTOB,5 ; SI LA TECLA SIGUE SIENDO PULSADA, ENTRA EN UN


BUCLE INFINITO

; SI NO ES PULSADA SALTA A LA SIGUIENTE INSTRUCCION

GOTO BUCLE2

BUCLE3

BTFSS PUERTOB,6 ; SI LA TECLA SIGUE SIENDO PULSADA, ENTRA EN UN


BUCLE INFINITO

; SI NO ES PULSADA SALTA A LA SIGUIENTE INSTRUCCION

GOTO BUCLE3

BUCLE4

BTFSS PUERTOB,7 ; SI LA TECLA SIGUE SIENDO PULSADA, ENTRA EN UN


BUCLE INFINITO

; SI NO ES PULSADA SALTA A LA SIGUIENTE INSTRUCCION

GOTO BUCLE4

MOVF TECLA,W ; MUEVE EL VALOR CARGADO EN EL REGISTRO TECLA AL


REGISTRO "W"

CALL DECO_TECLA ; LLAMA A LA RUTNIA TECLADO EL CUAL CODIFICA LOS


VALORES DE

; LA TECLA PULSADA
RETURN ; RETORNA AL PROGRAMA PRINCIPAL

DECO_TECLA ; DE ACUERDO AL VALOR CARGADO AL RETRO "W" SE


SUMARA AL VALOR

; DEL PCL PARA ASI PRODUCIR EL UN SALTO DONDE SE HALLA EL

; VALOR CODIFICADO.

ADDWF PCL,F

RETLW B'01011110'

RETLW B'00111001'

RETLW B'01111100'

RETLW B'01110111'

RETLW B'01110001'

RETLW B'01101111'

RETLW B'01111101'

RETLW B'01001111'

RETLW B'00111111'

RETLW B'01111111'

RETLW B'01101101'

RETLW B'01011011'

RETLW B'01111110'

RETLW B'00000111'

RETLW B'01100110'

RETLW B'00000110'

END

Das könnte Ihnen auch gefallen