You are on page 1of 15

FACULTAD DE INGENIERIA

ELECTRÓNICA

SISTEMAS MICROPROCESADOS I

UTILIZACION DE DECLARACIONES CON EL ATMEGA 16

ELABORADO POR:

BELÉN AUQUILLA
ÁNGEL FIERRO
FERNANDO LAPO

1
INDICE

Práctica Nº 2 AVR

1. Ejercicio Nº 1:
Programa utilizando Rotate……………………………….…………………...3

2. Ejercicio Nº 2:
Visualizar en un Display de 7 segmentos, datos que van desde 0 – 9 en
forma ascendente……………………………………………………………….5

3. Ejercicio Nº 3:
Escribir un número del 0 – 99 en forma ascendente………………………..8

4. Ejercici1 Nº 4:
Generar un Número aleatorio entre 0 – 99………………………………….11

5. Ejercicio Nº 5:
Prender un Led Intermitente 3 veces, luego prender un segundo led
intermitente 2 veces…………………………………………………………..14

2
Práctica Nº 2
OBJETIVO:

Mediante los nuevos comandos aprendidos realizar las practicas planteadas:

TEMA:
Programa utilizando Rotate

1. Ejercicio Nº 1:

Esquemático:

CÓDIGO:
$regfile "m16def.dat"
$crystal = 8000000
Ddrd = 255
Config Portd = Output
Dim A As Bit , I As Byte
Do
A=1
Waitms 100
For I = 1 To 7
Rotate Portd , Left
Waitms 100
Next
I=0
For I = 1 To 7
Rotate Portd , Right
Waitms 100
Next
Loop
End

Entradas:

3
Salidas:
1. Datos que observamos en los leds

Proceso:
1. Configuro el Puerto D como Salida
2. Dimensiono la A como Bit y L como Byte
3. Si la variable A = 1
4. Comparación For L =1 rota el Portd hacia la Derecha
5. Retardo de 100 ms
6. Si la variable L = 0
7. Comparación For L =1 rota el Portd hacia la Izquierda
8. Retardo de 100 ms

Diagrama de Flujo:
INICIO

Ddrd = 255

Config Portd = Output

Dim A As Bit , I As Byte

A=1

For I = 1 To 7

Rotate Portd , Left

Retardo 100 ms

L=0

For I = 1 To 7

Rotate Portd , Right

Retardo 100 ms

4
2. Ejercicio Nº 2:

Utilización del Diplay de 7 segmentos.


Visualizar en un Display de 7 segmentos, datos que van desde 0 – 9 en forma
ascendente

Esquemático:

CÓDIGO:
$regfile "m16def.dat"
$crystal = 8000000
Config Portd = Output
Dim A As Byte
Ddrd = 0
A=0
Do
Portd = A
Waitms 500
Incr A
If A = 10 Then
A=0
End If
Loop
End

5
Entradas:
1. Datos que ingresan al Microcontrolador

Salidas:
1. Datos que observamos en el Display

Proceso:
1. Configuro el Puerto D como Salida
2. Defino la variable A
3. Dimensiono la variable A como Byte
4. Configuro el Puerto D como entrada
5. Comparaciones A = 0 el puerto D va hacer = A
6. Retardo de 500 ms
7. Se incrementa A

Diagrama de Flujo:
INICIO

Entradas de datos al uc

Config Portd = Output

Dim A As Byte

Ddrd = 0
6
A=0

Portd = A

Retardo 500ms

Increment A

A = 10 No

Si FIN

A=0

7
3. Ejercicio Nº 3:

Manejo del Display de 7 segmentos con barrido


Escribir un número del 0 – 99 en forma ascendente

Esquemático:

CÓDIGO:
$regfile = "m16def.dat"
$crystal = 8000000
Config Portd = Output
Config Portc = Output
Dim A As Byte
Dim B As Byte
A=0
B=0
Dim I As Word
Dim H As Byte
I=0
Do
Portc = 1
Portd = A
Waitus 10
Incr I
If I = 2000 Then
Incr B
If B = 10 Then
B=0
Incr A
If A = 10 Then
A=0
End If
End If
I=0
End If
Loop
End

8
Entradas:
1. Datos que ingresan al Microcontrolador

Salidas:
1. Datos que observamos en los Display

Proceso:
1. Configuro los Puerto D y C como Salida
2. Defino las variables A, B y L
3. Dimensiono las variables A, B y H como Byte
4. Retardo de 10 ms
5. Incrementa L
6. Comparación If L=2000 se incrementa B
7. Comparación If B=10 se incrementa A

Diagrama de Flujo:

INICIO

Entradas de datos al uc

Config Portd = Output

Config PortC= Output


9
A =0; B=0

Dim A As Byte

Dim B As Byte

Dim l As Word

Dim H As Byte

Portc =1

Portd = A

Retardo 10 ms

Incrementa L

L= 2000

Si

Incrementa B

B=0

Si

Incrementa A

A=0

Si FIN

10
4. Ejercicio Nº 4:

Programa utilizando RND


Generar un Número aleatorio entre 0 – 99

Comando RND
Var=RND (limite)
Var.- Variable donde se guarda el número
Lim.- Valor aleatorio máximo

Esquemático:

CÓDIGO:
$regfile = "m16def.dat"
$crystal = 8000000
Config Portd = Output
Config Portc = Output

Dim A As Byte H As Byte , Menor As Byte , Mayor As Byte


Do
H = Rnd(99)
H = Makebcd(h)
Menor = H And &B0000_1111
Mayor = H And &B1111_0000
Shift Mayor , Right , 4

Portd = Menor
Portc = 2
Waitus 100
Portd = Mayor

11
Portc = 1
Waitus 100

Loop
End

Entradas:
1. Datos que ingresan al Microcontrolador

12
Salidas:
1. Datos que observamos en los Display

Proceso:
1. Configuro los Puerto D y C como Salida
2. Defino las variables Mayor, Menor, H y I
3. Hago a H un número del 0 -99 (comando Rnd)
4. Convierto a H a BCD
5. Escribo la Condición de Mayor y Menor
6. Retardo de 1ms

Diagrama de Flujo:
INICIO

Entradas de datos al uc

Config Portd = Output

Config PortC= Output

Dim A As Byte; H As Byte, Menor


As Byte , Mayor As Byte

H = Rnd(99)

H = Makebcd(h)

Menor = H And &B0000_1111

Mayor = H And &B1111_0000

Portd = Menor
)
Portc = 2

Retardo 100
ms
Portd = Mayor
)
Portc = 1

Retardo 100
ms

13
5. Ejercicio Nº 5:

Utilización del comando GOSUB y GOTO

Prender un Led Intermitente 3 veces, luego prender un segundo led intermitente 2 veces,
si se presiona el pulsador 1 sólo funciona el segundo led y si si presiona el pulsante 2 sólo
funciona el primer led

Esquemático:

CÓDIGO:
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
Ddrd = 0
Ddrd = 255
Config Portd = Output
Config Portb = Input
Portd = 0
Dim I As Byte
Lazo:
If Pinb.0 = 0 Then Gosub Sub1
Waitms 100
If Pinb.1 = 0 Then Gosub Sub2
Waitms 100
Goto Lazo
End
Sub1:
For I = 1 To 3
Portd.1 = 1
Waitms 500
Portd.1 = 0
Waitms 500
Next
Return

14
Sub2:
For I = 1 To 2
Portd.2 = 1
Wait 1
Portd.2 = 0
Wait 1
Next
Return

Entradas:
1. Datos que ingresan al Microcontrolador

Salidas:
1. Datos que observamos en los Led´s

Proceso:
1. Configuro los Puerto D como Salida
2. Configuro los Puerto B como Entrada
3. Dimensiono a L como byte
4. Realizo un lazo.
5. Comparaciones If Pinb.0=0 se activa Gosub Sub1
6. Retardo 100 ms
7. Comparaciones If Pinb.1=0 se activa Gosub Sub2
8. Retardo 100 ms
9. Realizo la subrutina 1 y 2

Diagrama de Flujo

INICIO

Entradas de datos al uc

Config Portd = Output

Config Portb= Input

Portd=0

Goto Lazo
No
Pinb.0 =0 Pinb.1=0
No
SI
SI
Gosub Sub1
For I =1 To 3
Gosub Sub2 FIN
For I =1 To 2
Pord.a=1 FIN Pord..2=1
Retardo 500ms Retardo 1ms
Portd.1=0
Portd.2=0
Restrado 500 ms Restrado 1 ms
15