Post on 06-Feb-2016
UNIVERSIDAD NACIONAL DEL CALLAO
Facultad de Ingeniería Eléctrica y ElectrónicaEscuela Profesional de Ingeniería Electrónica
LABORATORIO N°3MANEJO DE INSTRUCCIONES
CURSO: ARQUITECTURA DE COMPUTADORAS
ALUMNO:
GARCIA VICENTE, ANDRE 1023220432
1
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
HARO SEGURA, PEDRO 1023220192TORRES ANDRADE, ANTHONY WILSON 1023220646
CICLO: 2015 – A
PROFESOR :
ING. CONDOR DE LA CRUZ, FLAVIO
LIMA – CALLAO2015
MANEJO DE INSTRUCCIONES OBJETIVO
Conocer las instrucciones elementales en lenguaje ensamblador Aprender a desarrollar programas con el microcontrolador Atmega8, utilizando
instrucciones básicas. Aprender a manejar el entorno de desarrollo VMLAB. Aprender a grabar la memoria flash del microcontrolador
INTRODUCCIÓN
El microcontrolador es un circuito integrado de muy alta escala de integración que contiene las partes funcionales de un computador:
CPU (Central Processor Unit o Unidad de Procesamiento Central) Memorias volátiles (RAM), para datos Memorias no volátiles( ROM, PROM, EPROM) para escribir el programa Líneas de entrada y salida para comunicarse con el mundo exterior. Algunos periféricos (comunicación serial, temporizador, convertidor A/D, etc)
Es decir el microcontrolador es un computador integrado en un solo chip. Integrar todos estos elementos en un solo circuito integrado a significado desarrollar aplicaciones importantes en la industria al economizar materiales, tiempo y espacio.
¿QUE NO HACE EL MICROCONTROLADOR?
Las aplicaciones de un microcontrolador son tan inmensas que el límite es la propia imaginación del usuario. Estos microcontroladores están en el auto, en el televisor, en el teléfono, en una impresora, en un horno de microondas, en un transbordador espacial, en un juguete, etc. Algunas fuentes estiman que en una casa típica de E.U se tiene alrededor de 250 microcontroladores.
Arquitectura de ComputadorasCiclo 2015-A
2
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
FUNDAMENTOS TEÓRICOS
Los puertos son un conjunto de líneas (pines) programables como entrada ó salida que dispone el microcontrolador para comunicarse con el mundo exterior.
El microcontrolador Atmega8(L), tiene 3 puertos de E/S (Puertos B, C D). Todos los pines de cada puerto son programables como entrada o salida de datos configurando el registro asociado respectivo.
Cuando se programa el funcionamiento de un puerto como entrada tenemos que habilitar o deshabilitar las resistencias pull-up internas. Cada pin del puerto tiene independiente su resistencia pull-up como una resistencia invariante hacia la fuente de voltaje, además tiene 2 diodos de protección uno conectado a Vcc y el otro conectado a GND. (Ver figura 1)
Figura N°1: Diagrama equivalente de un pin de E/S
En resumen, para cada puerto del microcontrolador (puertos B, C y D) existen tres registros de E/S que permiten configurar cada pin del puerto como entrada o salida, enviar datos a los pines configurados como salidas, y recibir datos de los pines configurados como entradas.Estos registros son:
El Registro de Direcciones de Datos DDRx. El Registro de Datos – PORTx. El registro – PINx.
En el párrafo anterior, “x” puede ser B, C ó D. Es decir, si nos referimos al puerto B, los registros son DDRB, PORTB y PINB.
Los registros PINx son de sólo lectura, mientras que los registros PORTx y DDRx son de lectura/escritura. Adicionalmente, el bit “Pull-up Disable” – PUD, en el registro SFIOR
Arquitectura de ComputadorasCiclo 2015-A
MANEJO DE PUERTOS ENTRADA Y SALIDA
3
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
inhabilita la función Pull-up para todos los pines de todos los puertos cuando es puesto a nivel alto. (Ver Figura 2)
Cada pin del puerto de E/S, está asociado a 3 registros DDxn, PORTxn, y PINxn, cuyas direcciones en el espacio de memoria están indicados por los Registros DDRx E/S, PORTxE/S y PINxE/S.(ver Register Descripción for E/S ports, página 63 del manual Atmega8(L)).
El bit DDxn del Registro DDRx, establece la dirección de este pin. Si DDxn es escrito con “1” lógico, Pxn es configurado como un pin de salida. Si en DDxn es escrito un “0”, Pxn es configurado como un pin de entrada.
Si el pin PORTxn está configurado como un pin de entrada y es escrito un “1” lógico, entonces la resistencia pull-up está activada. En cambio sí en PORTxn está configurado como un pin de salida ó es escrito con un “0” lógico, la resistencia pull-up está desactivada.
Si el pin PORTxn está configurado como un pin de salida y es escrito con un “1” lógico, el pin toma un valor alto, en cambio sí es escrito con “0” lógico el pin toma un valor bajo(cero).
Figura N°2: Puertos de E/S
Arquitectura de ComputadorasCiclo 2015-A
4
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
Adicionalmente, se puede observar en el anterior diagrama que si el bit PUD(PULLUP DISABLE) del registro SFIOR, tiene un valor alto “1”, se deshabilitarán las resistencias pullup de todos los puertos. El funcionamiento de la configuración de los pines de un puerto se resume en la siguiente tabla:
DDxn PORTxn PUD (en SFIOR
E/S Pull – up Comentario
0 0 X Entrada No Tri – slate0 1 0 Entrada Yes0 1 1 Entrada No Tri – slate1 0 X Salida No Salida
baja1 1 X Salida No Salida
AltaTabla N°1: Configuración de los pines del puerto
PROCEDIMIENTO
Simular los siguientes ejercicios:
Programar que visualizar por el puerto D los datos ingresados por el puerto B.
PROGRAMA:
//-----------------------------------------------------------------------------------------------------------------.include "m8def.inc" ; Tipo de procesador.cseg ; Segmentó de código para menor flash.org 0x000; ; Direcciones del vector Resetrjmp inicio; ; Salto para empezar desde inicio //--------------------------------------------------- INICIO ----------------------------------------------------inicio://-----------------------------------------------------------------------------------------------------------------ldi R16,0b0000000 ; Carga la constante 0x00 en el registro r16ldi R17,0b1111111; ; Cargar la constante 0xFF en el registro R17out DDRB,R16 ; Configurar todos los bits del Puerto B como entrada out DDRD,R17 ; Configurar todos los bits del Puerto D como salidas//--------------------------------------------------- LAZO ----------------------------------------------------lazo://-----------------------------------------------------------------------------------------------------------------in R18,PINB ; Almacena datos del Puerto B en el registro R18out PORTD,R18 ; Visualiza por el puerto D el dato del registro R18rjmp lazo ; Bucle, se repite desde lazo//------------------------------------------------------ FIN -----------------------------------------------------
PROTEUS:Arquitectura de ComputadorasCiclo 2015-A
EJERCICIO N°1
5
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
Figura 1: Simulación del Ejercicio N°1ATMEGA 8:
Figura N°2: Programa del Ejercicio N°1
Programa que suma los datos ingresados por los 4 bits menos significativos del puerto B el puerto C. El resultado se visualizara por el puerto D.
Obs: Para realizar la resta utilizar la instrucción SUB
PROGRAMA:
//-----------------------------------------------------------------------------------------------------------------.include "m8def.inc" ; Tipo de procesador.cseg ; Segmento de código para memoria flash.org 0x000 ; Dirección del vector resetrjmp inicio ; Salto para empezar desde inicio//--------------------------------------------------- INICIO ----------------------------------------------------
Arquitectura de ComputadorasCiclo 2015-A
EJERCICIO N°2
6
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
inicio://-----------------------------------------------------------------------------------------------------------------ldi R16,0b00000000 ; Cargar la costante 0x00 en el registro R16ldi R17,0b11111111 ; Cargar la costante 0xFF en el registro R17out DDRB,R16 ; Configurar todos los bits del Puerto B como entradaout DDRC,R16 ; Configurar todos los bits del Puerto C como entradaout DDRD,R17 ; Configurar todos los bits del Puerto D como salida//--------------------------------------------------- LAZO ----------------------------------------------------lazo://-----------------------------------------------------------------------------------------------------------------in R18,PINB ; Almacena datos del Puerto B en el registro R18in R19,PINC ; Almacena datos del Puerto C en el registro R19ADD R18,R19 ; Suma R18 y R19, el resultado se almacena en R18out PORTD,R18 ; Visualiza por el Puerto D el dato de R18rjmp lazo ; Bucle, se repite de lazo//------------------------------------------------------ FIN -----------------------------------------------------PROTEUS:
Figura 3: Simulación del Ejercicio N°2
ATMEGA 8:
Arquitectura de ComputadorasCiclo 2015-A
7
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
Figura N°4: Programa del Ejercicio N°2
Programa que realiza la operación lógica AND entre los datos ingresados por los 4 bits menos significativos del Puerto B y el puerto C. El resultado se visualizara en el Puerto D.PROGRAMA:
//-----------------------------------------------------------------------------------------------------------------.include "m8def.inc" ; Tipo de procesador.cseg ; Segmento de código para memoria flash.org 0x000 ; Dirección del vector resetrjmp inicio ; Salto para empezar desde inicio//--------------------------------------------------- INICIO ----------------------------------------------------inicio://-----------------------------------------------------------------------------------------------------------------ldi R16,0b00000000 ; Cargar la costante 0x00 en el registro R16ldi R17,0b11111111 ; Cargar la costante 0xFF en el registro R17out DDRB,R16 ; Configurar todos los bits del Puerto B como entradaout DDRC,R16 ; Configurar todos los bits del Puerto C como entradaout DDRD,R17 ; Configurar todos los bits del Puerto D como salida//--------------------------------------------------- LAZO ----------------------------------------------------lazo://-----------------------------------------------------------------------------------------------------------------in R18,PINB ; Almacena datos del Puerto B en el registro R18in R19,PINC ; Almacena datos del Puerto C en el registro R19AND R18,R19 ; Suma R18 y R19, el resultado se almacena en R18out PORTD,R18 ; Visualiza por el Puerto D el dato de R18rjmp lazo ; Bucle, se repite de lazo//------------------------------------------------------ FIN -----------------------------------------------------
Arquitectura de ComputadorasCiclo 2015-A
EJERCICIO N°3
8
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
PROTEUS:
Figura 5: Simulación del Ejercicio N°3ATMEGA 8:
Figura N°6: Programa del Ejercicio N°2
Para las demás operaciones lógicas utilizar las instrucciones
OR: Operación lógica OR
PROGRAMA:
Arquitectura de ComputadorasCiclo 2015-A
EJERCICIO N°4
9
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
//-----------------------------------------------------------------------------------------------------------------.include "m8def.inc" ; Tipo de procesador.cseg ; Segmento de código para memoria flash.org 0x000 ; Dirección del vector resetrjmp inicio ; Salto para empezar desde inicio//--------------------------------------------------- INICIO ----------------------------------------------------inicio://-----------------------------------------------------------------------------------------------------------------ldi R16,0b00000000 ; Cargar la costante 0x00 en el registro R16ldi R17,0b11111111 ; Cargar la costante 0xFF en el registro R17out DDRB,R16 ; Configurar todos los bits del Puerto B como entradaout DDRC,R16 ; Configurar todos los bits del Puerto C como entradaout DDRD,R17 ; Configurar todos los bits del Puerto D como salida//--------------------------------------------------- LAZO ----------------------------------------------------lazo://-----------------------------------------------------------------------------------------------------------------in R18,PINB ; Almacena datos del Puerto B en el registro R18in R19,PINC ; Almacena datos del Puerto C en el registro R19OR R18,R19 ; Suma R18 y R19, el resultado se almacena en R18out PORTD,R18 ; Visualiza por el Puerto D el dato de R18rjmp lazo ; Bucle, se repite de lazo//------------------------------------------------------ FIN -----------------------------------------------------PROTEUS:
Figura 7: Simulación del Ejercicio N°4 OR
ATMEGA 8:
Arquitectura de ComputadorasCiclo 2015-A
10
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
Figura N°8: Programa del Ejercicio N°4 OR
EOR: Operación lógica OR Exclusivo
PROGRAMA:
//-----------------------------------------------------------------------------------------------------------------.include "m8def.inc" ; Tipo de procesador.cseg ; Segmento de código para memoria flash.org 0x000 ; Dirección del vector resetrjmp inicio ; Salto para empezar desde inicio//--------------------------------------------------- INICIO ----------------------------------------------------inicio://-----------------------------------------------------------------------------------------------------------------ldi R16,0b00000000 ; Cargar la costante 0x00 en el registro R16ldi R17,0b11111111 ; Cargar la costante 0xFF en el registro R17out DDRB,R16 ; Configurar todos los bits del Puerto B como entradaout DDRC,R16 ; Configurar todos los bits del Puerto C como entradaout DDRD,R17 ; Configurar todos los bits del Puerto D como salida//--------------------------------------------------- LAZO ----------------------------------------------------lazo://-----------------------------------------------------------------------------------------------------------------in R18,PINB ; Almacena datos del Puerto B en el registro R18in R19,PINC ; Almacena datos del Puerto C en el registro R19EOR R18,R19 ; Suma R18 y R19, el resultado se almacena en R18out PORTD,R18 ; Visualiza por el Puerto D el dato de R18rjmp lazo ; Bucle, se repite de lazo//------------------------------------------------------ FIN -----------------------------------------------------
Arquitectura de ComputadorasCiclo 2015-A
11
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
PROTEUS:
Figura 9: Simulación del Ejercicio N°4 EORATMEGA 8:
Figura N°10: Programa del Ejercicio N°4 OR
Programa que encienda un Led conectado al pin PBD solo si se presiona un pulsador conectado al pin PB0
Arquitectura de ComputadorasCiclo 2015-A
EJERCICIO N°5
12
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
PROGRAMA:
//-----------------------------------------------------------------------------------------------------------------.include "m8def.inc" ; Tipo de procesador.cseg ; Segmento de código para memoria flash.org 0x000 ; Dirección del vector resetrjmp inicio ; Salto para empezar desde inicio//--------------------------------------------------- INICIO ----------------------------------------------------inicio://-----------------------------------------------------------------------------------------------------------------SBI DDRB, PB1 ; Configura PB1 como salidaCBI DDRB, PB0 ; Configuracion PB0 como entrada//--------------------------------------------------- BUCLE ----------------------------------------------------bucle//-----------------------------------------------------------------------------------------------------------------SBIC PINB, PB0 ; Si PB0=0 salta a la siguiente líneaCBI PORT, PB1 ; Pone a 0 en pin PB1SBIS PINB, PB0 ; Si PB0=1 salta a la siguiente líneaSBI PORTB, PB1 ; Pone a 1 en pin PB1//-----------------------------------------------------------------------------------------------------------------rjmp bucle ; Bucle, se repite de lazo//------------------------------------------------------ FIN -----------------------------------------------------PROTEUS:
Figura 11: Simulación del Ejercicio N°5
Arquitectura de ComputadorasCiclo 2015-A
13
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
ATMEGA 8:
Figura N°10: Programa del Ejercicio N°4 OR
EJERCICIORealizar un programa para crear la siguiente lógica.
Entrada SalidaPB0 PB1 PD0 PD1
0 0 0 00 1 1 01 0 1 01 1 1 1
PROGRAMA:
.include "m8def.inc" ; Tipo de procesador
.cseg ; Segmento de código para memoria flash
.org 0x000 ; Dirección del vector resetrjmp inicio ; Salto para empezar desde inicio
inicio:CBI DDRB, PB0 ; Configura PB0 como entradaCBI DDRB, PB1 ; Configura PB1 como entradaSBI DDRD, PD0 ; Configura PD0 como salidaSBI DDRD, PD1 ; Configura PD1 como salida
bucle:SBIS PINB, PB0 ; Si PB0=1 salta una instruccionRJMP CASO1y2RJMP CASO3y4
CASO1y2:
Arquitectura de ComputadorasCiclo 2015-A
14
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
SBIS PINB, PB1 ; Si PB1=1 salta una instruccuionRJMP CASO1RJMP CASO2
CASO1:CBI PORTD,PD0CBI PORTD,PD1RJMP bucle
CASO2:SBI PORTD,PD0CBI PORTD,PD1RJMP bucle
CASO3y4:SBIS PINB, PB1 ; Si PB1=1 salta una instruccuionRJMP CASO3RJMP CASO4
CASO3:SBI PORTD,PD0CBI PORTD,PD1RJMP bucle
CASO4:SBI PORTD,PD0SBI PORTD,PD1RJMP bucle
PROTEUS:
Figura 13: Simulación del Ejercicio N°6
ATMEGA 8:
Arquitectura de ComputadorasCiclo 2015-A
15
UNIVERSIDAD NACIONAL DEL CALLAOFACULTADA DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
Figura N°14: Programa del Ejercicio
Arquitectura de ComputadorasCiclo 2015-A