Beruflich Dokumente
Kultur Dokumente
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
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.
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.
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.
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:
Operaciones de comparacin
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
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.
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
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)
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. 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