# Comunicacion serial pic a pc con teclado matricial.



## jandreso (Nov 27, 2009)

buenas a todos tengo que hacer un programa de comunicación serial con un pic16f887 a pc. el programa debe de funcionar así, al presionar las teclas de mi teclado que esta conectado a los pines del puerto de D, debe de mostar el valor de la tecla en el pc estoy simulando en proteus y no logro que esto ocurra.oajala alguno me peuda ayudar a corregir el programa..​ 



```
LIST P=16F887
 
INCLUDE P16F887.INC
 
;Palabra de configuracion OSCILADOR XT
__CONFIG _CONFIG1,_LVP_OFF&_FCMEN_OFF&_IESO_OFF&_BOR_OFF&_CPD_OFF&_CP_OFF&_MCLRE_OFF&_PWRTE_ON&_WDT_OFF&_INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2,_WRT_OFF&_BOR21V
 
 
 
 
CBLOCK 0X20
AUXA,AUXB,AUXC,UNIDADES,DECENAS,TECLA_TEMP
ENDC
 
;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
ORG 0x00 ;Inicio en el Vector de Reset
 
goto PPAL ;Va a la primera instruccion del
 
 
 
CONFIC_PIC
 
 
BANKSEL ANSEL
CLRF ANSEL
CLRF ANSELH
BSF RCSTA,SPEN ;se activa la USART
BSF STATUS,RP0 ;Cambio al banco 1 -------------
BCF STATUS,RP1
MOVLW b'1011111' ;RC7/Rx entrada,
MOVWF TRISC ;RC6/Tx salida.
BANKSEL TRISD
MOVLW B'00001111' 
MOVWF TRISD
MOVLW b'00100100' ;Configuracion USART
MOVWF TXSTA ;y activacion de transmision
MOVLW .25 ;9600 baudios
MOVWF SPBRG
BCF STATUS,RP0 ;Cambio al banco 0 -------------
BSF RCSTA,SPEN ;se activa la USART
BSF STATUS,RP0 ;Cambio al banco 1 -------------
BCF STATUS,RP1
BSF TXSTA,TXEN ;Habilita la transmision
BCF STATUS,RP0 ;Cambio al banco 0 ------------- 
RETURN
;--------------------------------------------------------------------------------
VISUALI CALL RETARDO
MOVF UNIDADES,W 
 
MOVWF TXREG ; del codigo ascii 
BSF STATUS,RP0 ;Cambio al banco 1 -------------
BCF STATUS,RP1
COMP_TX BTFSS TXSTA,TRMT ;comprueba si acabo de Tx.
GOTO COMP_TX
BCF STATUS,RP0 ;Cambio al banco 0 -------------
 
RETURN
;<<<<<<----------------------- OTRAS RUTINAS ------------------------->>>>>>>
;;Rutina de retardo para visualización
RETARDO 
MOVLW .1
MOVWF AUXA
RETAR3 MOVLW .2
MOVWF AUXB
RETAR2 MOVLW .10
MOVWF AUXC
RETAR1 DECFSZ AUXC,F
GOTO RETAR1
DECFSZ AUXB,F
GOTO RETAR2
DECFSZ AUXA,F
GOTO RETAR3
RETURN
;***************************************************************************
;Tabla codigo ASCII
TABLA_DISPLAY_CC 
ADDWF PCL,F
RETLW .48 ;0
RETLW .49 ;1
RETLW .50 ;2
RETLW .51 ;3
RETLW .52 ;4
RETLW .53 ;5
RETLW .54 ;6
RETLW .55 ;7
RETLW .56 ;8
RETLW .57 ;9
RETLW .42 ;A = *
RETLW .35 ;B = #
;*****************************************************************************
TECLADO MOVLW B'11101111' ;poner primera fila en cero 
MOVWF PORTD 
NOP 
MOVF PORTD,W 
MOVWF TECLA_TEMP 
 
F1_C1 MOVLW B'11101101' 
XORWF TECLA_TEMP,W 
BTFSS STATUS,Z 
GOTO F1_C2
MOVLW 03 ;tecla <3>
CALL TABLA_DISPLAY_CC
MOVWF UNIDADES
RETURN 
 
F1_C2 MOVLW B'11101011' 
XORWF TECLA_TEMP,W 
BTFSS STATUS,Z 
GOTO F1_C3 
MOVLW 02 
MOVWF UNIDADES
RETURN
 
F1_C3 MOVLW B'11100111'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F2_C1
MOVLW 01 ;TECLA <1>
MOVWF UNIDADES
RETURN
 
F2_C1 MOVLW B'11011111' ;PONER SEGUNDA FILA EN CERO 
MOVWF PORTD
NOP
MOVF PORTD,W
MOVWF TECLA_TEMP
MOVLW B'11011101'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F2_C2
MOVLW 06 ;TECLA <6> 
MOVWF UNIDADES
RETURN
 
F2_C2 MOVLW B'11011011'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F2_C3
MOVLW 05 ;TECLA <5>
MOVWF UNIDADES
RETURN
 
F2_C3 MOVLW B'11010111'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F3_C1
MOVLW 04 ;TECLA <4>
MOVWF UNIDADES
RETURN
 
F3_C1 MOVLW B'10111111' ;PONER TERCERA FILA EN CERO 
MOVWF PORTD
NOP
MOVF PORTD,W
MOVWF TECLA_TEMP
MOVLW B'10111101'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F3_C2
MOVLW 09 ;TECLA <9>
MOVWF UNIDADES
RETURN
 
F3_C2 MOVLW B'10111011'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F3_C3
MOVLW 08 ;TECLA <8>
MOVWF UNIDADES
RETURN
 
F3_C3 MOVLW B'10110111'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F4_C1
MOVLW 07 ;TECLA <7>
MOVWF UNIDADES
RETURN
 
F4_C1 MOVLW B'01111111' ;PONER CUARTA FILA EN CERO
MOVWF PORTD
NOP
MOVF PORTD,W
MOVWF TECLA_TEMP
MOVLW B'01111101'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F4_C2
MOVLW 0B ;TECLA <#>
MOVWF UNIDADES
RETURN
 
F4_C2 MOVLW B'01111011'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F4_C3
MOVLW 00 ;TECLA <0>
MOVWF UNIDADES
RETURN 
 
F4_C3 MOVLW B'01110111'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO FIN_TECLADO
MOVLW 0A ;TECLA <*>
MOVWF UNIDADES
FIN_TECLADO
RETURN 
;<<<<<<\\\\\\\\\\\THE\\\\\\\\\\\\\\\\////////////////END//////////////>>>>>>> 
PPAL CALL CONFIC_PIC
CLRW
REPETIR CALL TECLADO
CALL VISUALI
GOTO REPETIR
END
```


----------

