1. UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERIA ELECTRÍCA Y ELECTRONICA
FACULTAD DE INGENIERÍA
ELÉCTRICA Y ELECTRÓNICA
CURSO:
Microcontroladores
TEMA:
Primer Laboratorio
PROFESOR:
Ing. AstocondorVillar, Jacob
ALUMNO:
Hidalgo BasalduaAndreus Jean Pierre
CODIGO:
1223210163
UNIVERSIDAD NACIONAL DEL CALLAO
2. UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERIA ELECTRÍCA Y ELECTRONICA
LABORATORIO 1. ENCENDIDO INTERMITENTE DE UN LED
ENUNCIADO:
Se desea realizar un programa empleando el microcontrolador ATmega8, en el cual se conecta un
diodo LED al pin B0 en modo fuente. El LED debe parpadear 10 veces con una cadencia de 300ms,
luego de un retardo de un segundo, repetirá 5 veces con 500ms prendido y 200ms apagado. Estas
dos secuencias se repiten de manera infinita.
OBJETIVOS
Configurar un pin de los puertos como salida digital.
Manejar las instrucciones: y formas de definir las variables y redefinir pines.
Configurar los fusibles correspondientes del microcontrolador.
FUNDAMENTOS TEÓRICOS Y ESQUEMA
Según los requerimientos del enunciado un LED está conectado en el pin B0. Como sabemos el LED
trabaja correctamente con un voltaje de (1.5 -2.5) V y para un brillo adecuado la corriente debe ser
alrededor de 15mA. Conectando en modo fuente, quiere decir que el micro será quien de los 5V para
encender el LED, por lo tanto, debemos poner una resistencia en serie que limite la corriente en el
pin y el voltaje en el LED, aplicando la ley de Ohm tenemos:
De los cálculos resultan 200 Ω, pero en la práctica se puede poner valores entre (0.2 1)
kΩ.
Materiales
Resistencia 330 1/4W ( 1)
Diodo LED de alto brillo 3mm ( 1)
ATmega8 ( 1)
Protoboard ( 1)
Fuente estabilizada de voltaje 5V/1A ( 1 )
Cables No. 22AWG
Grabador de microcontrolador AVR tipo USB2.0
3. UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERIA ELECTRÍCA Y ELECTRONICA
NOMENCLATURA DEL CONJUNTO DE INSTRUCCIONES
Registros y operandos
Rd Registro destino (y fuente) del bloque de registros de trabajo
Rr Registro fuente del bloque de registros de trabajo
R Resultado después de que una instrucción es ejecutada
K Dato inmediato (constante)
k Dirección de memoria
b Bit de un registro I/O (7-0)
s Bit en el registro de estado (SREG)
X,Y,Z Registros de direccionamiento indirecto o registros de palabra (X=R27:R26
Y=R29:R28 Z=R31:R30)
P Registros del bloque I/O
q Desplazamiento (6-bit) por direccionamiento directo
RESUMEN DEL CONJUNTO DE INSTRUCCIONES
Instrucciones Aritméticas y Lógicas
Mnemónico Operandos Descripción
ADD Rd,Rr Sumasin acarreo
ADC Rd,Rr Sumasin acarreo
ADIW Rd, K Sumaun inmediatoaunregistrode
palabraSUB Rd,Rr Restasin acarreo
SUBI Rd,K Restaun inmediato
SBC Rd,Rr Restacon acarreo
SBCI Rd,K Restaun inmediatoconacarreo
AND Rd,Rr ANDlógico
ANDI Rd,K ANDlógicocon inmediato
OR Rd,Rr OR lógico
ORI Rd,K OR lógicoconinmediato
EOR Rd,Rr OR exclusivo
COM Rd Complementoauno
NEG Rd Complementoados
SBR Rd,K Pona unolosbitsde unregistro
CBR Rd,K Pona cero losbitsde un registro
INC Rd Incrementaal registro
DEC Rd Decrementaal registro
4. UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERIA ELECTRÍCA Y ELECTRONICA
TST Rd Revisasi escero o menor
CLR Rd Borra el registro
SER Rd Carga losbitsde unregistro
ADIW Rd+1:Rd,K Sumaun inmediatoaunregistrode
palabraSBIW Rd+1:Rd,K Restaun inmediatoaunregistrode
palabraMUL Rd,Rr Multiplicasinsigno
MULS Rd,Rr Multiplicaconsigno
MULSU Rd,Rr Multiplicasignadoconno signado
Instrucciones de desvío (salto)
Mnemónicos Operandos Descripción
RJMP k Saltorelativo
IJMP Ninguno Saltoindirecto
EIJMP Ninguno Saltoindirectoextendido
JMP k Salto
RCALL k Llamadarelativaa subrutina
ICALL Ninguno Llamadaindirectaasubrutina
EICALL Ninguno Llamadaindirectaa subrutinaextendida
CALL k Llamadaa subrutina
RET Ninguno Regresode subrutina
RETI Ninguno Regresode interrupción
CPSE Rd,Rr Compare y saltasi esigual
CP Rd,Rr Compara
CPC Rd,Rr Comparacon acarreo
CPI Rd,K Comparacon inmediato
SBRC Rr,b Saltasi el bitdel registroescero
SBRS Rr,b Saltasi el bitdel registroesuno
SBIC P,b Saltasi el bitdel registroI/Oescero
SBIS P,b Saltasi el bitdel registroI/Oesuno
BRBC s,k Saltasi el bitde SREG escero
BRBS s,k Saltasi el bitde SREG es uno
BREQ k Saltasi esigual
BRNE k Saltasi es diferente
BRCS k Saltasi C estáa uno
BRCC k Saltasi C estáa cero
BRSH k Saltasi es mayor o igual
BRLO k Saltasi es menor
BRMI k Saltasi es negativo
BRPL k Saltasi es mayor
BRGE k Saltasi es mayor o igual (consigno)
BRLT k Saltasi es menor(con signo)
BRHS k Saltasi H está a uno
BRHC k Saltasi H está a cero
BRTS k Saltasi T está a uno
BRTC k Saltasi T está a cero
BRVS k Saltasi V esta a uno
BRVC k Saltasi V está a cero
BRIE k Saltasi I estáa uno
BRID k Saltasi I estáa cero
5. UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERIA ELECTRÍCA Y ELECTRONICA
Instrucciones de Transferencia de Datos
Mnemónicos Operandos Descripción
MOV Rd,Rr Copiade registros
MOVW Rd,Rr Copiaregistrosde palabra
LDI Rd,K Carga de uninmediato
LDS Rd,k Carga directa
LD Rd,X Carga indirecta
LD Rd,X+ Carga indirectaconPost-Incremento
LD Rd,-X Carga indirectaconPre-Decremento
LD Rd,Y Carga indirecta
LD Rd,Y+ Carga indirectaconPost-Incremento
LD Rd,-Y Carga indirectaconPre-Decremento
LDD Rd,Y+q Carga indirectacondesplazamiento
LD Rd,Z Carga indirectacon
LD Rd,Z+ Carga indirectaconPost-Incremento
LD Rd,-Z Carga indirectaconPre-Decremento
LDD Rd,Z+q Carga indirectacondesplazamiento
STS k,Rr Almacenadirectamente
Instrucciones de Bit y prueba de Bit
Mnemónicos Operandos Descripción
LSL Rd Desplazamientoalaizquierda
LSR Rd Desplazamientoaladerecha
ROL Rd Rotacióna la izquierdaconacarreo
ROR Rd Rotacióna la derechacon acarreo
ASR Rd Desplazamientoaritmético
SWAP Rd Intercambiode nibbles
BSET s Ponera unola bandera
BCLR s Ponera cero labandera
SBI P,b Ponera uno el bitde un registroI/O
CBI P,b Ponera cero el bitde un registroI/O
BST Rr,b Guarda enT el bitde un registro
BLD Rd,b Carga T enel bitde unregistro
SEC Ninguno Ponera unola banderaC
CLC Ninguno Ponera cero labanderaC
SEN Ninguno Ponera uno labanderaN
CLN Ninguno Ponera cero labanderaN
SEZ Ninguno Ponera unola banderaZ
CLZ Ninguno Ponera cero labanderaZ
SEI Ninguno Ponera uno labanderaI
CLI Ninguno Ponera cero labanderaI
SES Ninguno Ponera unola banderaS
CLN Ninguno Ponera cero labanderaS
SEV Ninguno Ponera uno labanderaV
CLV Ninguno Ponera cero labanderaV
6. UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERIA ELECTRÍCA Y ELECTRONICA
SET Ninguno Ponera unola banderaT
CLT Ninguno Ponera cero labanderaT
SEH Ninguno Ponera uno labanderaH
CLH Ninguno Ponera cero labanderaH
NOP Ninguno No operación
SLEEP Ninguno Modo Sleep
WDR Ninguno Reiniciarel Watchdog
Desarrollo del programa
1.- El programa está hecho en base a los requerimientos del enunciado y del fundamento teórico
explicado anteriormente, para vamos a seguir los siguientes pasos:
Definición del procesador a emplearse.
Definición de variables, en nuestro caso de tipo byte.
Configuración de los puertos. Pin B0 salida.
a) Pone la salida B0 a “1L” (prende LED) durante 300ms
b) Pone la salida B0 a “0L” (apaga LED) durante 300ms.
Repite a) y b) 10 veces
Retardo de un segundos )
Prende LED durante 500ms )
Apaga LED durante 200ms
Repite c ) y d ) 5 veces
Retardo un segundo
Repite de manera infinita.
2.- Escriba el programa comentando cada instrucción en assembler
/*
* jean_pierre_hidalgo_basaldua.asm
*
* Created: 18/04/2016 02:09:37 a. m.
* Author: JEANPIERREH
*/
.include "m8def.inc"; Tipo de procesador, en este caso, ATmega8
.cseg; Segmento de código para la memoria flash
.org 0x0000; Dirección del vector reset
rjmp inicio; Salto para empezar desde inicio
.org 0x0020; Dirección 2 del vector reset
inicio:
ldi r16, high(ramend); estas 4 lineas direccionan a la posicion de memoria stack
out sph, r16; son necesarias si se desea implementar el circuito; habilitan los
retardos
ldi r16, low(ramend); si solo se desea simular
7. UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERIA ELECTRÍCA Y ELECTRONICA
out spl, r16; podemos obviar estas 4 lineas de código
;configuraremos la salida
ldi r16, 0b000000001; cargamos el registro R16 con 00000001
out ddrb, r16; configuramos el puerto B como salida de datos
bucle:; etiqueta
rcall rutina1;llamada a subrutina "rutina1", como se repite 10 veces, la llamo 10
veces
rcall rutina1;llamada a subrutina "rutina1", como se repite 10 veces, la llamo 10
veces
rcall rutina1;llamada a subrutina "rutina1", como se repite 10 veces, la llamo 10
veces
rcall rutina1;llamada a subrutina "rutina1", como se repite 10 veces, la llamo 10
veces
rcall rutina1;llamada a subrutina "rutina1", como se repite 10 veces, la llamo 10
veces
rcall rutina1;llamada a subrutina "rutina1", como se repite 10 veces, la llamo 10
veces
rcall rutina1;llamada a subrutina "rutina1", como se repite 10 veces, la llamo 10
veces
rcall rutina1;llamada a subrutina "rutina1", como se repite 10 veces, la llamo 10
veces
rcall rutina1;llamada a subrutina "rutina1", como se repite 10 veces, la llamo 10
veces
rcall rutina1;llamada a subrutina "rutina1", como se repite 10 veces, la llamo 10
veces
rcall delay_1000ms;llamada a subrutina "delay_1000ms", retardo de un segundo
rcall rutina2;llamada a subrutina "rutina2", como se repite 5 veces, la llamo 5
veces
rcall rutina2;llamada a subrutina "rutina2", como se repite 5 veces, la llamo 5
veces
rcall rutina2;llamada a subrutina "rutina2", como se repite 5 veces, la llamo 5
veces
rcall rutina2;llamada a subrutina "rutina2", como se repite 5 veces, la llamo 5
veces
rcall rutina2;llamada a subrutina "rutina2", como se repite 5 veces, la llamo 5
veces
rcall delay_1000ms;llamada a subrutina "delay_1000ms", retardo de un segundo
rjmp bucle; salto a "bucle"
rutina1:; etiqueta, definiremos "rutina1"
sbi portb,0; prendo led PB0
rcall delay_300ms; led prendido 300ms
cbi portb,0; apago led PB0
rcall delay_300ms; led apagado 300ms
ret; retorna a linea siguiente luego de llamar a "rutina1"
rutina2:; etiqueta, definiremos "rutina2"
sbi portb,0; prendo led PB0
rcall delay_500ms; led prendido 500ms
cbi portb,0; apago led PB0
rcall delay_200ms; led apagado 200ms
ret; retorna a linea siguiente luego de llamar a "rutina2"
delay_100ms:; definiremos "delay_100ms"
ldi r17,50; cargo R17 con 50
x3:;etiqueta
ldi r18,55; cargo R18 con 55
8. UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERIA ELECTRÍCA Y ELECTRONICA
x2:; etiqueta
ldi r19,12; cargo R19 con 12
x1:; etiqueta
dec r19; decremento en una unidad r19
brne x1;si R19 es diferente de cero, sigue decrementando (salto a "x1"), si R19 = 0,
sigue
dec r18; decremento en una unidad r18
brne x2;si R18 es diferente de cero, sigue decrementando (salto a "x2"), si R18 = 0,
sigue
dec r17; decremento en una unidad r17
brne x3;si R17 es diferente de cero, sigue decrementando (salto a "x3"), si R17 = 0,
sigue
ret;retorno a la linea siguiente luego de llamar a "delay_100ms"
delay_200ms:; llamo dos "delay_100ms" para hacer un retardo de 200ms
rcall delay_100ms; llamada a subrutina relatina "delay_100ms"
rcall delay_100ms; llamada a subrutina relatina "delay_100ms"
ret;retorno a la linea siguiente luego de llamar a "delay_200ms"
delay_300ms:; llamo un retardo de 100ms y un retardo de 200ms para formar uno de
300ms
rcall delay_100ms; llamada a subrutina relatina "delay_100ms"
rcall delay_200ms; llamada a subrutina relatina "delay_200ms"
ret;retorno a la linea siguiente luego de llamar a "delay_300ms"
delay_500ms:; llamo un retardo de 200ms y uno de 300ms para formar uno de 500ms
rcall delay_200ms; llamada a subrutina relatina "delay_200ms"
rcall delay_300ms; llamada a subrutina relatina "delay_300ms"
ret;retorno a la linea siguiente luego de llamar a "delay_500ms"
delay_1000ms:; llado a dos retardos de 500ms para formar uno de 1000ms
rcall delay_500ms; llamada a subrutina relatina "delay_500ms"
rcall delay_500ms; llamada a subrutina relatina "delay_500ms"
ret;retorno a la linea siguiente luego de llamar a "delay_1000ms"
3.- Realizar el esquema para la realización práctica y simulación en proteus se puede observar en
la siguiente figura.
11. UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERIA ELECTRÍCA Y ELECTRONICA
HacerfuncionarunmotorCD,conel integradoL293,tal que durante 5segundosgireenunsentido
y durante 5 segundos en el otro.
Diagrama de Flujo:
Programa:
/*
* Jean_pierre_hidalgo_prob_1.asm
*
* Created: 18/04/2016 02:18:59 a. m.
* Author: JEANPIERREH
*/
.include "m8def.inc"; Tipo de procesador, en este caso, ATmega8
.cseg; Segmento de código para la memoria flash
.org 0x0000; Dirección del vector reset
rjmp inicio; Salto para empezar desde inicio
.org 0x0020; Dirección 2 del vector reset
inicio:
ldi r16, high(ramend); estas 4 lineas direccionan a la posicion de memoria stack
out sph, r16; son necesarias si se desea implementar el circuito; habilitan los
retardos
ldi r16, low(ramend); si solo se desea simular
out spl, r16; podemos obviar estas 4 lineas de código
;configuraremos la salida
ldi r16, 0b00000011; cargamos el registro R16
out ddrb, r16; configuramos el puerto B como salida de datos
bucle:;etiqueta
ldi r17, 0b00000001; cargo el registro R17 con 00000001
out portb, r17; el motor gira en sentido horario
rcall delay_5; llamada a subrutina relativa "dalay_5",el motor gira por 5 segundos
ldi r17, 0b00000010; cargo el registro R17 con 00000010
out portb, r17; el motor gira en sentido antihorario
12. UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERIA ELECTRÍCA Y ELECTRONICA
rcall delay_5; llamada a subrutina relativa "dalay_5",el motor gira por 5 segundos
rjmp bucle; salta a "bucle"
delay_5:; definicion de "delay_5"
ldi r18,110; cargo R18 con 110
c:; etiqueta
ldi r19,100;cargo R19 con 100
b:; etiqueta
ldi r20,150; cargo R20 con 150
a:; etiqueta
dec r20; decremento R20 en una unidad
brne a;si R20 es diferente de cero, sigue decrementando (salto a "a"), si R20 = 0,
sigue
dec r19; decremento R19 en una unidad
brne b;si R19 es diferente de cero, sigue decrementando (salto a "b"), si R19 = 0,
sigue
dec r18; decremento R18 en una unidad
brne c;si R18 es diferente de cero, sigue decrementando (salto a "c"), si R18 = 0,
sigue
ret; retorna a la linea siguiente luego de llamar a "delay_5"
Simulacion: