tutorial para microcontroladores pic

13
Direccionamiento Indirecto y Teclado Matricial 55 PRÁCTICA 5 DIRECCIONAMIENTO INDIRECTO Y TECLADO MATRICIAL OBJETIVO: Identificar la forma de operar del modo de direccionamiento indirecto. Analizar el funcionamiento del un teclado matricial y sus algoritmos de decodificación. Aplicar el direccionamiento indirecto al programa de decodificación de un teclado matricial INTRODUCCION En la programación de los microcontroladores PIC de la gama media la mayoría de las instrucciones emplean direccionamiento directo, pero también es posible que operen en un modo de direccionamiento indirecto. Para el direccionamiento indirecto se emplean dos registros especiales: el FSR y el INDF (éste último no es un registro físico). El registro FSR se emplea para “señalar o apuntar” a una dirección cuyo contenido después puede ser leído ó escrito de forma indirecta empleando cualquier instrucción que use como operando al registro INDF. Internamente, a diferencia del direccionamiento directo, la dirección eficaz de 9 bits en un direccionamiento indirecto se obtiene concatenando los 8 bits del registro FSR con el bit IRP de registro STATUS (figura 5.1). Figura 5.1: Direccionamiento directo vs. direccionamiento indirecto. Eduardo Romero A. Laboratorio de Sistemas Digitales III

Upload: sandoval-daniel

Post on 18-Dec-2015

233 views

Category:

Documents


11 download

DESCRIPTION

Códigos en ensamblador para PIC

TRANSCRIPT

  • Direccionamiento Indirecto y Teclado Matricial 55

    PRCTICA 5

    DIRECCIONAMIENTO INDIRECTO Y TECLADO MATRICIAL OBJETIVO:

    Identificar la forma de operar del modo de direccionamiento indirecto. Analizar el funcionamiento del un teclado matricial y sus algoritmos de

    decodificacin.

    Aplicar el direccionamiento indirecto al programa de decodificacin de un teclado matricial

    INTRODUCCION En la programacin de los microcontroladores PIC de la gama media la mayora de las instrucciones emplean direccionamiento directo, pero tambin es posible que operen en un modo de direccionamiento indirecto. Para el direccionamiento indirecto se emplean dos registros especiales: el FSR y el INDF (ste ltimo no es un registro fsico). El registro FSR se emplea para sealar o apuntar a una direccin cuyo contenido despus puede ser ledo escrito de forma indirecta empleando cualquier instruccin que use como operando al registro INDF. Internamente, a diferencia del direccionamiento directo, la direccin eficaz de 9 bits en un direccionamiento indirecto se obtiene concatenando los 8 bits del registro FSR con el bit IRP de registro STATUS (figura 5.1).

    Figura 5.1: Direccionamiento directo vs. direccionamiento indirecto.

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 56

    De tal forma, que esta forma de direccionamiento es particularmente til cuando se manejan tablas o arreglos de datos. MATERIAL Y EQUIPO EMPLEADO

    Laboratorio equipado con computadoras que tengan instalado el MPLAB versin v7.40 o superior y el WinPic800 v3.55 g.

    Cantidad Descripcin 1 Programador compatible con WinPic800. 1 Microcontrolador PIC16F628 1 Teclado Matricial 4x4

    8 1 Leds o barra de leds 4 Resistencia de 330 8 Resistencia de 4.7 k 1 Tableta experimental 1 Fuente de alimentacin de CD

    Pre-reporte:

    Leer previamente toda la prctica Descargar MPLAB v7.40 o superior y el WinPic800 v3.55 g de la pgina del curso

    y llevarlos el da de la sesin. Llevar implementado en un protoboard el circuito de la figura 5.5

    DESARROLLO I. Direccionamiento indirecto 1.- Edite el siguiente programa con MPLAB y cree el proyecto de la forma acostumbrada. Ensamble y depure hasta que no existan errores o warnings. ; Programa que realiza la suma de 10 nmeros almacenados ; a partir de la direccin 23h de la memoria de datos LIST P=16F628A RADIX HEX include "p16F628a.inc" cblock 20h SUMAH SUMAL LONG endc org 23h TABLA res .20

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 57

    org 0 goto INICIO org 5 INICIO clrf SUMAH ; Suma total parte alta = 00h clrf SUMAL ; Suma total parte baja = 00h movlw .10 ; Cantidad de nmeros movwf LONG ; a sumar = 10 movlw TABLA ; Coloca apuntador movwf FSR ; al inicio de la tabla OTRO_NUM: movf SUMAL,w ; w 4 file registers, lo cual desplegar una ventana donde se puede modificar el contenido de los GPRs. En nuestro caso vamos a introducir FFh en el contenido de las direcciones de memoria de la 23h a la 2Ch, tal como lo muestra la figura 5.2

    Figura 5.2: Ventana que muestra el contenido de las direcciones 23h a 2Ch.

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 58

    3. Inserte un punto de ruptura (BREAK-POINT) en la instruccin decfsz LONG (Para insertar un punto de ruptura, dar doble click con el ratn posicionado en la instruccin, para borrarlo dar doble click nuevamente). 4. Active el simulador MPLAB SIM en Debugger>>Select tool>>MPLAB SIM y simule un

    RESET al microcontrolador, con el botn , a continuacin ejecute la simulacin del programa con el botn RUN . Escriba el valor que tienen las siguientes variables cuando la simulacin se detiene al llegar al punto de ruptura. SUMAH ________ LONG __________ SUMAL _________ FSR ____________ 5. Reanude la simulacin y vuelva anotar el contenido de los registros. Repita este paso hasta que el programa finalice. Englobe sus resultados en la tabla 6.1.

    Tabla 5.1: Valor de las variables del programa durante su ejecucin.

    SUMAH SUMAL FSR LONG Pasada 1 Pasada 2 Pasada 3 Pasada 4 Pasada 5 Pasada 6 Pasada 7 Pasada 8 Pasada 9

    Pasada 10

    6. Modifique el contenido de la tabla para que contenga FFh en todas sus localidades. Elabore una tabla similar a la anterior.

    Tabla 5.2: Valor de las variables del programa (con la tabla llena de FFh).

    SUMAH SUMAL FSR LONG

    Pasada 1 Pasada 2 Pasada 3 Pasada 4 Pasada 5 Pasada 6 Pasada 7 Pasada 8 Pasada 9

    Pasada 10

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 59

    7. Analice el programa y explique De qu forma se puede incrementar la cantidad de nmeros que se pueden sumar? ________________________________________________________________________ ________________________________________________________________________ II. Teclado matricial Es un dispositivo de 16 teclas configurado con una matriz filas-columnas (figura 5.3) con la intencin de reducir el nmero de lneas de entradas y salidas necesarias para controlarlo con el microcontrolador. En un teclado no matricial cada tecla necesita una lnea de entrada, con lo cual representa una cantidad mayor de lneas de I/O del MCU. Para controlar el teclado, los puertos del MCU correspondientes a las filas se programan como salidas y los conectados a las columnas del teclado se programan como entradas. De tal forma que el objetivo principal del algoritmo para decodificar el teclado consiste en determinar la fila y columna que corresponde a la tecla que se presion. Lo anterior se logra rotando un valor lgico (ya sea 1 0) en cada una de las lneas configuradas como salidas (filas en este caso) e inmediatamente despus leer el estado lgico de las lneas conectadas como entrada (columnas). Cuando el valor lgico que se rota es un 1 al algoritmo se le denomina walking ones y walking zeros cuando se trata de un 0.

    Figura 5.3: Conexin (parcial) del teclado matricial con el PIC16F628.

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 60

    8. Edite el siguiente programa con MPLAB y cree el proyecto de la forma acostumbrada. Ensamble y depure hasta que no existan errores o warnings. ; Programa que decodifica un teclado matricial de 16 teclas y entrega el ; resultado en un display de 7 segmentos conectado en puerto A. LIST p=16F628 RADIX HEX w EQU 0 f EQU 1 INDF EQU 0x00 TMR_OPT EQU 0X01 PCL EQU 0x02 ESTADO EQU 0x03 FSR EQU 0x04 PORTA EQU 0x05 PORTB EQU 0x06 CMCON EQU 0x1F TEMP1 EQU 30h TEMP2 EQU 31h CONTADOR EQU 32h ; Variables para la tabla cblock 20h CERO UNO DOS TRES CUATRO CINCO SEIS SIETE OCHO NUEVE L_A L_B L_C L_D L_E L_F Endc ORG 0 ;Inicio del programa en direccin goto INICIO ; Subrutina que inicializa la tabla con los valores ; que se deben enviar al puerto A, Para desplegar ; el nmero correspondiente a la tecla presionada CONF_TABLA movlw 20h movwf FSR ; CERO

    movlw 0xDE

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 61

    movwf INDF incf FSR,f ; UNO

    movlw 0x50 movwf INDF incf FSR,f ; DOS

    movlw 0xCD movwf INDF incf FSR,f ; TRES

    movlw 0xD9 movwf INDF incf FSR,f ; CUATRO

    movlw 0x53 movwf INDF incf FSR,f ; CINCO

    movlw 0x9B movwf INDF incf FSR,f ; SEIS

    movlw 0x9F movwf INDF incf FSR,f ; SIETE

    movlw 0xD0 movwf INDF incf FSR,f ; OCHO

    movlw 0xDF movwf INDF incf FSR,f ; NUEVE

    movlw 0xD3 movwf INDF incf FSR,f ; L_A

    movlw 0xD7 movwf INDF incf FSR,f ; L_B

    movlw 0x1F movwf INDF incf FSR,f ; L_C

    movlw 0x8E movwf INDF incf FSR,f ; L_D

    movlw 0x5D movwf INDF incf FSR,f ; L_E

    movlw 0x8F movwf INDF

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 62

    incf FSR,f ; L_F

    movlw 0x87 movwf INDF incf FSR,f return CONF_PUERTOS movlw b'00000111' ; comparadores apagados movwf CMCON ; hablilita pins de I/O bsf ESTADO,5 ; conmuta a banco 1 movlw b'11110000' ; Config. nibble_alto de PORTB movwf PORTB ; y nible bajo como salida movlw b'00100000' ; Configura el Puerto A como salida movwf PORTA ; a excepcin de RA5 (salida fija) bcf ESTADO,5 ; conmuta a banco 0 clrf PORTB ; Puerto B = 00h clrf PORTA ; Puerto A = 00h return ; Subrutina que rota a la izquierda la parte baja del Puerto B ROTA_LED movf CONTADOR,w addwf PCL,f goto F0 goto F1 goto F2 goto F3 F3 movlw 01h movwf PORTB movlw 20h movwf FSR return F2 movlw 02h movwf PORTB movlw 24h movwf FSR return F1 movlw 04h movwf PORTB movlw 28h movwf FSR return F0 movlw 08h movwf PORTB movlw 2Ch movwf FSR return ; Subrutina que decodifica la tecla presiona y manda a escribir en el ; display de 7 segmentos de ctodo comn ; Parmetro de entrada: variable TECLA

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 63

    DECODIFICA swapf PORTB,w andlw 0Fh movwf TEMP1 btfss TEMP1,0 goto SIGUE0 movlw 00h goto APUNTA SIGUE0 btfss TEMP1,1 goto SIGUE1 movlw 01h goto APUNTA SIGUE1 btfss TEMP1,2 goto SIGUE2 movlw 02h goto APUNTA SIGUE2 btfss TEMP1,3 return movlw 03h APUNTA addwf FSR,f movf INDF,w movwf PORTA return ; Rutina de retardo de 1 ms a una frecuencia ; de oscilacin de 4 MHZ en el reloj interno RETARDO nop ; 1 ciclo movlw .249 ; 1 ciclo movwf TEMP2 ; 1 ciclo CICLO nop ; K ciclos decfsz TEMP2,f ; (K-1)+2 ciclos goto CICLO ; 2(K-1) ciclos return ; 2 ; Programa principal INICIO call CONF_TABLA call CONF_PUERTOS AKI movlw 0xFF movwf CONTADOR OTRA_TECLA incf CONTADOR,f btfsc CONTADOR,2 goto AKI call ROTA_LED call RETARDO call DECODIFICA goto OTRA_TECLA END

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 64

    9. Para la programacin del microcontrolador verifique los siguientes parmetros como se muestran en la ventana de la figura 5.4.

    Figura 5.4: Bits de configuracin para programar al PIC para el ejemplo del teclado matricial.

    10. Visualice el listado del programa y escriba el nombre de todas las variables que se emplean en l. ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 11. Identifique las subrutinas y escriba que es lo que hace cada una de ellas (apyese en los comentarios que tiene el programa).

    Tabla 5.3. Subrutinas y su respectiva funcin para el manejo del teclado matricial.

    Subrutinas Funcin

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 65

    12. Inserte un punto de ruptura (BREAK-POINT) en la instruccin call CONF_FUERTOS (Para insertar un punto de ruptura, dar doble click con el ratn posicionado en la instruccin, para borrarlo dar doble click de nuevo). 13. Ver el contenido de los GPRs con el men View>> 4 file registers. Con View >> Special Function Register, se abre la ventana que nos permite ver los SFR. 14. Borre el contenido de los GPR a travs del men Debugger >> Clear Memory >> GPRs.

    15. Simule un RESET al microcontrolador, con el botn , a continuacin ejecute la simulacin del programa con el botn RUN . 16. Observe que cuando la simulacin llega al punto de ruptura se detiene. 17. En las ventanas que muestran el contenido de los GPRs y SFRs se puede notar que el simulador nos indica con color rojo los registros que han cambiado. Anote el valor que tienen ahora las variables. ________________________________________________________________________ ________________________________________________________________________ 18. Ahora simule paso a paso la subrutina CONF_PUERTOS. Explique brevemente que es lo que hace. ________________________________________________________________________ ________________________________________________________________________ 19. Continu ejecutando el programa hasta que llegar a la subrutina ROTA_LED. Qu valor tiene la variable CONTADOR? ________________________________________________________________________ ________________________________________________________________________ 20. Ejecute paso a paso la subrutina ROTA_LED hasta la instruccin addwf PCL, f, Cul es su funcin dentro del programa? ________________________________________________________________________ ________________________________________________________________________

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 66

    21. En la rutina ROTA_LED hay 4 secciones de cdigo cada una rotuladas con las etiquetas F0, F1, F2, y F3. Cul es la funcin que realizan? ________________________________________________________________________ ________________________________________________________________________ 22. Analice la subrutina DECODIFICA con la ayuda del simulador. Explique Cmo se realiza la decodificacin de la tecla pulsada? ________________________________________________________________________ ________________________________________________________________________ 23. Descargue su programa al microcontrolador e implemente el circuito. Verifique su funcionamiento. 24. Analice la conexin del puerto A con el display. Por qu no se utiliz la terminal RA5/MCLR? ________________________________________________________________________ ________________________________________________________________________ 25. Por qu la conexin en RA4/TOCK1/CMP2 es diferente a las dems? ________________________________________________________________________ ________________________________________________________________________ 26. Vuelva comentario la lnea de cdigo call RETARDO, ensamble y reprograme el PIC nuevamente y experimente. Funciona bien el teclado? ________________________________________________________________________ Explique porqu es necesaria esa lnea de cdigo? ________________________________________________________________________ ________________________________________________________________________

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

  • Direccionamiento Indirecto y Teclado Matricial 67

    Figura 5.5: Circuito principal del teclado matricial.

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    PRCTICA 5DIRECCIONAMIENTO INDIRECTO Y TECLADO MATRICIALMATERIAL Y EQUIPO EMPLEADO

    DESARROLLO