Universidad Politécnica de Chiapas Materia: Microcontroladores Tema: Practica 1 Sumador de 4 Bits Catedrático: Ing. José Luis López Alumna: Fátima Daniela González Mateo No. de Control 093187 Tuxtla Gutiérrez, Chiapas 01 de Junio del d el 2011 Contenido Objetivos generales ........................................................................................................................ 3 Introducción................................................................................................................................... 4 Practica 1 Sumador de cuatro bits .................................................................................................. 5 Objetivo de la práctica ................................................................................................................ 5 Desarrollo de la práctica ............................................................................................................. 5 Simulación.................................................................................................................................. 6 Materiales para simulación ..................................................................................................... 6 Programa ................................................................................................................................... 7 Descripción del Programa ....................................................................................................... 7 Practica 2 Sumador y Restador de cuatro bits............................ ........................................................ ............................ ........................ 9 Objetivo de la práctica ................................................................................................................ 9 Desarrollo de la práctica ............................................................................................................. 9 Simulación................................................................................................................................ 10 Materiales para simulación ................................................................................................... 10 Programa ................................................................................................................................. 11 Descripción del Programa ..................................................................................................... 12 Practica 3 Retardo de 100ms ........................................................................................................ 13 Objetivo de la práctica .............................................................................................................. 13 Desarrollo de la práctica ........................................................................................................... 13 Simulación................................................................................................................................ 14 Materiales para simulación ................................................................................................... 14 Programa ................................................................................................................................. 15 Descripción del Programa ..................................................................................................... 16 Practica 4 Rotación de Leds .......................................................................................................... 17 Objetivo de la práctica .............................................................................................................. 17 Desarrollo de la práctica ........................................................................................................... 17 Simulación................................................................................................................................ 18 Materiales para simulación ................................................................................................... 18 Programa ................................................................................................................................. 19 Descripción del Programa ..................................................................................................... 21 2 Objetivos generales Con las siguientes prácticas se pretende realizar distintas prácticas utilizando el PIC16F877A, esto implica que se aprenda a programar en lenguaje ensamblador utilizando las distintas instrucciones que dicho PIC nos proporciona. Así como también realizar la simulación de nuestro circuito para poder cargar el programa en él y de esta forma forma hacer visual lo que estamos realizando en nuestro programa. programa. 3 Introducción A través de programas realizados en lenguaje ensamblador y simulaciones se realizó cuatro distintas practicas con el objetivo de aprender a utilizar las distintas instrucciones básicas que se le pueden ordenar a un microcontrolador en este caso para todas las practicas se utilizó el PIC16F877A. Para la realización de estas prácticas primeramente fue de suma importancia aprender a realizar la configuración de los puertos I/O. Así como también, como podemos declarar nuestras variables y el tipo de PIC a utilizar. Otro factor que es indispensable para realizar las practicas es conocer lo que realiza y la sintaxis de cada una de las instrucciones. Las prácticasque se realizó son las siguientes: y Realizar la suma de dos números de 4 bits. y Realizar la suma o la resta de dos números de 4 bits, indicando el tipo de operación a través de un selector. y Realizar un retardo de un total de 100ms. y A través de un selector de 4 opciones, indicar el desplazamiento del encendido de un led con un retardo de 500ms. 4 Practica 1 Sumador de cuatro bits Objetivo de la práctica Esta práctica pretende realizar la suma de dos números de cuatro bits, introducidos por el usuario a través de dos dip-switch y teniendo como salida el encendido de leds con el resultado de la operación. Los datos tanto de entrada como los de salidas s alidas serán en el sistema binario, los cuales serán procesados por el programa previamente cargado al microcontrolador. Desarrollo de la práctica La suma se realiza por medio de un programa cargado previamente al PIC en la simulación. El programa cuenta de varias etapas las cuales son las siguientes: y Se indica el tipo de PIC a utilizar y Se indica el tipo de cristal a utilizar y Se desactiva un error que aparece en la compilación y Se realiza la declaración de variables a utilizar y en el número de registro donde queda almacenada. y Se realiza la configuración de los puertos en este caso en puerto B se configura como entrada y el puerto D como salida. y Finalmente se realiza el programa que realizara la operación. 5 Simulación Materiales para simulación y 1 PIC16F87A y 2 Dip-Switch de cuatro entradas y 6 Leds y 1 Resistencia de 1k DSW1 8 7 6 5 2 3 4 5 6 7 8 9 10 1 OSC1/CLKIN OSC2/CLKOUT ON 1 2 3 4 DIPSW_4 U1 13 14 O FF RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI RE0/AN5/RD RC1/T1OSI/CCP2 RE1/AN6/WR RC2/CCP1 RE2/AN7/CS RC3/SCK/SCL RC4/SDI/SDA MCLR/Vpp/THV RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 R1 33 34 35 1k 36 37 38 39 40 DSW2 8 7 6 5 15 16 17 18 23 24 25 26 O FF ON 1 2 3 4 DIPSW_4 D6 19 20 21 22 27 28 29 30 LED-BLUE D5 LED-BLUE D4 PIC16F877A LED-BLUE D3 LED-BLUE D2 LED-BLUE D1 LED-BLUE 6 Programa ;--------------------------------------------------includep16f877a.inc" CLRF PORTD list p=16f877a CLRF PORTB INICIO MOVF errorlevel 1,-302 PORTB,0 __Config _XT_OSC &_WDT_OFF MOVWF VAR1 ;----------------------------------------------------------- ANDLW 0x0F VAR1 EQU 0x20 MOVWF VAR2 VAR2 EQU 0x21 MOVF VAR1,0 VAR3 EQU 0x22 ANDLW 0xF0 RESUL EQU 0x23 MOVWF VAR3 ;----------------------------------------------------------- SWAPF VAR3,0 BSF STATUS,5 ADDWF VAR2,0 MOVLW MOVWF MOVLW 0x06 ADCON1 0xFF MOVWF RESUL MOVWF PORTD MOVWF TRISB CLRF TRISD BCF STATUS,5 GOTO INICIO ;----------------------------------------------------------- END Descripción del Programa Para que el programa realice las operación en este caso la suma, primeramente los datos introducidos en el puerto B se mueven al registro w, los datos almacenados en registro w se mueven a una primera variable en este caso VAR1, de dicha variable se realiza un and con los nibles bajos del puerto B y se almacena en el registro w, el cual posteriormente se envía a una tercera variable en este caso VAR2. Se carga nuevamente VAR1 al registro w y se realiza un and pero ahora con los nibles altos y se almacena en VAR3. Los datos almacenados en la VAR3 quedan almacenados entonces en el nible alto del puerto B , lo cual no nos sirve si es que queremos sumar dos números de 4 bits, por 7 lo tanto, con la instrucción SWAPF se realiza un cambio de los datos de la VAR3 de un nibles nibles alto a un nible bajo y los datos se almacenan en w. Finalmente se realiza la suma de VAR2 con w y el resultado de la operación se mueven al puerto B para que así podamos observarlo a través de los leds. 8 Practica 2 Sumador Sumador y Restador de cuatro bits bits Objetivo de la práctica Esta práctica pretende realizar la suma suma o la resta de dos números números de cuatro bits, introducidos por el usuario a través de dos dip-switch y teniendo como salida el encendido de leds con el resultado de la operación. Los datos tanto de entrada como los de salidas serán en el sistema binario, los cuales serán procesados por el programa previamente cargado al microcontrolador. Para seleccionar el tipo de operación que realizara el PI C, se le debe indicar a través de un dip-switch, si la entrada es un 1 se realizara la suma; si la entrada es un 0 se realizara la resta. Desarrollo de la práctica La suma o la resta se realizan por medio de un programa cargado previamente al PI C en la simulación. El programa cuenta de varias etapas las cuales son las siguientes: y Se indica el tipo de PIC a utilizar Se indica el tipo de cristal a utilizar y Se desactiva un error que aparece en la compilación y Se realiza la declaración de variables a utilizar y en el número de registro donde queda y almacenada. y Se realiza la configuración de los puertos en este caso en puertoA y B se configura como entrada y el puerto D como salida. y Finalmente se realiza el programa que realizara la operación. 9 Simulación Materiales para simulación y 1 PIC16F87A y 2 Dip-Switch de cuatro entradas y 6 Leds y 2 Resistencias (1k y 220) y 1 Dip-Switch de dos entradas DSW1 8 7 6 5 13 14 R2 220 4 3 DOSW3 O © © 2 DIPSW_2 OS 1/ LKI £ £ £ £ RB 0/I ¥ ¤ ¤ OS 2/ LKO 1 2 3 4 5 6 7 1 RB1 R B2 0 RB3/PG RA1/A 1 RB4 RA2/A 2/V RE / V RE RB5 RA3/A 3/V RE RB6/PGC RA4/ 0 KI/ 1O RB7/PGD RA5/A 4/SS/ 2O RC0 /T1OSO/T1 CKI RE0/A 5/RD RC1/ 1OSI/ CCP2 RE1/A 6/W R RC2 / CCP1 RE2/A 7/ S RC3/S CK/SCL RC4/S DI/S DA RC5/S DO CL R/Vpp/THV RC6/ TX/ CK RC7/ RX/ DT RA0/A ¦ £ ¡ ¡ ¡ § £ £ ¤ ¥ 8 9 10 £ ¤ ¥ 33 34 35 36 37 38 39 40 ¤ ¤ ¦ © © O 1 2 3 4 DIPSW_4 1 ¨ O £ RD0 /PSP0 RD1/PSP1 RD2 /PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 15 16 17 18 23 24 25 26 R1 1k DSW2 8 7 6 5 O © © O 1 2 3 4 DIPSW_4 D6 19 20 21 LE D-BL E 22 D5 27 28 29 30 LE D D-BL E 4 PIC16 877A ¡ LE D-BL E D3 LE D- BL E D2 LE D-BL E D1 LE D-BL E 10 Programa include"p16f877a.inc" GOTO SUMA list p=16f877a GOTO RESTA errorlevel 1,-302 SUMA __Config _XT_OSC &_WDT_OFF ;--------------------------------- MOVF PORTB,0 MOVWF VAR1 ANDLW 0x0F VAR1 EQU 0x20 MOVWF VAR2 VAR2 EQU 0x21 MOVF VAR1,0 VAR3 EQU 0x22 ANDLW 0xF0 MOVWF VAR3 RESUL EQU 0x23 SWAPF ;--------------------------------BSF STATUS,5 ADDWF VAR2,0 MOVLW 0x06 MOVWF PORTD MOVWF ADCON1 GOTO SELECC MOVLW 0xFF MOVF PORTB,0 MOVWF TRISB MOVWF VAR1 MOVLW 0xFF ANDLW 0x0F MOVWF TRISA MOVWF VAR2 CLRF TRISD MOVF VAR1,0 B CF STATUS,5 ANDLW 0xF0 MOVWF VAR3 RESTA ;---------------------------------------------CLRF PORTD SWAPF VAR3,0 CLRF PORTB SUBWF VAR2,0 CLRF PORTA MOVWF PORTD GOTO SELECC SELECC VAR3,0 BTFSC PORTA,0 END 11 Descripción del Programa Para que el programa realice las operación en este caso la suma o la resta, primeramente los datos introducidos en el puerto B se mueven al registro w, los datos almacenados en registro w se mueven a una primera variable en este caso VAR1, de dicha variable se realiza un and con los nibles bajos del puerto B y se almacena en el registro w, el cual posteriormente se envía a una tercera variable en este caso VAR2. Se carga nuevamente VAR1 al registro w y se realiza un and pero ahora con los nibles altos y se almacena en VAR3. Los datos almacenados en la VAR3 quedan almacenados entonces en el nible alto del puerto B , lo cual no nos sirve si es que queremos sumar dos números de 4 bits, por lo tanto, con la instrucción SWAPF se realiza un cambio de los datos de la VAR3 de un nibles nibles alto a un nible bajo y los datos se almacenan en w. Finalmente se realiza la operación correspondiente, si es suma se utiliza la instrucción ADDWF la cual suma la VAR2 con w; si la operación a realizar es resta se utiliza la instrucción SUBWF la cual resta VAR2 con w. El resultado de la operación se mueven al puerto B para que así podamos observarlo a través de los leds. 12 Practica 3 Retardo de 100ms Objetivo de la práctica Esta práctica pretende realizar el encendido de un led con un retardo de 100ms, esto quiere decir que el led permanecerá encendido 100ms y posteriormente se apagara otros 100ms. para ello se realiza un programa principal en el cual se mandara a llamar el retardo. Desarrollo de la práctica El retardo a se realiza por medio de un programa cargado previamente al PIC en la simulación. El programa cuenta de varias etapas las cuales son las siguientes: y Se indica el tipo de PIC a utilizar y Se indica el tipo de cristal a utilizar y Se desactiva un error que aparece en la compilación y Se realiza la declaración de variables a utilizar y en el número de registro donde queda almacenada. y Se realiza la configuración del puerto D como salida. y Finalmente se realiza el programa en el cual será llamado el retardo de 100ms. 13 Simulación Materiales para simulación y 1 PIC16F87A y 1 Led y 1 Osciloscopio 1 13 14 1/ L IN T 2/ L RB1 2 3 4 5 6 7 RB0/INT RB2 RA0/AN0 RB3/PG PGM M RA1/AN1 RB4 RA2/AN2/ REF REF--/ REF RB5 RA3/AN3/ REF+ RB6/PG PGC C I/ 1 T / 2 T RA5/AN4/ RB7/PG PGD D RA4/T0 1 RC0/T1OSO/T1CKI RE0/AN5/RD RE1/AN6/ R RE2/AN7/ RC1/T1 I/CCP2 RC2/CCP1 RC3/ CK/ CL RC4/SDI/SDA MCLR/ pp/T V A B C D 8 9 10 33 34 35 36 37 38 39 40 RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 D1 LED ED--BL E PIC16F877A 14 Programa include"p16f877a.inc" CLRW list p=16f877a MOVWF TRISD errorlevel 1,-302 CALL RETARDO __Config _XT_OSC &_WDT_OFF GOTO PROGRAMA ;----------------------------------------------------------- ;----------------------------------------------------------- VAR1 EQU 0x20 RETARDO VAR2 EQU 0x21 ;------------------------------------------------------- MOVLW d'130' MOVWF VAR2 MOVLW d'255' BSF STATUS,5 DEC2 MOVWF VAR1 MOVLW 0x06 DEC1 DECFSZ VAR1,1 MOVWF ADCON1 GOTO DEC1 MOVLW 0xFF DECFSZ VAR2,1 MOVWF TRISB GOTO DEC2 CLRF TRISD MOVLW d'52' BCF STATUS,5 MOVWF VAR1 DECFSZ VAR1,1 GOTO DEC3 ;----------------------------------------------------------CLRF DEC3 PORTD PROGRAMA MOVLW 0x01 NOP MOVWF TRISD RETURN CALL RETARDO END 15 Descripción del Programa En el programa principal se carga a w el valor de 1, posteriormente ese valor se manda al puerto D donde se podrá observar por medio del encendido y apagado del led el retardo de 100ms. Enseguida, se manda a llamar a la subrutina en este caso etiquetada como RETARDO (todo esto es para que el led se logre encender los 100ms). Finalmente se borra los datos cargados a w y se vuelven a enviar a w, posteriormente se manda a llamar a la subrutina RETARDO (esto realiza el apagado del led). Por medio de la instrucción GOTO se regresa re gresa a PROGRAMA. Para realizar la subrutina de retardo se realizó operaciones de tal forma que al correr el programa el retardo dure exactamente 100ms. para ello fue indispensable utilizar tres variables en este caso DEC1, DEC2 y DEC3, las cuales son utilizadas como contadores. También la instrucción DECFSZ para ir decrementando nuestras variables. 16 Practica 4 Rotación de Leds Objetivo de la práctica Esta práctica pretende realizar el encendido ocho leds cada uno con un retardo de 500ms, el encendido de los leds se llevara acabo de tal forma que al observarlos cada led va encendiendo rotando uno a uno. Para ellos tenemos cuatro forma en cómo se hará la rotación de los leds, dicha forma será introducida por el usuario a través de un se lector. Las cuatro formas son las siguientes: y No enciende ningún led. y Rotación de izquierda a derecha. y Rotación de derecha a izquierda. y Rotación de izquierda a derecha y de derecha a izquierda. Desarrollo de la práctica La rotación del encendidos de los leds se realiza por medio de un programa cargado previamente al PIC en la simulación. El programa cuenta de varias etapas las cuales son las siguientes: y Se indica el tipo de PIC a utilizar y Se indica el tipo de cristal a utilizar y Se desactiva un error que aparece en la compilación y Se realiza la declaración de variables a utilizar y en el número de registro donde queda almacenada. y Se realiza la configuración del puerto B como entrada y el puerto D como salida. y Finalmente se realiza el programa en el cual se indica la forma en que se rotara el encendido de los leds. 17 Simulación Materiales para simulación y 1 PIC16F87A y 8 Leds y 1 Dip-Switch de dos entradas y 2 Resistencias (1k y 330) U1 13 14 % & % & D C1/CL IN C2/CL UT R 0/INT R 1 R 2 R 3/ R 4 R 5 R 6/ C $ ) % $ ) ) 2 3 4 5 6 7 R R R R 0/ 1/ 2/ 3/ N0 N1 N2/ R N3/ R ! 0 ) ( 1 ) " ! -/C R # ! " # ) 0 " # 3 ) ( ) ( 0 % $ R 4/T0C I/C1 UT R 7/ D R 5/ N4/ /C2 UT /T1C I RC0/T1 I/CC 2 R 0/ N5/RD RC1/T1 R 1/ N6/ R RC2/CC 1 R 2/ N7/C RC3/ C / CL RC4/ DI/ D CLR/ pp/TH RC5/ D RC6/TX/C RC7/R /DT & & & % $ " " " % & ( ' ( & & & $ & & 1 & 1 ! % ! $ 2 RD0/ RD1/ RD2/ RD3/ RD4/ RD5/ RD6/ RD7/ & ( ( & ( ( & ( ( & ( ( & ( ( & ( ( ( ( 33 34 35 36 37 38 39 40 4 3 DI 7 ( & ( & ( 0 1 2 3 4 5 6 7 15 16 17 18 23 24 25 26 ON 8 9 R1 1 2 1 4 _2 D1 19 20 21 22 27 28 29 30 L D-R D @ @ D2 L D-R D @ @ D3 IC16 877 # 6 % % 8 9 10 1 5 OFF L D-R D @ @ D4 L D-R D @ @ D5 L D-R D @ @ D6 L D-R D @ @ D7 L D-R D8 @ @ D L D-R D @ 18 R2 330 @ Programa include"p16f877a.inc" BTFSC PORTB,0 list p=16f877a p=16f877a GOTO SELEC2 errorlevel 1,-302 GOTO SELEC1 BTFSS PORTB,1 ;--------------------------;--------------------------------------------------------------------------------------- GOTO SELEC VAR1 EQU 0x20 GOTO IZQUIERDA VAR2 EQU 0x21 BTFSC PORTB,1 VAR3 EQU 0x22 GOTO IDDI VAR4 EQU 0x24 GOTO DERECHA VAR5 EQU0x25 MOVLW d'8' CONT1 EQU0x26 MOVWF CONT1 CONT2 EQU0x27 BCF STATUS,0 MOVLW d'1' MOVWF PORTD CALL RETARDO RLF PORTD,0 SELEC __Config _XT_OSC &_WDT_OFF SELEC1 SELEC2 DERECHA ;--------------------------;--------------------------------------------------------------------------------------DER BSF STATUS,5 MOVLW 0x06 MOVWF ADCON1 DECFSZ CONT1,1 MOVLW 0xFF GOTO DER MOVWF TRISB GOTO CLRF TRISD BCF STATUS,5 IZQUIERDA ;--------------------------;---------------------------------------------------------------------------CLRF PORTD CLRF PORTB IZQ MOVLW d'8' MOVWF CONT1 C MOVWF ONT2 19 S ELEC MOVLW d'8' MOVWF CONT1 BCF STATUS,0 MOVLW d'128' MOVWF PORTD CALL RETARDO RRF PORTD,0 DECFSZ CONT1,1 IDDI IZQ1 DER1 GOTO IZQ GOTO SELEC MOVLW MOVWF VAR3 MOVLW d'5' d'8' MOVWF VAR2 MOVWF CONT1 MOVLW d'248' MOVWF CONT2 DEC2 MOVWF VAR1 BCF STATUS,0 DEC1 NOP MOVLW d'128' DECFSZ VAR1,1 MOVWF PORTD GOTO DEC1 CALL RETARDO DECFSZ VAR2,1 RRF PORTD,0 GOTO DEC2 DECFSZ CONT1,1 DECFSZ VAR3,1 GOTO IZQ1 GOTO DEC3 BCF STATUS,0 MOVLW d'248' MOVLW d'1' MOVWF VAR4 MOVWF PORTD CALL RETARDO DECFSZ VAR4 RLF PORTD,0 GOTO DEC4 DECFSZ CONT2,1 DECFSZ VAR5 GOTO DER1 GOTO INIC GOTO SELEC NOP DEC3 INIC DEC4 NOP NOP RETARDO MOVLW d'2' NOP MOVWF VAR5 NOP MOVLW d'247' RETURN MOVWF VAR4 END MOVLW d'100' 20 Descripción del Programa En el programa primero entra el selector el cual dependiendo la entrada del usuario va mandarlo a cuatro subrutinas diferentes los cuales son: 00 No enciende ningún led 01 Rotación del encendido de los leds de derecha a izquierda 10 Rotación del encendido de los leds de izquierda a derecha d erecha 11 Rotación de los leds de derecha a izquierda y de derecha a izquierda En el programa se utilizan las instrucciones DECFSZ para decrementar las variables, RRF y RLF para rotar los bits hacia la derecha y hacia la izquierda respectivamente, BTFSS y BTFSC para hacer las condicionales del selector. Así como también se aplica un retardo de 500ms, el cual es el tiempo de encendido del led antes de que rote y encienda el siguiente led 21