Sei sulla pagina 1di 24

Universidad Nacional Experimental Politcnica

Antonio Jos de Sucre


Vice-Rectorado Puerto Ordaz
Departamento Ingeniera Electrnica

Laboratorio # 2

Profesor: Rafael Surga Luvo

Bachilleres:

Seccin: M1

DELGADO SAMUEL
HERNANDEZ MARIA
SANCHEZ MANUEL

Ciudad Guayana, SEPTIEMBRE 2016

NOTA: ESTE PROGRAMA TIENE MODIFICACIONES QUE SE LE REALIZO DESPUES DE HABER


IMPRESO EL INFORME QUE SE LE ENTREGO PERSONALMENTE, EN LA REVICION DEL
LABORATORIO.

#include "p16F1787.inc"

; CONFIG1
;__config 0xFFEC
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_SWDTEN & _PWRTE_OFF & _MCLRE_ON & _CP_OFF
& _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_ON & _FCMEN_ON

; CONFIG2
; __config 0xFFFF
__CONFIG _CONFIG2, _WRT_OFF & _VCAPEN_OFF & _PLLEN_ON & _STVREN_ON & _BORV_LO &
_LPBOR_OFF & _LVP_ON

CONTA1 EQU 0X70


AUX

EQU 0X71

CONT4

EQU 0X72

CONT5

EQU 0X73

CONT6 EQU 0X74


CONTA7
AUX2

EQU 0X75
EQU 0X76

NUMTECLA

EQU 0X77

Ret_Loops2

EQU 0x78

ORG 0X00
GOTO INICIO

ORG 0X04
GOTO INTERRUPCION

;ORG 0X06
INICIO
BANKSEL PCON
MOVF

PCON,W

MOVWF AUX2

BANKSEL OSCCON; CONFIGURO EL OSCILADOR INTERNO


MOVLW 0X6F; OSCILADOR CON FRECUENCIA DE 4MHZ
MOVWF OSCCON
CALL CONFIGURAR_PUERTOS
CALL CONFIGURAR_INTERRUPCIONES
CALL CONFIGURAR_PERRO
GOTO PROGRAMA_PRINCIPAL
CALL CONFIGURAR_LCD

PROGRAMA_PRINCIPAL
CALL CONFIGURAR_LCD
CALL BIENVENIDA
GOTO $

INTERRUPCION
BANKSEL

WDTCON

BCF

WDTCON,0

BANKSEL

IOCAF

BTFSC IOCAF,0; PREGUNTO SI HAY UN CAMBIO DE FLANCO EN EL PIN0 DEL PUERTOA


CALL PULS_1
BTFSC IOCAF,1
CALL PULS_2

BTFSC IOCAF,2
CALL PULS_3
BANKSEL
CLRF

IOCAF

IOCAF

BANKSEL

WDTCON

BSF

WDTCON,0

RETFIE

;OPCION 1 - VERIFICA EL ULTIMO RESET


PULS_1
CALL CLEAR_LCD
CALL HOME
BANKSEL AUX2
BTFSS AUX2,0; PREGUNTO SI SE ACTIVO ALGUNA BANDERA DE INTERRUPCION POR RESET
CALL

MENSJ_RBOR
BTFSS AUX2,1
CALL

MENSJ_RPOR

BANKSEL PCON
BTFSS PCON,3
CALL

MENSJ_RMCLR

BTFSS PCON,4
CALL
BSF

MENSJ_RWDT

PCON,0

BSF

PCON,1

BSF

PCON,3

BSF

PCON,4

BANKSEL CONTA1
MOVLW .10
MOVWF CONTA1

CILO

CALL

ESPERA_05

DECFSZ CONTA1,F
GOTO

CILO

CALL
CALL

CLEAR_LCD

BIENVENIDA
RETURN

;-------------OPCION 2 - MOSTRAR UN MENSAJE-----------------------------PULS_2


MOVLW .63
MOVWF CONTA1
CALL CLEAR_LCD
CALL HOME
CALL BIENV
LAZO
CALL ESPERA_05
CALL CURSOR_IZQ
DECFSZ CONTA1,F
GOTO LAZO
RETURN
BIENV
MOVLW
CALL

DATO

MOVLW
CALL

'M'

'I'

DATO

MOVLW

'C'

CALL

DATO

MOVLW
CALL

DATO

MOVLW
CALL

'S'

DATO

MOVLW
CALL

'E'

DATO

MOVLW
CALL

'R'

DATO

MOVLW
CALL

'D'

DATO

MOVLW
CALL

'A'

DATO

MOVLW
CALL

'S'

DATO

MOVLW
CALL

'E'

DATO

MOVLW
CALL

'C'

DATO

MOVLW
CALL

'O'

DATO

MOVLW
CALL

'R'

DATO

MOVLW
CALL

'P'

DATO

MOVLW
CALL

'O'

DATO

MOVLW
CALL

'R'

DATO

''

MOVLW
CALL

'1'

DATO

RETURN

ESPERA_05 ; 0.5 seg


MOVLW .150
MOVWF CONT4
MOVLW .150
MOVWF CONT5
MOVLW .3
MOVWF CONT6
DECREM
MOVLW .150
MOVWF CONT4
DECFSZ CONT4,F
GOTO $-1
DECFSZ CONT5,F
GOTO DECREM
MOVLW .150
MOVWF CONT5
DECFSZ CONT6,F
GOTO DECREM
RETURN
;------------------------ OPCION 3 TECLADO MATRICIAL------------PULS_3
CALL CLEAR_LCD
CALL HOME
BANKSEL PORTC
CLRF

PORTC

P3
BANKSEL NUMTECLA
GOTO TECLADO_M
MUESTRA
MOVF NUMTECLA,0
CALL DATO
CALL

MENSJ_RBOR

MOVLW '#'
XORWF NUMTECLA,0
BTFSS STATUS,Z
GOTO P3
GOTO BIENVENIDA
;--------------------------------D_SW-------------------------------------------D_SW
CALL CLEAR_LCD
CALL HOME
BANKSEL

PCON

BTFSC PCON,4;
CALL

SI ES UNO NO HAY CAMBIO

BIENVENIDA

GOTO $-2

;-----------------------------------------CONFIGURACION DE PUERTOS---------------------------------CONFIGURAR_PUERTOS
BANKSEL ANSELA
CLRF ANSELA; CONFIGURO LOS PUERTOS COMO DIGITALES
CLRF ANSELD
CLRF ANSELE

CLRF

ANSELB

BANKSEL TRISA
MOVLW 0X0F
MOVWF TRISA; CONFIGURO RA0,RA1,RA2,RA3, COMO ENTRADA, Y LOS RESTANTES
COMO SALIDA
MOVLW 0X00
MOVWF TRISD; CONFIGURO EL PUERTO D COMO SALIDA
MOVLW 0X00
MOVWF TRISE;
MOVLW 0XF0
MOVWF

TRISC

BANKSEL OPTION_REG
BCF OPTION_REG,7; HABILITO LA RESISITENCIAS PULL UP
BANKSEL WPUA
MOVLW 0X0F
MOVWF WPUA;PULL UP PUERTO A
MOVLW

0XF0

MOVWF WPUC;PULL UP PUERTO C


RETURN
;------------------------------------------CONFIGURACION DE INTERRUPCIONES----------------------------CONFIGURAR_INTERRUPCIONES
BANKSEL INTCON
MOVLW 0X88; HABILITO LAS INTERRUPCIONES GLOBALES Y POR CAMBIO DE NIVEL
MOVWF

INTCON

BANKSEL IOCAN
MOVLW 0X0F
MOVWF IOCAN; HABILITO LAS INTERRUPCIONES POR FLANCO NEGATIVO
RETURN
;-------------------------------------------CONFIGURAR PERRO--------------------------------------------

CONFIGURAR_PERRO
BANKSEL WDTCON
MOVLW 0X1B ; b'00011011'
MOVWF

WDTCON; CONFIGURACION DEL TEMPORIZADOR DEL WDT A 8 SEG

RETURN
;-------------------------------------------CONFIGURAR LCD---------------------------------------------CONFIGURAR_LCD
CALL DISPLAY ; 8 bits, Display 2 lineas y 5x7
CALL RETARDO
CALL CLEAR_LCD ; Limpia LCD
CALL RETARDO
CALL

HOME

; Return cursor to home position

CALL RETARDO
CALL ENTRY; Incrementa(escribe bien) y Display shift On
CALL RETARDO
CALL ON_LCD ; Set ON/OFF full Display (D)
CALL RETARDO
CALL ADDRES_LINE1 ; UBICACION EN LA LINEA 1 DIRECCION 0
RETURN
;-------------------------------------------- COMANDDO LCDS----------------------------------------DISPLAY
MOVLW 0X38
MOVWF AUX
CALL COMANDO
RETURN
CURSOR_IZQ
MOVLW 0X1C
MOVWF AUX
CALL COMANDO

RETURN
ON_LCD
MOVLW 0X0F
MOVWF AUX
CALL COMANDO
RETURN
ENTRY
MOVLW 0X06
MOVWF AUX
CALL COMANDO
RETURN

CLEAR_LCD
MOVLW 0X01
MOVWF AUX
CALL COMANDO
RETURN

HOME
MOVLW 0X02
MOVWF AUX
CALL COMANDO
RETURN
ADDRES_LINE1
MOVLW 0X81
MOVWF AUX
CALL COMANDO
RETURN
ADDRES_LINE2

MOVLW 0XB8
MOVWF AUX
CALL COMANDO
RETURN

;---------------------- MODO INSTRUCCION-----------------------------------COMANDO


BANKSEL PORTE
BSF

PORTE,RE1 ; ENABLE

BCF

PORTE,RE0 ; RS

BANKSEL PORTD
MOVF AUX,0
MOVWF PORTD
CALL

RETARDO

BANKSEL PORTE
BCF

PORTE,RE1

CALL

RETARDO ;

RETURN

; rutina de escritura de comandos al LCD

;-------------------------- MODO ESCRITURA-----------------------------DATO


BANKSEL PORTE
BSF

PORTE,RE1 ; ENABLE

BSF

PORTE,RE0 ; RS

MOVWF AUX
MOVF AUX,0
BANKSEL PORTD
MOVWF PORTD
CALL

RETARDO

BANKSEL PORTE
BCF

PORTE,RE1

CALL

RETARDO ; MICROSEGUNDOS

RETURN ; rutina de escritura de comandos al LCD


RETARDO
MOVLW
MOVWF

.50
CONTA7

CUENTA
DECFSZ

CONTA7,F

GOTO CUENTA
RETURN
; Retardo de 2 ms ---------------------------------------------------------------------;------------------------------------ MENSAJES PROGRAMA PRINCIPAL---------------------------;----BIENVENIDA------;
BIENVENIDA
CALL ADDRES_LINE1
MOVLW 'M'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'U'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'P'

CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'I'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW '1'
CALL DATO
MOVLW '.'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'T'
CALL DATO

CALL ADDRES_LINE2
MOVLW '2'
CALL DATO
MOVLW '.'
CALL DATO
MOVLW 'M'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'S'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'J'
CALL DATO
MOVLW 'E'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW ' '
CALL DATO
MOVLW '3'
CALL DATO
MOVLW '.'
CALL DATO
MOVLW 'T'

CALL DATO
MOVLW 'E'
CALL DATO
MOVLW 'C'
CALL DATO
MOVLW 'L'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW ' '
CALL DATO
MOVLW 'M'
CALL DATO
MOVLW '.'
CALL DATO

RETURN
;------------------------------------------------ MENSAJES DE INTERRUPCION------------------;--- MENSAJE RESET POR BOR------MENSJ_RBOR
CALL CLEAR_LCD ;Limpia LCD

CALL HOME ;Return cursor to home position


CALL ADDRES_LINE1 ; UBICACION EN LA LINEA 1 DIRECCION 0
MOVLW ' '
CALL

DATO

MOVLW ' '


CALL

DATO

MOVLW ' '


CALL

DATO

MOVLW ' '


CALL

DATO

MOVLW 'R'
CALL

DATO

MOVLW 'E'
CALL

DATO

MOVLW 'S'
CALL

DATO

MOVLW 'E'
CALL

DATO

MOVLW 'T'
CALL

DATO

MOVLW ' '


CALL

DATO

MOVLW 'B'
CALL

DATO

MOVLW 'O'
CALL

DATO

MOVLW 'R'
CALL

DATO

BANKSEL PCON

BSF PCON,0
RETURN
;--- MENSAJE RESET POR POR------MENSJ_RPOR
CALL CLEAR_LCD ;Limpia LCD
CALL HOME

;Return cursor to home position

CALL ADDRES_LINE1 ; UBICACION EN LA LINEA 1 DIRECCION 0


MOVLW 'R'
CALL

DATO

MOVLW 'E'
CALL

DATO

MOVLW 'S'
CALL

DATO

MOVLW 'E'
CALL

DATO

MOVLW 'T'
CALL

DATO

MOVLW ' '


CALL

DATO

MOVLW 'P'
CALL

DATO

MOVLW 'O'
CALL

DATO

MOVLW 'R'
CALL

DATO

BANKSEL PCON
BSF PCON,1
RETURN
;--- MENSAJE RESET POR MASTER RESET-------

MENSJ_RMCLR
CALL CLEAR_LCD ;Limpia LCD
CALL HOME

;Return cursor to home position

CALL ADDRES_LINE1 ; UBICACION EN LA LINEA 1 DIRECCION 0


MOVLW 'R'
CALL

DATO

MOVLW 'E'
CALL

DATO

MOVLW 'S'
CALL

DATO

MOVLW 'E'
CALL

DATO

MOVLW 'T'
CALL

DATO

MOVLW ' '


CALL

DATO

MOVLW 'M'
CALL

DATO

MOVLW 'C'
CALL

DATO

MOVLW 'L'
CALL

DATO

MOVLW 'R'
CALL

DATO

BANKSEL PCON
BSF PCON,3
RETURN
;--- MENSAJE RESET POR WDTN------MENSJ_RWDT

CALL CLEAR_LCD ;Limpia LCD


CALL HOME

;Return cursor to home position

CALL ADDRES_LINE1 ; UBICACION EN LA LINEA 1 DIRECCION 0


MOVLW
CALL

DATO

MOVLW
CALL

'D'

DATO

MOVLW
CALL

'W'

DATO

MOVLW
CALL

''

DATO

MOVLW
CALL

'T'

DATO

MOVLW
CALL

'E'

DATO

MOVLW
CALL

'S'

DATO

MOVLW
CALL

'E'

DATO

MOVLW
CALL

'R'

'T'

DATO

BANKSEL PCON
BSF PCON,4
RETURN

TECLADO_M
TECLA NOP
NEW_SCAN
CLRF NUMTECLA ; Borra el contenido de numTecla

INCF NUMTECLA,1 ; Inicializa numTecla


;BANKSEL PORTB
MOVLW b'00001110' ; Pone a 0 la primera Fila ( PB0 )
MOVWF PORTC
NOP ; Espera estabilizar la seal
;Rutina que verifca el estado de las columnas
CHK_COL:
;Verifica si se ha presionado alguna tecla
BTFSS PORTC,4 ; Columna 1=0?
GOTO TECLA_ON ; Sale si se ha pulsado una tecla
INCF NUMTECLA,1 ; Incrementa nmero de tecla
BTFSS PORTC,5 ; Columna 2=0?
GOTO TECLA_ON ; Sale si se ha pulsado una tecla
INCF NUMTECLA,1 ; Incrementa nmero de tecla
BTFSS PORTC,6 ; Columna 3=0?
GOTO TECLA_ON ; Sale si se ha pulsado una tecla
INCF NUMTECLA,1 ; Incrementa nmero de tecla
BTFSS PORTC,7 ; Columna 4=0?
GOTO TECLA_ON ; Sale si se ha pulsado una tecla
INCF NUMTECLA,1 ; Incrementa nmero de tecla
;Verifica si se ha recorrido todo el teclado
MOVLW d'17' ; Nmero total de teclas + 1
XORWF NUMTECLA,w ; Realiza d'17' XOR numTecla
BTFSC STATUS,Z ; Verifica el estado de Z
GOTO TECLA ; Z=1?, Son iguales (full Scan) Z=0? , Son diferentes,
NEXT_COL:
BSF STATUS,C ; Enciende el carry para poner en "1" la FILA recorrida
RLF PORTC,F ; Realiza corrimiento a la izquierda, pone a
; cero la siguiente FILA

GOTO CHK_COL ; Escanea la sig. COLUMNA


;Rutina que procesa la tecla capturada
TECLA_ON
;Rutinas que esperan a que se deje de presionar la teclaEsto para evitar ECO
ESPERA1
BTFSS PORTC,4 ;Si no se suelta la tecla de la COL 1
GOTO ESPERA1 ;vuelve a esperar.
ESPERA2
BTFSS PORTC,5 ;Si no se suelta la tecla de la COL 2
GOTO ESPERA2 ;vuelve a esperar.
ESPERA3
BTFSS PORTC,6 ;Si no se suelta la tecla de la COL 3
GOTO ESPERA3 ;vuelve a esperar.
ESPERA4
BTFSS PORTC,7 ;Si no se suelta la tecla de la COL 4
GOTO ESPERA4 ;vuelve a esperar.
;Una vez que dej de presionar la tecla
MOVF NUMTECLA,w ; Pone en W el valor de numTecla
CALL CONV_TECLA ; Llama a la rutina de conversin A BCD
MOVWF NUMTECLA
GOTO MUESTRA
;Rutina de conversin que retorna el valor en BCD y ASCII de
;numTecla en W
CONV_TECLA
ADDWF PCL,1
NOP ;Linea 0 (no se utiliza)
RETLW '1' ;cdigo del 1
RETLW '2' ;cdigo del 2
RETLW '3' ;cdigo del 3

RETLW 'A' ;cdigo de ascii de A


RETLW '4' ;cdigo del 4
RETLW '5' ;cdigo del 5
RETLW '6' ;cdigo del 6
RETLW 'B' ;cdigo de ascii de B
RETLW '7' ;cdigo del 7
RETLW '8' ;cdigo del 8
RETLW '9' ;cdigo del 9
RETLW 'C' ;cdigo de ascii de C
RETLW '*' ;cdigo de ascii de *
RETLW '0' ;cdigo del 0
RETLW '#' ;cdigo de ascii de #
RETLW 'D' ;cdigo de ascii de D
END

MONTAJE