Sei sulla pagina 1di 12

Objetivo General: El propsito general de esta prctica es que el alumno aprenda a utilizar los puertos de entrada/salida que incluye

el microcontrolador PIC16F877A, aplicando las diferentes operaciones aritmticas para generar resultados que se puedan observar a travs de LEDs encendidos o apagados.

Objetivos Particulares: Los objetivos particulares son los siguientes: Que el alumno sea capaz de leer las hojas de datos del PIC16F877A para su propio beneficio. Que el alumno sea capaz de generar un cdigo exitosamente en lenguaje ensamblador y se ejecute correctamente. Que el alumno sea capaz de utilizar los registros TRISA, TRISB, TRISC y TRISD para configurar los puertos PORTA, PORTB, PORTC y PORTD ya sea de entrada o salida. Que el alumno sea capaz de realizar exitosamente las operaciones aritmticas bsicas en lenguaje ensamblador y que pueda ser visualizado en un circuito elctrico mediante el uso de LEDs.

Introduccin: Utilizamos el microcontrolador PIC16F877A para poder manejar la forma en que un bloque de 9 LEDS prendan, 8 de ellos para representar un nmero en binario (8 bits) y el LED restante para representar el acarreo generado en un resultado. Declaramos primero nuestros puertos de salida y entrada, en este caso, los puertos de salida fueron todos los bits del puerto C (PORTC) y el bit 7 del del puerto B (PORTB). El circuito deba esperar primero a que se presionara 1 de los 4 push buttons requeridos para esta prctica, que indicara que se va a iniciar, el cual estaba conectado al bit 0 del puerto B (PORTB). La forma mediante la cual ingresbamos datos al circuito fue con un DIP SWITCH de 8 segmentos, el cual iba conectado al puerto de entrada PORTD. El circuito deba realizar la operacin suma, resta o multiplicacin dependiendo el botn que se presionara, despus se volvera a presionar el botn conectado al bit 0 del PORTB para realizar la divisin del resultado anterior con el nmero que se ingresara al momento de presionar el botn del bit 0 de PORTB por segunda vez. Ambos resultados deban ser mostrados por el bloque de LEDs.

Marco Terico El mircrocontrolador a utilizar ser el PIC16F877A que cuenta con 40 pines y un total de 35 instrucciones, de las cuales trabajaremos con cierto porcentaje de las mismas en esta prctica, su definicin se mostrar a continuacin.

Las instrucciones utilizadas en el desarrollo de esta prctica son las siguientes: ADDWF con 2 parmetros f y d, hace la suma binaria de un numero contenido en el acumulador W ms el valor contenido en el registro asignado por f, el resultado se guarda en el registro que mencione d. MOVF con parmetros f y d, lee el contenido del registro f y el resultado se guarda en el registro que mencione d. MOVWF con el parmetro f, va a pasarle el valor que tenga contenido el acumulador por el puerto o registro que mencione f. SUBWF con parmetros f y d, hace la resta del contenido del registro f menos el contenido del acumulador, es decir, la suma del contenido del registro f ms el complemento A2 del contenido del acumulador. BCF con parmetros f y b, pone en cero el bit b del registro f. BSF con parmetros f y b, pone en uno el bit b del registro f. ADDLW con parmetro k, hace la suma binaria del contenido del acumulador con la constante k. CALL con parmetro k, manda a llamar a la subrutina declarada por la etiqueta k. GOTO con parmetro k, carga al contador de programa con la direccin de la etiqueta marcada con k. MOVLW con parmetro k, carga al acumulador con el valor k. RETURN, regresa de una subrutina, una lnea despus de cuando dicha subrutina fue llamada. SLEEP, pone al microcontrolador en modo de bajo consumo. Lo que hace esta instruccin es apagar el oscilador del dispositivo, lo cual genera que se dejen de buscar instrucciones a ejecutar.

Este microcontrolador cuenta con 5 puertos de entrada/salida, PORTA, PORTB, PORTC, PORTD y PORTE, que pueden ser analgicos o digitales. Para poder modificar dicho comportamiento de los puertos se requiere modificar los registros TRISA, TRISB, TRISC, TRISD y TRISE respectivamente, por lo que se tiene la necesidad de cambiarse al banco 1 de los cuatro bancos con los que cuenta el microcontrolador y poner en 0 los bits que se desean de salida, cabe mencionar, que los puertos estn por defecto como entrada, es decir, en cero todos sus bits. El parmetro f que utilizan estas instrucciones es una direccin de un registro de propsito especfico. Los registros de propsito especfico son registros utilizados por la unidad central de procesamiento y por los perifricos del micro para controlar la operacin deseada del dispositivo. Estos registros son implementados

como RAM estticos. Los registros de uso especfico pueden ser clasificados en 2 grupos: Ncleo (CPU) o perifrico. El registro de uso especfico que nos ayuda a cambiarnos de banco, entre otras funciones, es el registro STATUS. El registro STATUS contiene el estado aritmtico de la ALU, el estado del reinicio y la seleccin de banco. Este registro puede ser el destino de cualquier instruccin, as como cualquier otro registro. Si el registro STATUS es el destino para una instruccin que altera el estado de las banderas, entonces la posibilidad de escritura para estos tres bits de las banderas es inhabilitada. Estos bits sern ceros o unos de acuerdo a la lgica del dispositivo. Se recomienda para alterar algn bit del registro STATUS que solo se utilicen las instrucciones BCF, BSF, SWAPF y MOVWF, debido a que estas instrucciones no alteran el estado de las banderas. La versin de MPLAB que se utilizar ser la versin 7.6. Este software incluye un editor de textos, un ensamblador llamado MPASM, un simulador llamado MPLAB SIM y un organizador de proyectos. MPLAB puede ayudar a depurar y simular programas descritos en lenguaje ensamblador para programar una gran variedad de microcontroladores, por lo que se debe seleccionar qu micro se utilizar para empezar, tambin es necesario que MPLAB sepa a qu velocidad se ejecutar el programa, es decir la frecuencia que planeamos utilizar para el oscilador, por esta ocasin se requerir una frecuencia de 4MHz, esta opcin se puede modificar en el men DEBUGGER y en la opcin de configuracin. Al iniciar un programa en ensamblador, se tiene que mencionar primero el dispositivo a utilizar, y la palabra de configuracin que es diferente para cada microcontrolador que soporta MPLAB, si no se conoce la palabra de configuracin para el microcontrolador a utilizar, se pueden encontrar fcilmente las hojas de especificaciones en internet. Para el PIC16F877A se deber copiar el siguiente segmento de cdigo: PRPCESSOR 16F877 INCLUDE<P16F877.INC> __CONFIG 0x3F71 En la tercera lnea de este cdigo hago nfasis de que son dos guiones bajos seguidos, no solo uno, de hacerlo as el ensamblaje del programa no resultara exitoso.

Desarrollo El material que necesitamos para realizar esta prctica fue el siguiente: 9 Resistencias de 220 ohm. 13 Resistencias de 10k ohm. Cristal de 4 MHz.

2 Capacitores de 22 pF. 9 LEDs. Capacitor de 1000 uF. Capcitor de 100nF 5 Push Buttons. Dip Switch de 8 interruptores. Fuente de tensin de 5 V.

Lo primero que hicimos para realizar esta prctica fue elaborar el circuito elctrico requerido para la conexin del microcontrolador, como declaramos el puerto PORTD como entrada, el dip switch lo conectamos a cada uno de los pines del puerto, desde RD0 hasta RD7. Entre cada conexin de los pines del puerto con el switch conectamos una resistencia de 10k para dejar pasar solo la corriente necesaria. Despus, los bits RB0 a RB3 fueron conectados a un push button. El botn de RB0 era slo para indicar al micro cuando leer el puerto PORTD y empezar el sistema, o tambin para realizar la divisin ya que se haba hecho la primer parte. El bit RB1 era para indicar que queramos hacer la operacin suma, el bit RB2, indicaba que queramos hacer la operacin resta, y el ltimo indicaba que realizaramos la operacin multiplicacin. Luego, conectamos el bloque de 8 LEDs al puerto de salida PORTC, uno a cada pin del micro desde RC0 hasta RC7, este arreglo de LEDs nos indicara los resultados de cada operacin en binario, el otro led lo conectamos al bit RB7 que tambin es de salida, este LED nos indicaba que el resultado de cualquier operacin haba generado un acarreo. Entre cada pin y led conectado, conectamos tambin una resistencia de 220 ohm para regular la intensidad de conrriente. Despus, conectamos uno de los push buttons al MCLR de micro, que se encuentra en el pin 1 del micro, para poder limpiar los puertos y volver a comenzar el sistema, en este pin del micro tambin conectaos una resistencia de 220 ohm para que la cantidad de corriente fuera la adecuada. Conectamos despus el oscilador de 4 MHz a los pines OSC1 y OSC2 del micro, junto con su respectiva resistencia de 22 pF conectadas a tierra. Por ltimo, conectamos nuestra alimentacin en el pin VDD junto con los capacitores de 1000 uF y 100 nF conectados a tierra igualmente, tambin conectamos nuestra tierra al pin VSS del PIC.

Diagrama de Flujo.
INICIO

0X00 -> PORTC 0X00 -> RB7

NO
1 -> RB0

1 -> RB1

1 -> RB2

1 -> RB3

SI

PORTD = VAR2 R= VAR1 + VAR2

PORTD = VAR2 R= VAR1 - VAR2 R -> PORTC

PORTD = VAR2 R= VAR1 * VAR2 R -> PORTC

PORTD -> PORTC PORTD = VAR1

R -> PORTC

C=1

C=1

C=1

NO
1 -> RB1 1 -> RB2

SI SI

SI

SI

1-> RB3 ENCENDER LED EN RB7

NO
R = VAR1 / VAR 2 R -> PORTC 1 -> RB0

ENCENDER LED EN RB7

SI

SI
C=1

SI

FIN

Cdigo Fuente ;******************************************************************************************** ;* INSTITUTO POLITECNICO NACIONAL * ;* Unidad Profesional Interdisciplinaria * ;* en Ingeniera y Tecnologas Avanzadas * ;* * ;* ARQUITECTURA DE COMPUTADORAS * ;* GRUPO: 1TM6 * ;* * ;* FECHA: 27 DE MARZO DE 2014 * ;* * ;* BASILIO GONZLEZ DULCE GUADALUPE * ;* CARRIN TELLZ KEVIN * ;* * ;* PRCTICA 2: USO DE PUERTOS Y OPERACIONES * ;* PARA: MICROCONTROLADOR PIC16F877A * ;* ENSAMBLADO EN: MPLAB FOR WINDOWS * ;******************************************************************************************* PROCESSOR 16F877A INCLUDE <P16F877A.INC> __CONFIG 0X3F71 CBLOCK 0x020 dato_1, dato_2, suma_div,aux_1

result,

cont,

suma_multi,

ENDC ;********************************************************************************************* ;INICIO DEL PROGRAMA: CONFIGURACIN DE PUETOS COMO ENTRADAS Y SALIDAS ;********************************************************************************************* ORG 0X00; Inicio: MOVLW b'00000000' ; MOVWF PORTB ;LIMPIA PUERTO A MOVWF PORTC ;LIMPIA PUERTO B BSF STATUS, RP0 ; CLRF TRISC ; MOVLW b'00001111' ; MOVWF TRISB ;

BCF

STATUS, RP0

;********************************************************************************************* ;PUNTO 1: SACA CEROS POR EL PUERTO C Y POR EL BIT 7 DEL PUERTO B. LEE Y GUARDA EL PRIMER ; DATO QUE SE ESCRIBE EN EL PUERTO D ;********************************************************************************************* Punto_1: BCF BTFSS GOTO MOVF MOVWF MOVWF PORTB,7 PORTB,0 $-1 PORTD,W PORTC dato_1 ; ; ; ; ; ;

;********************************************************************************************* ;LEE LOS BITS 1, 2 Y 3DEL PUERTO B Y EN BASE A ESO DECIDE QUE OPERACIN REALIZAR ;********************************************************************************************* Punto_2: BTFSC GOTO BTFSC GOTO BTFSC GOTO GOTO PORTB,1 Suma PORTB,2 Resta PORTB,3 Producto Punto_2 ; ; ; ; ; ; ;

;********************************************************************************************* ;REALIZA LA SUMA DE DOS NUMEROS, LEE EL SEGUNDO DATO Y LO SUMA CON EL DATO LEIDO Y GUARDADO ;ANTERIORMENTE. SACA EL VALOR DE SUMA POR EL PUERTO C Y ENCIENDE EL BIT 7 DEL PUERTO B SI Y ;SLO SI EXISTE UN ACARREO. SI EL VALOR DEL BIT 0 DEL PUERTO C ES 1 REALIZA LA DIVISIN ;ENTRE LOS DOS NUMEROS ;********************************************************************************************* Suma: MOVF MOVWF ADDWF MOVWF MOVWF BTFSC PORTD,W dato_2 dato_1,W result PORTC STATUS,C ; ; ; ; ; ;

BSF BTFSS GOTO GOTO

PORTB,7 PORTB,0 $-1 Division

; ; ; ;

;********************************************************************************************* ;REALIZA LA DIFERENCIA DE DOS NUMEROS, LEE EL SEGUNDO DATO Y LO RESTA CON EL DATO LEIDO Y ;GUARDADO ANTERIORMENTE. SACA EL VALOR DE RESTA POR EL PUERTO C Y ENCIENDE EL BIT 7 DEL ;PUERTO B SI Y SLO SI EXISTE UN ACARREO, ES DECIR QUE LA MAGNITUD SEA NEGATIVA. ;SI EL VALOR DEL BIT 0 DEL PUERTO C ES 1 REALIZA LA DIVISIN ENTRE LOS DOS NUMEROS ;********************************************************************************************* Resta: MOVF MOVWF SUBWF MOVWF BTFSS CALL MOVWF BTFSS GOTO GOTO PORTD,W dato_2 dato_1,W result STATUS,C Magnitud PORTC PORTB,0 $-1 Division ; ; ; ; ; ; ; ; ; ;

;********************************************************************************************* ;SI LA RESTA ES NEGATIVA, ES DECIR QUE EL ACARREO SEA CERO, SE OBTIENE LA MAGNITUD CORRECTA ;OBTENUENDO EL COMPLEMENTO A 2 DEL RESULTAD OBTENIDO EN EL PROCESO DE "RESTA" ;********************************************************************************************* Magnitud: BSF SUBLW MOVWF RETURN PORTB,7 b'00000000' result ; ; ; ;

;********************************************************************************************* ;REALIZA EL PRODUCTO DE DOS NUMEROS, LEE EL SEGUNDO DATO Y LO MULTIPLICA CON EL DATO LEIDO ;Y GUARDADO ANTERIORMENTE. SACA EL VALOR DEL PRODUCTO POR EL PUERTO C Y ENCIENDE EL BIT 7 DEL ;PUERTO B SI Y SLO SI EXISTE UN ACARREO, ES DECIR QUE LA MULTIPLICACIN EXCEDA LOS 8 BITS. ;EL PRODUCTO LO OBTIENE SUMANDO EL PRIMER DATO CONSIGO MISMO TANTAS VECES LO INDIQUE EL SEGUNDO ;DATO. SI EL VALOR DEL BIT 0 DEL PUERTO C ES 1 REALIZA LA DIVISIN ENTRE LOS DOS NUMEROS ;********************************************************************************************* Producto: MOVF MOVWF MOVLW MOVWF MOVLW MOVWF MOVWF MOVF MOVWF CicloP: MOVF SUBWF BTFSC GOTO MOVF ADDWF MOVWF MOVF ADDWF MOVLW BTFSC MOVWF GOTO MostrarRes: MOVF MOVWF MOVF BTFSC BSF BTFSS GOTO$-1 aux_1,W PORTC result,W result,7 PORTB,7 PORTB,0 ; ; ; ; ; ; ; cont,W dato_2,W STATUS,Z MostrarRes cont,W suma_multi,W cont dato_1,W aux_1,F b'10000000' STATUS,C result CicloP ; ; ; ; ; ; ; ; ; ; ; ; ; PORTD,W dato_2 b'00000000' result b'00000001' cont suma_multi dato_1,W aux_1 ; ; ; ; ; ; ; ; ;

GOTODivision

;********************************************************************************************* ;REALIZA LA DIVISIN DE DOS NUMEROS, LEE EL SEGUNDO DATO Y LO DIVIDE CON EL DATO LEIDO ;Y GUARDADO ANTERIORMENTE. SACA EL VALOR DEL COCIENTE POR EL PUERTO C Y ENCIENDE EL BIT 7 DEL ;PUERTO B SI Y SLO SI EXISTE UN ACARREO, ES DECIR QUE EXISTA RESIDUO EN LA DIVISIN. ;EL COCIENTE LO OBTIENE RESTANDO EL SEGUNDO DATO DEL PRIMERO HASTA QUE ESTE SE HAGA CERO; EL ;NMERO DE VECES QUE SE HAYA REATAD SER LO QUE SALGA COMO RESULTADO ;********************************************************************************************* Division: MOVLW SUBWF BTFSC SLEEP MOVLW MOVWF MOVLW MOVWF CicloD: MOVF ADDWF MOVWF MOVF SUBWF BTFSC BTFSC GOTO GOTO ResultDiv: MOVLW BCF BTFSS BSF BTFSS SUBWF MOVF MOVWF SLEEP END b'00000001' PORTB,7 STATUS,Z PORTB,7 STATUS,C cont,F cont,W PORTC ; ; ; ; ; ; ; ; cont,W suma_div,W cont dato_2,W dato_1,F STATUS,C STATUS,Z ResultDiv CicloD ; ; ; ; ; ; ; ; ; b'00000000' dato_2,W STATUS,Z b'00000000' cont b'00000001' suma_div ; ; ; ; ; ; ; ;

Conclusiones. La elaboracin de esta prctica nos ayud visualizar mejor el comportamiento que brinda el trabajar con los puertos de salida o entrada del microcontrolador. En las clases de teora no se percibe cmo se pueden presentar los resultados obtenidos, en este caso, utilizamos LEDs para indicar el resultado de una operacin aritmtica y, aunque sea poco, ayuda a los alumnos a comprender mejor el comportamiento de un puerto de salida. Se nos hizo interesante el poder utilizar las hojas de especificaciones del PIC16F877A para poder hacer el circuito elctrico, en clases de teora solo mencionamos los puertos, pero ahora pudimos observar dnde estn localizados fsicamente y los utilizamos con xito, es algo que consideramos un complemento para las clases de teora. Uno de los problemas con los que nos enfrentamos al desarrollar esta prctica fue, por la misma razn de que tuvimos que realizar la conexin de los pines de PIC a cada elemento electrnico, el alambrar todo el circuito. Nos result un poco estresante estar realizando cada conexin a los pines del dispositivo, as como a tierra como a la fuente de tensin. Tambin lleg un momento en el que queramos utilizar en la parte de la programacin alunas de las directivas que proporciona el software de MPLAB, como por ejemplo MOVFW, que en s no es reconocida por el PIC, pero MPLAB agrega un pedazo de cdigo que consiste realizar lo que esa directiva realizara, pero a nosotros como programadores no nos conviene aceptar ese tipo de instrucciones, ya que nos hace perder el control del programa, generando lneas de cdigo que a veces son innecesarias, es mejor ser un tanto desconfiado de estas directivas en lugar de terminar pagando las consecuencias nosotros. Referencias Fundamentos de Diseo lgico y de computadoras. 3ra. Edicin. Prentice Hall. www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r86177.PDF comunidad.dragonjar.org/f177/tutorial-completo-de-lenguaje-ensamblador8845/

Instituto Politcnico Nacional Unidad Profesional Interdisciplinaria en Ingeniera y Tecnologas Avanzadas

Prctica 2 Uso de puertos y operaciones


Arquitectura de Computadoras

Alumno: Basilio Gonzlez Dulce Guadalupe Carrin Tellz Kevin


1TM6 Prof.: David Arturo Gutirrez Begovich 27 / Marzo / 2014

Potrebbero piacerti anche