Sie sind auf Seite 1von 17

INFORME DE LABORATORIO DE MICRO_I

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

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

INFORME DE LABORATORIO DE MICRO_I

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 direccionamiento directo) 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 Timeout 1 = Despus de encender, una instruccin CLRWDT , o una instruccin SLEEP 0 = ocurri un timeout de WDT bit 3 PD: bit de Apagado 1 = Despus de encendido o por una instruccin CLRWDT 0 = Por una ejecucin de la instruccin SLEEP bit 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 acarreo 1 = 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 prstamo 1 = 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

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

INFORME DE LABORATORIO DE MICRO_I

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.

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

INFORME DE LABORATORIO DE MICRO_I


- 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 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 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 tambin para 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

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

INFORME DE LABORATORIO DE MICRO_I


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 mismas consideraciones 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.

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

INFORME DE LABORATORIO DE MICRO_I

Tcnicas de programacin en ensamblador Movimiento de datos


El 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

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

INFORME DE LABORATORIO DE MICRO_I


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 B Nota: 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 W MOVWF 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 W SUBWF 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

Aritmtica
Dentro 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 acumulador Visto lo anterior, para restar un valor al acumulador se utiliza ADDLW y se le suma el complemento a 2 del valor a restar.

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

INFORME DE LABORATORIO DE MICRO_I


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 0001 1111 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 suma


Los registros bsicos del microcontrolador PIC16F84A tienen una longitud de 8 bits expresados en forma binaria, lo cual quiere decir que 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 resta


En 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

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

INFORME DE LABORATORIO DE MICRO_I


Las operaciones de comparacin utilizan la instruccin de resta. La resta no es mas que sumar al minuendo el complemento a 2 del sustraendo.

Igualdad
Supongamos que estamos intetando determinar si un nmero es igual a 2. MOVLW .2 SUBWF N, W ; W = N - 2 BTFSS STATUS, Z GOTO NO_ES_IGUAL GOTO 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 que Supongamos que estamos intetando determinar si un nmero mayor o menor de 2.
MOVLW .2 SUBWF N, W ; W = N - 2 BTFSS STATUS, C GOTO MENOR GOTO 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<2 entonces el programa va a MENOR. Si N es igual o mayor a 2 se salta a MAYOR_IGUAL. As, el cdigo anterior: N<2 MENOR N>=2 MAYOR_IGUAL Otra posibilidad es la siguente: MOVF N, W SUBLW .2 ; W = 2 - N BTFSS STATUS, C GOTO MAYOR GOTO MENOR_IGUAL

Subrutinas
El movimiento del programa se basa en la llamada a etiquetas y a subrutinas. Esto nos da capacidad para decidir, temporizar o retardar, operar y/o ejecutar algoritmos. Por eso debemos tener en cuenta las tcnicas ms comunes en la programacin de lenguaje ensamblador que nos permitirn hacer estas y muchas otras cosas. La mayora de los microcontroladores incluyen en su repertorio de instrucciones algunas que permiten saltar a una rutina y, cuando se completa su ejecucin, retornar al programa principal. El empleo de subrutinas aporta muchas ventajas entre las que se destacan las siguientes: Se pueden escribir como subrutinas secciones de cdigo y ser empleadas varias veces en el mismo programa. Dan a los programas un carcter modular, es decir, se pueden codificar diferentes mdulos para utilizarlos en cualquier programa. Se reduce notablemente el tiempo de programacin y la deteccin de errores, utilizando repetidamente una subrutina. El cdigo es ms fcil de interpretar, dado que las instrucciones de las subrutinas no aparecen en el programa principal, slo

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

INFORME DE LABORATORIO DE MICRO_I


figuran las llamadas (CALL).

La instruccin CALL
La 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.

Ramificacin
Cuando 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 es call Accion1 ; 0 se salta 'call Accion1' y se contina en la siguiente instruccin btfsc PORTA,1 ; si el bit 1 del puerto A esta a 1 se ejecuta 'Accion2' pero si es call Accion2 ; 0 se salta 'call Accion1' y se contina en la siguiente instruccin .... goto Bucle ; El ciclo se repite Accion1 movlw B'00010001' movwf PORTB return Accion2 movlw B'00100010' movwf PORTB return .....

Ramificacin mltiple
Cuando 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.

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

INFORME DE LABORATORIO DE MICRO_I

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 OPCION1 XORWF OPCION,0 ; verificacin de OPCION respecto a W BTFSC STATUS,Z ; verificando la bandera Z GOTO ACCION1 MOVLW OPCION2 XORWF OPCION,0 ; verificacin de OPCION respecto a W BTFSC STATUS,Z ; verificando la bandera Z GOTO ACCION2 MOVLW OPCION3 XORWF OPCION,0 ; verificacin de OPCION respecto a W BTFSC STATUS,Z ; verificando la bandera Z GOTO ACCION3 ACCION1 ......... ; instrucciones de la Accin 1 ......... ......... GOTO ENCUENTRO ACCION2 ......... ; instrucciones de la Accin 2 ......... ......... GOTO ENCUENTRO ACCION3 ......... ; 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

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

INFORME DE LABORATORIO DE MICRO_I


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)

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

INFORME DE LABORATORIO DE MICRO_I

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.

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

INFORME DE LABORATORIO DE MICRO_I

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 el led en RB0, si X>Y se enciende el led en RB1 y si X<Y se enciende el led en RB2 c) Se obtiene un valor de temperatura en grados Celsius (C) de los 4 bits inferiores del puerto D (RD0RD3). Se convierte este valor a grados Fahrenheit (F). El resultado el resultado se muestra en los 8 bits del puerto B (RB0RB7)

8. Informe
I. Imprimir el Cdigo y Esquemtico del programa asignado en el Procedimiento Experimental II. Investigar e imprimir el Cdigo en lenguaje Ensamblador PIC para la Multiplicacin mediante rotaciones de 2 nmeros de 8 bits sin signo dando como resultado un valor de 16 bit. Comentar el cdigo completo

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

INFORME DE LABORATORIO DE MICRO_I


III. Conclusiones

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

INFORME DE LABORATORIO DE MICRO_I

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

INFORME DE LABORATORIO DE MICRO_I

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

Das könnte Ihnen auch gefallen