PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

download PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

of 17

Transcript of PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    1/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    1. Objetivos

    a. General

    ensamblador

    b. Especficos

    del PIC16F877A a travs del conjunto de

    instrucciones RISC de esta familia de microcontroladores.

    2. Fundamento Terico:

    Modelo de Programacin

    ALU Unidad Aritmtica-Lgica

    entrada

    peraciones segn el cdigo que reciba en las entradas de control

    Registro de trabajo W

    Este es el registro de trabajo principal, se comporta de manera similar al

    acumulador en los microprocesadores. Este registro

    participa en la mayora de las instrucciones. Est directamente relacionado con la

    Unidad Aritmtica y Lgica ALU.

    Registro de Estado(STATUS)

    microcontrolador

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    2/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    e la ALU, es estado del

    RESET y elbanco elegido para los datos de la

    memoria (SRAM)

    bit 7 IRP: Registro de seleccin de Banco de la memoria de Datos (usado para direccionamiento

    indirecto)1 = Bank 2, 3 (100h - 1FFh)0 = Bank 0, 1 (00h - FFh)bit 6-5 RP1:RP0: Registro de seleccin de banco de la memoria de Datos (usado para direccionamientodirecto)00 = Bank 0 (00h - 7Fh)01 = Bank 1 (80h - FFh)10 = Bank 2 (100h - 17Fh)11 = Bank 3 (180h - 1FFh)bit 4 TO: bit de Timeout1 = Despus de encender, una instruccin CLRWDT , o una instruccin SLEEP

    0 = ocurri un timeout de WDTbit 3 PD: bit de Apagado1 = Despus de encendido o por una instruccin CLRWDT0 = Por una ejecucin de la instruccin SLEEPbit 2 Z: Zero bit

    1 = El resultado de una operacin aritmtica fue 0.0 = El resultado de una operacin aritmtica no fue 0.bit 1 DC: Digito de acarreo1 = Hubo acarreo del cuarto bit de orden bajo en el resultado.0 = No hubo acarreo del cuarto bit de orden bajo en el resultado.bit 0 C: bit de acarreo o prstamo1 = Ocurri acarreo en el bit ms significativo del resultado.

    0 = No ocurri acarreo en el bit ms significativo del resultado.

    Organizacin de la memoria RAM del PIC16F877A

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    3/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    BANCO 0:

    - TMR0: Registro del temporizador/contador de 8 bits.

    - PCL: Byte menos significativo del contador de programa (PC).- STATUS: Contiene banderas (bits) que indican el estado del procesador despus de una operacin

    aritmtica/lgica.

    - FSR: Registro de direccionamiento indirecto.

    - PORTA, PORTB, PORTC, PORTD, PORTE: Registro de puertos de E/S de datos. Conectan con los

    pines fsicos del micro.

    - PCLATH: Byte alto (ms significativo) del contador de programa (PC).

    - INTCON: Registro de control de las interrupciones.

    - ADRESH: Parte alta del resultado de la conversin A/D.

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    4/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    - ADCON0: Controla la operacin del mdulo de conversin A/D

    BANCO 1:

    - OPTION: Registro de control de frecuencia del TMR0.

    - TRISA, TRISB, TRISC, TRISD. TRISE: Registros de configuracin de la operacin de los pines de los

    puertos.

    - ADRESL: Parte baja del resultado de la conversin A/D.

    - ADCON1: Controla la configuracin de los pines de entrada anloga.BANCO 2:

    - TMR0: Registro del temporizador/contador de 8 bits.

    - PCL: Byte menos significativo del contador de programa (PC).

    - FSR: Registro de direccionamiento indirecto.

    - EEDATA: Registro de datos de la memoria EEPROM.

    - EEADR: Registro de direccin de la memoria EEPROM.

    - PCLATH: Byte alto (ms significativo) del contador de programa (PC).

    - INTCON: Registro de control de las interrupciones.

    BANCO 3:

    - OPTION: Registro de control de frecuencia del TMR0.

    - EECON1: Control de lectura/escritura de la memoria EEPROM de datos.

    - EECON2: No es un registro fsico.

    05h o PORTA: Puerto de Entrada/Salida de 6 bits Este puerto, al igual que todos sus similares en losPIC, puede leerse o escribirse

    como si se tratara de un registro cualquiera. El registro que controla el sentido (entrada o salida) de los pines

    de este puerto est

    localizado en la pgina 1, en la posicin 85h y se llama TRISA. El puerto A tambin puede ser configurado

    para que trabaje como

    entradas anlogas para el convertidor Anlogo a Digital interno del microcontrolador.

    06h o PORTB: Puerto de entrada/salida de 8 bits. Al igual que en todos los PIC, este puede leerse o

    escribirse como si se tratara de un

    registro cualquiera; algunos de sus pines tienen funciones alternas en la generacin de interrupciones. El

    registro de control para la

    configuracin de la funcin de sus pines se localiza en la pgina 1, en la direccin 86h y se llama TRISB.

    Puede ser configurado tambinpara cumplir otras funciones.

    07h o PORTC: Puerto de entrada/salida de 8 bits. Al igual que en todos los PIC, este puede leerse o

    escribirse como si se tratara de un

    registro cualquiera; algunos de sus pines tienen funciones alternas. El registro de control para la

    configuracin de la funcin de sus

    pines se localiza en la pgina 1, en la direccin 87h y se llama TRISC. Puede ser configurado tambin para

    cumplir otras funciones.

    08h o PORTD: Puerto de entrada/salida de 8 bits. Al igual que en todos los PIC, este puede leerse o

    escribirse como si se tratara de un

    registro cualquiera; algunos de sus pines tienen funciones alternas cuando se utiliza el micro en modo

    microprocesador. El registro de

    control para la configuracin de la funcin de sus pines se localiza en la pgina 1, en la direccin 88h y se

    llama TRISD. Puede ser

    configurado tambin para cumplir otras funciones.

    09h o PORTE: Puerto de Entrada/Salida de 3 bits. Este puerto, al igual que todos sus similares en los

    PIC, puede leerse o escribirse

    como si se tratara de un registro cualquiera. El registro que controla el sentido (entrada o salida) de los pines

    de este puerto est

    localizado en la pgina 1, en la posicin 89h y se llama TRISE. El puerto E tambin puede ser configurado

    para que trabaje como

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    5/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    entradas anlogas para el convertidor Anlogo a Digital interno del microcontrolador o para que maneje las

    seales de control en el

    modo microprocesador.

    85h o TRISA: Registro de configuracin del puerto A. Como ya se mencion, es el registro de

    control para el puerto A. Un cero en el

    bit correspondiente al pin lo configura como salida, mientras que un uno lo hace como entrada.

    86h o TRISB: Registro de configuracin del puerto B. Control del puerto B. Son vlidas las mismasconsideraciones del registro TRISA.

    87h o TRISC: Registro de configuracin del puerto C. Control del puerto C. Son vlidas las mismas

    consideraciones del registro TRISA.

    88h o TRISD: Registro de configuracin del puerto D. Control del puerto D. Son vlidas las mismas

    consideraciones del registro TRISA.

    89h o TRISE: Registro de configuracin del puerto E. Control del puerto E. Son vlidas las mismas

    consideraciones del registro TRISA.

    020h a 7Fh: Registros de propsito general. Estas 96 posiciones estn implementadas en la memoria

    RAM esttica, la cual conforma el

    rea de trabajo del usuario. Pueden ser utilizadas para almacenar cualquier dato de 8 bits.

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    6/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    Tcnicas de programacin en ensambladorMovimiento de datosEl juego de instrucciones reducido, y su tamao de 14 bits, hacen que el PIC16F877A tenga una serie de

    restricciones. Por un lado no

    se pueden especificar dos registros dentro de una instruccin. Cada registro necesita 7 bits para especificar

    la direccin, pero tambin

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    7/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    hay que especificar el cdigo de la instruccin y qu hacer con ella. La solucin es realizar todo a travs del

    registro de trabajo o w que

    no necesita direccin y est situado dentro de la CPU del microcontrolador. Una transferencia de un registro

    a otro necesitara dos

    instrucciones. Supongamos que tenemos que transferir un dato al puerto B:

    MOVF DATO, W ; copia el contenido del registro DATO en W

    MOVWF PORTB ; copia el contenido de W en el Puerto BNota: En todos los ejemplos consideramos que w = 0 y que f = 1, esto significa que MOVF DATO, W es lo

    mismo que MOVF DATO, 0

    La primera instruccin tiene la forma MOVF f,d que copia el registro f en el destino especificado por d (w

    en este caso). La segunda

    instruccin simplemente mueve cualquier dato contenido en w en el registro f, que en este caso es el

    puerto B.

    El registro DATO permanece invariable en la primera instruccin y w permanece invariable en la segunda,

    de manera que estas

    instrucciones se parecen ms a una copia que a un movimiento de datos.

    Las instrucciones con literales no tienen espacio para contener la direccin de un registro, por eso debemos

    utilizar el registro de

    trabajo w para cargar un registro con un literal y tambin se necesitan dos instrucciones.

    MOVLW 0xAA ; coloca el valor 10101010 en WMOVWF DATO ; copia W en el registro DATO

    Esto mismo se aplica cuando se usan operaciones booleanas, de suma y de resta entre literales y registros.

    Todas necesitan dos

    instrucciones:

    MOVLW k ; copia el literal en WSUBWF f,d ; copia el resultado de restar W de f en d

    Supongamos que queremos poner a cero el nibble inferior

    MOVLW 0xF0 ; ponemos una mascara ('11110000')ANDWF DATO, f ; el resultado de DATO AND 0xF0 se coloca en DATO

    Las instrucciones de un solo operando son fciles de entender:

    CLRF f, Pone todos los bits del registro f a cero

    CLRW, Pone todos los bits de W a cero

    BCF f,b, Pone a cero el bit b del registro f

    BSF f,b, Pone a cero el bit b del registro f

    AritmticaDentro de los microcontroladores PIC se cuenta con instrucciones aritmticas tales como:

    Para efectuar operaciones de suma:

    o ADDWF f,d, Suma el valor de w al registro f guardndolo en w o f

    o ADDLW k, Suma el valor de w al literal k guardndolo en w

    Para efectuar operaciones de resta:

    o SUBWF f,d, Resta al valor del registro f el valor de w (f-w) guardndolo en w o f

    o SUBLW k, Resta al valor del literal k el valor de w (k-w) guardndolo en w

    Para realizar multiplicaciones por 2.

    o RLF f,d, Rota a la izquierda el valor del registro f guardndolo en w o f

    Para realizar divisiones entre 2.

    o RRF f,d, Rota a la derecha el valor del registro f guardndolo en w o f

    Hasta este punto podramos ver el conjunto de instrucciones un poco limitado. Sin embargo, utilizando las

    tcnicas apropiadas de

    programacin podemos obtener operaciones ms complejas.

    Restar del acumuladorVisto lo anterior, para restar un valor al acumulador se utiliza ADDLW y se le suma el complemento a 2 del

    valor a restar.

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    8/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    Realizar la operacin w - 1

    Para restar 1 al acumulador se utiliza ADDLW 0xFF, en lugar de SUBLW 0x1 porque esta instruccin no

    resta el literal a w, sino al

    revs, al literal le resta w. Por lo tanto para restar un literal de w debemos sumar el complemento a 2 del

    literal con w, en nuestro caso

    el literal es 1 (0000 0001 b) y el complemento a 2 de 1 es FF h:

    0000 00011111 1110+1-----------1111 1111 (FF h.)

    Banderas (Flags)Las banderas se utilizan para dar informacin adicional cuando se realizan operaciones lgicas y aritmticas

    dentro del

    microcontrolador. As, podremos tomar decisiones segn el valor de cada una de las banderas. Existen

    diferentes tipos de banderas en

    un microcontrolador; entre ellas tenemos:

    Las banderas en la sumaLos registros bsicos del microcontrolador PIC16F84A tienen una longitud de 8 bits expresados en forma

    binaria, lo cual quiere decirque el nmero mximo expresado en forma decimal ser el 255. En la suma existen tres tipos de banderas

    que pueden

    proporcionarnos mayor informacin del resultado. Estas banderas son denominadas CARRY (C), Acarreo

    de Dgito (DC) y el Estado Cero

    (Z ). Todas estas banderas son activadas segn sea el caso.

    Por ejemplo, en la suma, la bandera CARRY se coloca en "1" cuando el resultado supera el nmero 255 y

    permanecer en "0"

    indicando que no se present ningn overflow; es decir que el resultado de la suma fue menor que el

    mximo permitido.

    Por otro lado, existe otra bandera denominada Acarreo de Dgito DC que expresa lo que sucede con los

    4 Bits menos significativos; es

    decir, si los cuatro bits menos significativos sobrepasa al numero 15 (2 elevado a 4, incluyendo el cero)expresado en forma decimal,

    entonces la bandera DC = 1, en el caso contrario ser "0".

    Finalmente la bandera de estado Z se activa cuando la operacin aritmtica da como resultado un "1"; de lo

    contrario se coloca en

    "0".

    Las banderas en la restaEn la resta de dos nmeros la bandera CARRY se coloca en "1" cuando el resultado de la operacin sea un

    nmero positivo, o se pone

    en cero para el caso contrario. Esto tan sencillamente quiere decir por ejemplo que si tenemos A=20 y B=10

    donde X=A-B; el resultado

    ser X=10 (nmero positivo); para el caso contrario si tenemos A=10 y B=20 donde X=A-B entonces X= - 10,

    obtenindose un resultado

    negativo.La bandera de acarreo de dgito DC se colocar en "1" cuando los cuatro bits menos significativos del

    registro w sea menor que los

    cuatro bits menos significativos del registro que se desea restar, en caso contrario se colocar un cero. La

    bandera de estado Z

    solamente se activar cuando ambas cantidades sean iguales.

    Operaciones de comparacin

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    9/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    Las operaciones de comparacin utilizan la instruccin de resta. La resta no es mas que sumar al minuendo

    el complemento a 2 del

    sustraendo.

    IgualdadSupongamos que estamos intetando determinar si un nmero es igual a 2.MOVLW .2

    SUBWF N, W ; W = N - 2BTFSS STATUS, ZGOTO NO_ES_IGUALGOTO ES_IGUAL

    Al nmero a comprobar (N) se le resta la cantidad de comparacin (2) que se ha guardado en W. El resultado

    vuelve a guardarse en

    W para salvaguardar la variable N. Finalmente se comprueba la bandera Zero del registro Status.

    Mayor que y menor queSupongamos que estamos intetando determinar si un nmero mayor omenor de 2.MOVLW .2SUBWF N, W ; W = N - 2BTFSS STATUS, C

    GOTO MENORGOTO MAYOR_IGUAL

    Aqui se comprueba la bandera C. Si Carry es 1 el resultado es positivo y si es 0 es negativo. As, si N

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    10/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    figuran las llamadas (CALL).

    La instruccin CALLLa instruccin CALL (llamada a subrutina) consigue que la ejecucin del programa contine en la direccin

    donde se encuentra la

    subrutina a la que hace referencia. Es similar a GOTO pero coloca en la pila la direccin de la siguiente

    instruccin que se debe ejecutar

    despus de terminar con la subrutina.La subrutina finaliza con la instruccin RETURN (retorno de la subrutina) que retoma la direccin guardada

    en la pila y la coloca en el

    contador de programa PC continuando el flujo de control con la instruccinque que sigue a CALL .

    En la familia PIC de gama media la pila tiene ocho niveles de memoria del tipo LIFO (Last In, First Out, ltimo

    en entrar, primero en

    salir). Si se produce la llamada a una subrutina durante la ejecucin de otra subrutina, la direccin de

    retorno de esta segunda es

    colocada en la cima de la pila sobre la direccin anterior. Esta segunda direccin es la primera en salir de la

    pila mediante la instruccin

    RETURN .

    Con la pila de ocho niveles, una subrutina puede llamar a otra y sta, a su vez, llamar a otra hasta un

    mximo de ocho.

    RamificacinCuando se tiene que solucionar un diagrama de flujo como el de la siguiente figura, en el cual tenemos una

    accin o ninguna segn la

    respuestas a una pregunta, se plantea la solucin siguiente.

    Como ejemplo consideramos lo siguiente; el puerto A se configura como entrada y el puerto B como salida

    de manera que las salidas

    del puerto B dependan del estado que introduzcamos al puerto A:

    ....Bucle btfsc PORTA,0 ; si el bit 0 del puerto A esta a 1 se ejecuta'Accion1' pero si escall Accion1 ; 0 se salta 'call Accion1' y se contina en la siguienteinstruccin

    btfsc PORTA,1 ; si el bit 1 del puerto A esta a 1 se ejecuta 'Accion2'pero si escall Accion2 ; 0 se salta 'call Accion1' y se contina en la siguienteinstruccin....goto Bucle ; El ciclo se repiteAccion1 movlw B'00010001'movwf PORTBreturnAccion2 movlw B'00100010'

    movwf PORTBreturn.....

    Ramificacin mltipleCuando se tiene que solucionar un diagrama de flujo como el de la siguiente figura, en el cual tenemos tres

    posibles respuestas a una

    pregunta, se plantean las soluciones aqu presentadas.

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    11/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    Existen varias formas de resolver en unprograma este problema:

    Una forma posible es comparando uno por uno los valores de las diferentes opciones almacenadas en

    memoria RAM en una variable

    llamada OPCION

    MOVLW OPCION1XORWF OPCION,0 ; verificacin de OPCION respecto a WBTFSC STATUS,Z ; verificando la bandera ZGOTO ACCION1MOVLW OPCION2XORWF OPCION,0 ; verificacin de OPCION respecto a WBTFSC STATUS,Z ; verificando la bandera ZGOTO ACCION2MOVLW OPCION3XORWF OPCION,0 ; verificacin de OPCION respecto a WBTFSC STATUS,Z ; verificando la bandera ZGOTO ACCION3ACCION1 ......... ; instrucciones de la Accin 1..................GOTO ENCUENTROACCION2 ......... ; instrucciones de la Accin 2

    .........

    .........GOTO ENCUENTROACCION3 ......... ; instrucciones de la Accin 3..................ENCUENTRO ; sitio de encuentro......... ; continuacin del programa

    3. Materiales y Equipos

    a. Herramientas Software

    Compilador: MikroBasic Pro for PIC y MikroC Pro for PIC

    -Isis

    b. Herramientas Hardware

    Ninguno

    c. Componentes

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    12/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    Ninguno

    4. Diagrama Esquemtico para armado en protoboard

    6. Cdigo fuente MikroBasic-ASM

    Ejemplo1:Se obtiene un dato de los 4 bits inferiores del puerto D (RD0RD3). Se suma una

    constante 5 al dato y se muestra en los 4 bits inferiores del puerto B (RB0RB3)

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    13/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    Ejemplo2:Compara el dato del puerto de Entrada con el nmero 13. Si el Dato es

    igual a 13, se encienden todos los leds de Salida. Si el dato es distinto de 13

    se activan los leds pares y se apagan los impares.

    Ejemplo3: Se obtiene un dato de los 4 bits inferiores del puerto D de Entrada

    (RD0RD3). RD0 no es afectado y reaparece en RB0. RD1 siempre aparece en RB1

    como Cero.RD2 siempre aparece en RB2 como Uno. Finalmente RD3 aparece invertido

    en RB3. Esta operacin se repite infinitamente.

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    14/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    7. Procedimiento Experimental

    Modificando, si es necesario, el circuito esquemtico y usando el compilador MikroBasicPro for PIC realizar

    los siguientes

    programas:

    a) Se obtiene un dato X de los 4 bits inferiores del puerto D de (RD0RD3) y un datoY de los 4 bits superiores

    del puerto D

    (RD4RD7). Se multiplica X*Y, el resultado se muestra en los 8 bits del puerto B (RB0RB7)

    b) Se obtiene un dato X de los 4 bits inferiores del puerto D de Entrada (RD0RD3). y un dato Y de los 4 bits

    superiores del puerto

    D de Entrada (RD4RD7). Se comparan X e Y. Si X=Y se enciende elled en RB0, si X>Y se enciende el led en

    RB1 y si X

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    15/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

    III. Conclusiones

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    16/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.

  • 7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador

    17/17

    INFORME DE LABORATORIO DE MICRO_I

    REALISADO POR ANGHEL COUSIN C. Y. M. Q.