Vous êtes sur la page 1sur 31

Solucin de la primera prctica calificada.

1. Disee un programa que controle el encendido de 8 Leds ubicados


en el puerto D, Estos deben encender de dos en dos hasta que
todos estn encendidos, el encendido debe comenzar cuando se
cierra un interruptor ubicado en el pin pc0. Se pide:
a) Realizar el diagrama de flujo del programa
b) Escribir el programa; comente cada instruccin
/*
* PREGUNTA1.asm
*
* Created: 13/09/2015 05:37:30 p.m.
* Author:
*/
.include "m8def.inc"
;Tipo de procesador
.cseg
;Segmento de cdigo para memoria flash
.org 0x000
; Direccin del Vector Roset
rjmp inicio
; Salto para empezar desde inicio
inicio:
LDI R16,LOW(RAMEND)
OUT SPL,R16
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,$FF
OUT DDRD,R16
LDI R16,$00
OUT PORTD,R16
RCALL DELAY
BUCLE:
LDI R17,$05
CICLO:
OUT PORTD,R16
RCALL DELAY
LSL R16
de R16
LSL R16
de R16(??)
SUBI R16,-(3)
DEC R17
BRNE ciclo
LDI R16,$00
RJMP BUCLE
DELAY:

; carga la configuracin de la pila


; habilita la parte alta de la pila
; carga la configuracin de la pila
; habilito la parte baja de la pila
; cargo R16=$FF
; configuro puerto D como salida
; cargo R16=$00
; envi $00 por el puerto D

; cargo R17=$09
; cargo al puerto D el contenido de R16
; llamo un retardo de 100ms
; desplazo a la izquierda el contenido
; desplazo a la izquierda el contenido
; resto -(3) a R16
; decremento en 1 a R17
; salto a ciclo si R17 ES $00
; cargo R16=$00
; salto relativo a bucle
LDI R18,60

; cargo R18=$20

FOR_0:
LDI R19,101
FOR_1:
LDI R20,65
FOR_2:
DEC R20

; cargo R20=$101
; cargo R20=$65
; decremento en 1 a R20

BRNE FOR_2
DEC R19
BRNE FOR_1
DEC R18
BRNE FOR_0

; salto a FOR_2 si R20 es $00


; decremento en 1 a R19
; salto a FOR_1 si R19 es $00
; decremento en 1 a R18
; salto a FOR_1 si R18 es $00
; retorno al programa

RET
principal

c) Presentar el circuito dejando listo para hacer pruebas en el


laboratorio.
R1
10k

R2

R3

10k

10k

U2

15pF

C1

X1

14
15
16
17
18
19
9
10

CRYSTAL

C2

DSW1

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

1nF
21
20

AREF
AVCC

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1

ON

1
2

OFF

4
3

DIPSW_2

R4
R5
R6
220
R7
220
R8
220
R9
220
R10
220
R11
220

2
3
4
5
6
11
12
13

220
220

ATMEGA8

D1

D2

D3

D4

D5

D6

D7

D8

LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED

d) Simular el funcionamiento de dicho circuito con el software


Proteus.
R1
10k

R2

R3

10k

10k

U2

15pF

C1

X1

14
15
16
17
18
19
9
10

CRYSTAL

C2

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

1nF
21
20

AREF
AVCC

DSW1
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

ATMEGA8

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

ON

1
2

OFF

4
3

DIPSW_2

R4
R5
R6
220
R7
220
R8
220
R9
220
R10
220
R11
220
220
220

D1

D2

D3

D4

D5

D6

D7

D8

LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED

2.

Un programa sigue los siguientes pasos:

Definicin del procesador a emplearse.


Definicin de variables, en nuestro caso de tipo byte.
Configuracin de los puertos. Pin B0 salida.
a) Pone la salida B0 a 1 (prende LED) durante 300ms
b) Pone la salida B0 a 0 (apaga LED) durante 300ms.
Repite a) y b) 10 veces
Retardo de un segundo
c) Prende LED durante 500ms
d) Apaga LED durante 200ms
Repite c ) y d ) 5 veces
Retardo un segundo
Repite de manera infinita.
I. Se pide escribir las instrucciones para implementar el
programa.
/*
* PREGUNTA2.asm
*
* Created: 13/09/2015 05:53:39 p.m.
* Author:
*/
.include "m8def.inc" ;Tipo de procesador
.cseg
; Segmento de codigo para memoria flash
.org 0x000
; Direccion del Vector Reset
rjmp inicio
; Salto para empezar desde inicio
inicio:
LDI R16,LOW(RAMEND)
OUT SPL,R16
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,$01
OUT DDRB,R16
BUCLE:
LDI R17,10

; carga la configuracion de la pila


; habilita la parte alta de la pila
; carga la configuracion de la pila
; habilito la parte baja de la pila
; cargo R16=$01
; configuro puerto B como salida
; cargo R17=10

CICLO_1:
SBI PORTB,0
RCALL DELAY_300MS
CBI PORTB,0
RCALL DELAY_300MS
DEC R17
BRNE CICLO_1
LDI R17,5

; pongo a 1 el PINB0
; llamo un retardo de 300mS
; pongo a 0 el PINB0
; llamo un retardo de 300mS
; decremento em 1 a R17
; salto a ciclo_1 si R17=$00
; cargo R17=5

CICLO_2:
SBI PORTB,0
RCALL DELAY_500MS
CBI PORTB,0
RCALL DELAY_500MS
DEC R17
BRNE CICLO_2

; pongo a 1 el PINB0
; llamo un retardo de 300mS
; pongo a 0 el PINB0
; llamo un retardo de 300mS
; decremento em 1 a R17
; salto a ciclo_2 si R17=$00

RCALL DELAY_1S
RJMP BUCLE
DELAY_300MS:
LDI R18,60
FOR_00:
LDI R19,101
FOR_01:
LDI R20,65
FOR_02:
DEC R20
BRNE FOR_02
DEC R19
BRNE FOR_01
DEC R18
BRNE FOR_00
RET

DELAY_500MS:
LDI R18,100
FOR_10:
LDI R19,101
FOR_11:
LDI R20,65
FOR_12:
DEC R20
BRNE FOR_12
DEC R19
BRNE FOR_11
DEC R18
BRNE FOR_10
RET
DELAY_1S:
LDI R18,200
FOR_20:
LDI R19,101
FOR_21:
LDI R20,65
FOR_22:
DEC R20
BRNE FOR_22
DEC R19
BRNE FOR_21
DEC R18
BRNE FOR_20
RET

; salto relativo a bucle


; cargo R18=$60
; cargo R19=$101
; cargo R20=$65
; decremento en 1 a R20
; salto a FOR_02 si R20 es $00
; decremento en 1 a R19
; salto a FOR_1 si R19 es $00
; decremento en 1 a R18
; salto a FOR_1 si R18 es $00

; cargo R18=$100
; cargo R19=$101
; cargo R20=$65
; decremento en 1 a R20
; salto a FOR_12 si R20 es $00
; decremento en 1 a R19
; salto a FOR_11 si R19 es $00
; decremento en 1 a R18
; salto a FOR_10 si R18 es $00

; cargo R18=$200
; cargo R19=$101
; cargo R20=$65
; decremento en 1 a R20
; salto a FOR_22 si R20 es $00
; decremento en 1 a R19
; salto a FOR_21 si R19 es $00
; decremento en 1 a R18
; salto a FOR_20 si R18 es $00

II.

Realice la simulacin del sistema


Nota: se presenta el circuito para realizar la simulacin
R1
220

D1
LED-RED

U2
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

ATMEGA8

R1
220

D1
LED-RED

U2
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

ATMEGA8

3. Hacer funcionar un motor CD, con el integrado L293, tal que


durante 5 segundos gire en un sentido y durante 5 segundos en el
otro.

L293
PB1
ATMEGA8

MOTOR DC

PB0

DRIVER

a) Realizar el diagrama de flujo del programa


b) Escriba las instrucciones
/*
* PREGUNAT3.asm
*
* Created: 13/09/2015 06:04:23 p.m.
* Author:
*/
/*
* PREGUNTA_3.asm
*
* Created: 13/09/2015 04:01:39 p.m.
* Author: Acedo
*/
.include "m8def.inc"
.cseg
.org 0x000
rjmp inicio

; Tipo de procesador
; Segmento de codigo para memoria flash
; Direccion del Vector Reset
; Salto para empezar desde inicio

inicio:
LDI R16,LOW(RAMEND)
; carga la configuracion de la pila
OUT SPL,R16
; habilita la parte alta de la pila
LDI R16,HIGH(RAMEND)
; carga la configuracion de la pila
OUT SPH,R16
; habilito la parte baja de la pila
LDI R16,$03
; cargo R16=$01
OUT DDRB,R16
; configuro puerto B como salida
;..............................................................
BUCLE:
LDI R17,5
; cargo R17=5
;...............................................................
CICLO_1:
SBI PORTB,0
; pongo a 1 el PINB0
CBI PORTB,1
; pongo a 0 el PINB0
RCALL DELAY_1S
; llamo un retardo de 1S
DEC R17
; decremento em 1 a R17
BRNE CICLO_1
; salto a ciclo_1 si R17=$00
LDI R17,5
; cargo R17=5
;...............................................................
CICLO_2:
SBI PORTB,1
; pongo a 1 el PINB0
CBI PORTB,0
; pongo a 0 el PINB0
RCALL DELAY_1S
; llamo un retardo de 1S
DEC R17
; decremento em 1 a R17
BRNE CICLO_2
; salto a ciclo_2 si R17=$00
RJMP BUCLE
; salto relativo a bucle
;................................................................
DELAY_1S:
LDI R18,200
; cargo R18=$200
FOR_0:

LDI R19,101
; cargo R19=$101
FOR_1:
LDI R20,65
; cargo R20=$65
FOR_2:
DEC R20
; decremento en 1 a R20
BRNE FOR_2
; salto a FOR_2 si R20 es $00
DEC R19
; decremento en 1 a R19
BRNE FOR_1
; salto a FOR_1 si R19 es $00
DEC R18
; decremento en 1 a R18
BRNE FOR_0
; salto a FOR_0 si R18 es $00
RET
;.................................................................

c) Realizar la simulacin
U2
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

AREF
AVCC

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

ATMEGA8

JRIVERA

16
2
7
1
9
10
15

IN1
IN2
EN1
EN2
IN3
IN4

VSS

GND

U1

8
VS

OUT1
OUT2

OUT3
GND OUT4

3
6

11
14
L293D

4. Enunciado: Empleando el microcontrolador ATmega8 realizar el


encendido intermitente (5veces) de 8 LEDs conectados en nodo
comn al Puerto D. Luego de un retardo de 2 segundos un LED se
desplaza desde el pin D0 a D7 y reversa, emulando las luces de auto
fantstico, con un retardo de 150ms. Toda las acciones debe
comenzar cundo se cierra un interruptor.
a) Realizar el diagrama de flujo del programa
b) Escriba las instrucciones comentadas.
/*
* PREGUNTA4.asm
*
* Created: 13/09/2015 06:17:24 p.m.
* Author:
*/

.include "m8def.inc"
.cseg
.org 0x000
rjmp inicio

; Tipo de procesador
; Segmento de codigo para memoria flash
; Direccion del Vector Reset
; Salto para empezar desde inicio

inicio:
LDI R16,LOW(RAMEND)

; carga la configuracion de la pila

OUT SPL,R16

; habilita la parte alta de la pila

LDI R16,HIGH(RAMEND)
OUT SPH,R16

; carga la configuracion de la pila


; habilito la parte baja de la pila

LDI R16,$FF
OUT DDRD,R16

; cargo R16=$FF
; configuro puerto D como salida

LDI R16,$00
OUT PORTD,R16

; cargo R16=$01
; configuro puerto D como salida

LDI R17,5

; cargo R17=$5

CICLO_1:
LDI R16,$FF
OUT PORTD,R16

; cargo R16=$FF
; envio el valor de R16 al puerto D

RCALL DELAY_150MS
LDI R16,$00
OUT PORTD,R16

; llamo un retardo de 150mS


; cargo R16=$00
; envio el valor de R16 al puerto D

RCALL DELAY_150MS
DEC R17

; llamo un retardo de 150mS


; decremento em 1 a R17

BRNE CICLO_1
RCALL DELAY_1S
RCALL DELAY_1S

; salta a ciclo_1 si R17=$00


; llamo un retardo de 1S
; llamo un retardo de 1S

CICLO_2:
LDI R17,8
LDI R16,1

; cargo R17=8
; cargo R16=1

CICLO_3:
OUT PORTD,R16

; envio el valor de R16 al puerto D

RCALL DELAY_150MS
LSL R16
R16
DEC R17
BRNE CICLO_3
LDI R17,8
LDI R16,128
CICLO_4:
OUT PORTD,R16
RCALL DELAY_150MS
LSR R16
DEC R17
BRNE CICLO_4
RJMP CICLO_2

; llamo un retardo de 150mS


; desplazo un bit a la izquierda de
; decremento en 1 a R17
; salta a ciclo_3 si R17=$00
; cargo R17=8
; cargo R16=128
; envio el valor de R16 al puerto D
; llamo un retardo de 150mS
; desplazo un bit a la derecha de R16
; decremento en 1 a R17
; salta a ciclo_4 si R17=$00
; salto relativo a ciclo_2

DELAY_150MS:
LDI R18,30
FOR_00:
LDI R19,101
FOR_01:
LDI R20,65
FOR_02:
DEC R20
BRNE FOR_02
DEC R19
BRNE FOR_01
DEC R18
BRNE FOR_00
RET

; cargo R18=$30
; cargo R19=$101
; cargo R20=$65
; decremento en 1 a R20
; salto a FOR_2 si R20 es $00
; decremento en 1 a R19
; salto a FOR_1 si R19 es $00
; decremento en 1 a R18
; salto a FOR_0 si R18 es $00

DELAY_1S:
LDI R18,200
FOR_20:
LDI R19,101
FOR_21:
LDI R20,65
FOR_22:
DEC R20
BRNE FOR_22
DEC R19
BRNE FOR_21
DEC R18
BRNE FOR_20
RET

; cargo R18=$200
; cargo R19=$101
; cargo R20=$65
; decremento en 1 a R20
; salto a FOR_2 si R22 es $00
; decremento en 1 a R19
; salto a FOR_1 si R21 es $00
; decremento en 1 a R18
; salto a FOR_0 si R20 es $00

c) Hacer la simulacin

U2
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC
ATMEGA8

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

R4
R5
R6
220
R7
220
R8
220
R9
220
R10
220
R11
220
220
220

D1

D2

D3

D4

D5

D6

D7

D8

LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED

5. Hacer los cambios en el programa p6 en caso de conectarse los


LEDs en ctodo comn.

6.-Realizar un juego de LEDs que se desplacen desde los extremos (D7 y


D0 inicialmente encendidos) hacia el centro. Los LEDs estn conectados
al PORTB. Toda la accin de encendido debe comenzar cuando se cierra un
interruptor ubicado en el pin PC0
DESARROLLO.
a) Realizar el diagrama de flujo del programa.
Pregunta6.asm

Carga de registros y de Pila

Puerto B como salida


Puerto C como entrada

Lectura de PC0

NO
PC0=1

SI
DELAY_500MS

LEDS

b) Escriba las instrucciones comentadas

/*
* PREGUNTA6.asm
*
* Created: 11/09/2015 12:44:06 a.m.
* Author:
*/
.Include "M8DEF.INC"
.CSEG
.ORG 0x0000
RJMP inicio

;
;
;
;

CARGAMOS CARACTERISTICAS DEL ATMEGA


AQUI COMIENSA SEGMENTO DEL CODIGO
INICIA EN LA DIRECCIN 0X000 DE LA MEMORIA
SALTA A inicio

;................................................................................
inicio:
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
LDI R16,0XFF
OUT DDRB,R16
LDI R16,0X00
OUT DDRC,R16
ENTRADA
LDI R16,0xf

;CARGANDO CONFIGURACIN DE LA PILA


;HABILITAR PARTE ALTA DE LA PILA
;CARGANDO CONFIGURACION DE LA PILA
;HABILITANDO PARTE BAJA DE LA PILA
;CARGANDO R16 CON (0XFF)
;CONFIGURANDO PUERTO B COMO SALIDA
;CARGANDO R16 CON 0X000=0B00000000
;CONFIGURANDO PUERTO C COMO
;CARGANDO R16 CON 0XFF=0B11111111

OUT PORTB,R16
;LOS LED ENCENDIDO INICIALMENTE
;.....................................................................
PULSADOR:
SBIC PINC,0
;LEE EL PIN0 DEL PUERTO C,
RJMP PULSADOR
;SI PIN0=0 SALTA A PULSADOR
SBIS PINC,0
;LEE EL PIN0 DEL PUERTO C,
RJMP LEDS
; SI PIN0=1 SALTA A LEDS

LEDS:
LDI R16,0XFF
;CARGANDO R16 CON 0XFF=0B11111111
OUT PORTB,R16
;INICIALMENTE ENCENDIDO TODO LOS LEDS
RCALL DELAY_500MS
;LLAMA A RETARDO DE 500MS
LDI R16,0b01111110
;CARGANDO EL REGISTRO R16 CON 0b01111110
OUT PORTB,R16
;AVANZA UN BIT DES DE IZQUIRDA Y
DERECHA HACIA
RCALL DELAY_500MS
;LLAMA A RETARDO DE 500MS
LDI R16,0B00111100
;CARGANDO R16 CON 0B00111100
OUT PORTB,R16
;AVANZA 2 BIT DES DE IZQUIRDA Y
DERECHA HACIA
RCALL DELAY_500MS
;LLAMA A RUTINA DE RETARDO DE 500MS
LDI R16,0B00011000
;CARGANDO R16 CON 0B00011000
OUT PORTB,R16
;AVANZA 3 BIT DES DE IZQUIRDA Y
DERECHA HACIA
RCALL DELAY_500MS
;LLAMA A RUTINA DE RETARDO DE
500MS
LDI R16,0B00000000
;CARGANDO R16 CON 0B00000000
OUT PORTB,R16
;AVANZA 4 BIT DES DE IZQUIRDA Y
DERECHA HACIA
RCALL DELAY_500MS
;LLAMA A RUTINA DE RETARDO DE 500MS
RJMP LEDS
; CUANDO TODO LOS LEDS SE APAGARON VUELVE A

;..........................................................................
DELAY_500MS:
LDI R17,100

;CARGANDO R17 CON 100

LDI R18,101

;CARGANDO R18 CON 100

LDI R19,65

;CARGANDO R19 CON 100

DEC R19
BRNE FOR_3
DEC R18
BRNE FOR_2
DEC R17
BRNE FOR_1

; DECREMENTA EN 1 A R19
;SALTA A FOR_3 HASTA QUE R19 SEA
;DECREMENTA R18 EN 1
;SALTA A FOR_2 HASTA QUE R18=0
;DECREMENTA EN 1 AL REGISTRO R17
;SALTA A FOR_1 HASTA QUE R17=0

FOR_1:

FOR_2:

FOR_3:

RET

C) Hacer la simulacin.
Cuando el pulsador esta en 1, comienza a apagarse los leds de ambos lados
hacia el centro.
+5V

U1
23
24
25
26
27
28
1

R1

4
3

OFF

ON

1
2

10k

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET

DSW1
DIPSW_2

2
3
4
5
6
11
12
13

PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC

14
15
16
17
18
19
9
10

D1 D2

D3

LED-RED

LED-RED

21
20

ATMEGA8

Cuando el pulsador esta en cero se quedan prendidos.

D4LED-REDD5
LED-RED

D6
LED-RED

D7
LED-RED D8
LED-RED

+5V

U1
23
24
25
26
27
28
1

R1

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET

1
2

10k

ON

DSW1

4
3

OFF

DIPSW_2

2
3
4
5
6
11
12
13

PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

14
15
16
17
18
19
9
10

D1

D2

LED-RED
AREF
AVCC

D3
LED-RED

D4LED-REDD5
LED-RED

D6
LED-RED

D7
LED-RED

D8
LED-RED

21
20

ATMEGA8

7.- Enunciado: Se conecta dos interruptores al PORTC<1:0> con pull-up


internas y segn el valor ledo realice una accin determinada conforme al
siguiente tabla de verdad:
PC1
PC0
PORTD
0
0
LEDS apagados
0
1
Auto fantstico
1
0
LEDS intermitentes
1
1
Juego de LEDS
El circuito de prueba, de acuerdo a las explicaciones dadas y con
resistencias pull up internas activadas, se tiene el siguiente:

Desarrollo.
a) Realizar el diagrama de flujo del programas

LEDS

INICIO

b) Escriba las instrucciones comentada


/*
* pregunta7.asm
*
* Created: 11/09/2015 09:39:37 p.m.
* Author:
*/

Configuracin del puerto D como sa

.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0X0000

;CARGANDO CARACTERISTICAS DEL ATMEGA8


;INICIO DEL SEGMENTO CODIGO
;DIRECCION DE INICIO 0X0000

RJMP INICIO
;.................................................................................
INICIO:
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16

;CARGANADO CONFIGURACION DE LA PILA


;HABILITANDO LA PARTE HALTA DE LA PILA
;CARGANADO CONFIGURACION DE LA PILA
;HABILITANDO PARTE BAJA DE LA PILA

LDI R16,0XFF
OUT DDRD,R16

;CARGANDO REGISTRO R16 CON 0XFF


;CONFIGURANDO PUERTO D COMO SALIDA

LDI R16,0x0000
;CARGANDO R16 CON 0X0000
OUT DDRC,R16
;CONFIGURANDO PUERTO C COMO
ENTRADA
OUT PORTD,R16
;ENVIO EL VALOR DE R16 AL PUERTO D
;........................................................................................
LEDS:
IN R21,PINC
ANDI R21,$03
CPI R21,0X0000
BREQ FUNCION_00
CPI R21,$01
BREQ FUNCION_01
CPI R21,$02
BREQ FUNCION_2
CPI R21,$03
BREQ FUNCION_3
RJMP LEDS
;............................................................................................
DELAY_150MS:

FOR_00:
FOR_01:

LDI R18,30

;CARGANDO R18=$30

LDI R19,101

;CARGANDO R19=$101

LDI R20,65

;CARGANDO R20=$65

FOR_02:

DEC R20
;DECREMENTA EN 1,R20=R20-1
BRNE FOR_02
; SI R20 DIFERENTE DE CERO SALTA
DEC R19
;DECREMENTA EN 1 REGISTRO R19
BRNE FOR_01
;SALTA SI R19 ES DIFRENTE DE CERO
DEC R18
;DECREMENTA EN 1 REGISTRO R18
BRNE FOR_00
;SALTA SI R18 ES DIFERENTE DE CERO
RET
;.............................................................................................
FUNCION_00:

LDI R16,$00
OUT PORTD,R16
RET
;...............................................................................................
FUNCION_01:

LDI R17,8

;CARGANDO R17=$08

CICLO_1:

CICLO_2:

LDI R16,1

;CARGANDO R16=$01

OUT PORTD,R16
RCALL DELAY_150MS
LSL R16
DEC R17
BRNE CICLO_1
LDI R17,8
LDI R16,128

;ENVIO VALOR DE R16 A PUERTO D


;LLAMADA AL RETARDO
;DESPLAZA UN BIT A LA IZQUIERDA
;DECREMENTA R17
;SI R17 DIFERENTE DE CERO, SALTA
;CARGANDO R17=$08
;CARGANDO R16=128

OUT PORTD,R16

; ENVIO DE VALOR DE R16 AL

PUERTO D

RCALL DELAY_150MS ; LLAMADA A RETARDO


LSR R16
;DESPLAZAMIENTO A LA DERECHA DE R16
DEC R17
;DECREMENTO DE R17
BRNE CICLO_2
; SALTO SI R17=0X0000
RJMP LEDS
;..................................................................................................
FUNCION_2:
LDI R16,$FF
OUT PORTD,R16
PUERTO D

;CARGO R16=0XFF
;ENVIO DEL VALOR DE R16 AL

RCALL DELAY_150MS
;LLAMADA A RETARDO
LDI R16,$00
;CARGANDO R16=0X000
OUT PORTD,R16
;ENVIO DEL VALOR DE R16 AL

PUERTP D

RCALL DELAY_150MS ;LLAMADA A UN RETARDO


RJMP LEDS
;......................................................................................................
FUNCION_3:

PUERTO D

LDI R16,129
OUT PORTD,R16

;CARGANDO REGISTRO R16=129


;ENVIO VALOR DE REGISTRO AL

RCALL DELAY_150MS
LDI R16,66
OUT PORTD,R16
RCALL DELAY_150MS
LDI R16,36
OUT PORTD,R16
RCALL DELAY_150MS
LDI R16,24
OUT PORTD,R16
RCALL DELAY_150MS

;LLAMADA A RETARDO
; CARGANDO R16=66
;ENVIANDO R16=66 AL PUERTO D
;LLAMADA A RETARDO
;CARGANDO R16=36
;ENVIANDO R16=36 AL PUERTO D
;LLAMADA RETARDO
; CARGANDO R16=24
;ENVIO DEL DATO AL PUERTO D
;LLAMADA A RETARDO

RJMP LEDS
;..............................................................................................................

c) Hacer la simulacin
Para PC1=0 Y PC0=0, LEDS APAGADOS

U1
14
15
16
17
18
19
9
10

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

21
20

AREF
AVCC

DSW1
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1

OFF

4
3

ON

1
2

DIPSW_2

2
3
4
5
6
11
12
13

ATMEGA8

R1

R2

330

330

R3

R4

R5

R6

R7

R8

330

330

330

330

330

330

D1

D2

LED-RED

LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED

D3

D4

D5

D6

D7

D8

Para PC1=0 y PC0=1, auto fantstico.


U1
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC

DSW1
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1

4
3

OFF

ON

1
2

DIPSW_2

2
3
4
5
6
11
12
13

ATMEGA8

R1

R2

330

330

R3

R4

R5

R6

R7

R8

330

330

330

330

330

330

D1

D2

LED-RED

LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED

Para PC1=1 y PC0=0, Leds intermitentes

D3

D4

D5

D6

D7

D8

U1
14
15
16
17
18
19
9
10

DSW1

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

21
20

AREF
AVCC

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1

OFF

4
3

ON

1
2

DIPSW_2

2
3
4
5
6
11
12
13

ATMEGA8

R2

R1
330

330

R3

R4

R5

R6

R7

R8

330

330

330

330

330

330

D1

D2

LED-RED

LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED

D3

D4

D5

D6

D7

D8

Para PC1=1 y PC0=1, Juego de LEDS


U1
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC

DSW1
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1

4
3

OFF

ON

1
2

DIPSW_2

2
3
4
5
6
11
12
13

ATMEGA8

R1

R2

330

330

R3

R4

R5

R6

R7

R8

330

330

330

330

330

330

D1

D2

LED-RED

LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED

D3

D4

D5

D6

D7

8.-Realizar un programa que realice el encendido y monitoreo de un motor


a travs de contactores.
Existen 3 pulsadores:
uno de parada ( BP ) ,
uno de marcha ( BM)
y uno para funcionamiento intermitente ( BI ) ,
y un sensor de supervisin ( S ) .
En caso de presionar BM el motor funciona de manera permanente y
si se cierra BP o S el motor se apaga. Con BI el motor funciona solo
si este est presionado.
a) Realizar el diagrama de flujo del programa

D8

Pregunta7.asm

Carga de la Pila y
de registros

Configuracin del
puerto D como
salida
INICIO

LEDS

Funcin_
00

Funcion_
01

Ciclo_1

Funcion_
02

Ciclo_2

BREQ

b) Escriba las instrucciones comentada


/*
* PREGUNTA8.asm
*
* Created: 11/09/2015 11:05:25 p.m.
* Author:
*/
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0X000
RJMP INICIO

;CARGANDO CARACTERISTICAS DE ATMEGA8


;INICIO DE SEGMENTO DE CODIGO
;POSICION DE INICIO DE MEMORIA

;..............................................................................
INICIO:
LDI R16,HIGH(RAMEND)
;CARGANDO CONFIGURACION DE LA PILA
OUT SPH,R16
;HABILITANDO LA PARTE BAJA DE LA PILA
LDI R16,LOW(RAMEND)
;CARGANDO CONFIGURACIN DE LA PILA
OUT SPL,R16
;HABILITANDO PARTE BAJA DE LA PILA
LDI R16,$FF
;CARGANDO R16=0XFF
OUT DDRB,R16
;CONFIGURANDO PUERTO B COMO SALIDA
LDI R16,$00
;CARGANDO R16=$00
OUT DDRD,R16
;CONFIGURANDO COMO ENTRADA PUERTO

OUT PORTD,R16
LDI R16,$00

;ENVIANDO EL VALOR R16 AL PUERTO B


;CARGANDO R16 CON $FF

;................................................................................
BUCLE:

IN R21,PINC
ANDI R21,$07
CPI R21,$01
BREQ FUNCION_0
CPI R21,$03

; LEE PUERTO Y GUARDA EN R21


;op AND Para convertir en cero el pin reset
;COMPARANDO R21 CON $06
;SALTA A FUNCIO SI R21=$06
;COMPARA R21 CON $05

BREQ FUNCION_1
CPI R21,$04
BREQ FUNCION_2
RJMP BUCLE

;SALTA SI R21=$05
;COMPARA R21 CON $03
;SALTA A LA ETIQUETA SI R21=$03
;SALTO RELATIVO

;..........................................................................................
FUNCION_0:
LDI R21,$01
OUT PORTB,R21
PUERTO DATO DE R16
IN R21,PINC
ANDI R21,$07
CPI R21,$01
BREQ FUNCION_0
LDI R18,$00
OUT PORTB,R19
RJMP BUCLE

;CARGANDO R16 CON 0X0000


;ENVIANDO A LA SALIDA DEL
; LEE PUERTO Y GUARDA EN R21
;op AND Para convertir en cero el pin reset
;COMPARANDO R21 CON $06
;SALTA A FUNCIO SI R21=$06
;SALTO RELATIVO

;................................................................................
FUNCION_1:
LDI R18,$00
OUT PORTB,R18
IN R21,PINC
ANDI R21,$07
CPI R21,$03
BREQ FUNCION_1
LDI R18,$00
OUT PORTB,R19
RJMP BUCLE

;CARGANDO R16 CON $02


;ENVIANDO AL PUERTO DE SALIDA B
; LEE PUERTO Y GUARDA EN R21
;op AND Para convertir en cero el pin reset
;COMPARANDO R21 CON $06
;SALTA A FUNCIO SI R21=$06
;SALTO REALTIVO A FUNCION MOTOR

;................................................................................
FUNCION_2:
LDI R17,$01
OUT PORTB,R17
CONTENIDO DE R16
IN R21,PINC
ANDI R21,$07
CPI R21,$04
BREQ FUNCION_2
LDI R16,$00
OUT PORTB,R16
RJMP BUCLE

;CARGANDO R16 CON $02


;ENVIANDO AL PUERTO B
; LEE PUERTO Y GUARDA EN R21
;op AND Para convertir en cero el pin re
;COMPARANDO R21 CON $03
;SI ES IGUAL SALTA
;CARGANDO R16 CON 00000
;ENVIO DATO DE R16 A PUERTO B

RET

c) Simulacin.
BI
BP
0
0
0
1
1
0

BM
1
0
0

RESULTADO, MOTOR
Con un pulso comienza girar
Parada, deja de girar el motor
Gira solo cuando se pulsa

Aplicando un pulso BM comienza a girar el motor

Despus se aplica un pulso BP y deja de girar el motor


Gira solo cuando se mantiene pulsado BI
U1
14
15
16
17
18
19
9
10

21
20

BM

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

AREF
AVCC

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

BP

BI

ATMEGA8

16
2
7
1

9
10
15

IN1
IN2
EN1

EN2
IN3
IN4

VSS

U2

8
VS

OUT1
OUT2

3
6
MOTOR

GND

OUT3
GND OUT4

11
14

L293D

Pregunta9.asm

Carga de la Pila y de registros

d) Hacer la simulacin
INICIO:
9.- Enunciado :Se desea
visualizar en un display nodo comn, cada
500ms, los nmeros 0 a 9 si el interruptor conectado a la lnea PB0 est
abierto y las letras H O-L-A si el interruptor est cerrado. El display est
conectado en el PORTD<6:0>
Puerto D como salida
a) Realizar el diagrama de flujo del programa
BUCLE:

BRNE

DELAY_NUMERO

NUMERO:

HOLA:

DELAY_HOLA

b) Escriba las instrucciones comentada


/*
* AssemblerApplication1.asm
*
* Created: 12/09/2015 10:46:41 p.m.
* Author:
*/
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0X0000
RJMP INICIO

;CARGANDO CARACTERISTICAS DE ATMEGA8


;INICIO DEL SEGMENTO DE CODIGO
;DIRECCION DE INICIO
;SALTO RELATIVO A INCIO

;..............................................................................

INICIO:
LDI R16,HIGH(RAMEND)
;CARGANDO CONFIGURACION DE LA PILA
OUT SPH,R16
;HABILITANDO PARATE ALTA DE LA PILA
LDI R16,LOW(RAMEND)
;CARGANDO CONFIGURACION DE LA PILA
OUT SPL,R16
;HABILITANDO PARTE BAJA DE LA PILA
LDI R16,$FF
;CARGANDO FF AL REGISTRO R16
OUT DDRD,R16
;CONFIGURACION DE PUERTO D COMO
SALIDA
ENTRADA

PUERTO D

LDI R16,$00
OUT DDRB,R16

;CARGANDO CEROS AL REGISTRO R16


;CONFIGURANDO PUERTO B COMO

OUT PORTD,R16
LDI R16,$FF
OUT PORTB,R16

;ENVIO DE VALOR DE R16 ALPUERTO R16


;CARGO $FF AL REGISTRO R16
;ENVIO VALOR DE REGISTRO R16 AL

;................................................................................
BUCLE:
IN R17,PINB
;CARGO ENR17 EL VALOR DEL PUERTO B
ANDI R17,$01
;BINARIO ENTRE R17 Y $01
CPI R17,$01
;COMPARANDO R17 CON $01
BREQ NUMERO
;SALTA A NUMERO SI r17=$01
RJMP HOLA
; SI ES DIFERENTE SALTA A HOLA
;...........................................................................................
NUMERO:
LDI
R16,$40
OUT
PORTD,R16
RCALL DELAY_NUM
LDI
R16,$79
OUT
PORTD,R16
RCALL DELAY_NUM
LDI
R16,$24
OUT
PORTD,R16
RCALL DELAY_NUM
LDI
R16,$30
OUT
PORTD,R16
RCALL DELAY_NUM
LDI
R16,$19
OUT
PORTD,R16
RCALL DELAY_NUM
LDI
R16,$12
OUT
PORTD,R16
RCALL DELAY_NUM
LDI
R16,$03
OUT
PORTD,R16
RCALL DELAY_NUM
LDI
R16,$78
OUT
PORTD,R16
RCALL DELAY_NUM
LDI
R16,$00
OUT
PORTD,R16
RCALL DELAY_NUM
LDI R16,$18
OUT PORTD,R16
RCALL DELAY_NUM
RJMP BUCLE

;CARGO R16 = $40


;ENVIO EL VALOR R16 AL PUERTO D
;LLAMO UN RETARDO DE 150 mS
;CARGO R16 = $79
;ENVIO EL VALOR R16 AL PUERTO D
;LLAMO UN RETARDO DE 150 mS
;CARGO R16 = $24
;ENVIO EL VALOR R16 AL PUERTO D
;LLAMO UN RETARDO DE 150 mS
;CARGO R16 = $30
;ENVIO EL VALOR R16 AL PUERTO D
;LLAMO UN RETARDO DE 150 mS
;CARGO R16 = $19
;ENVIO EL VALOR R16 AL PUERTO D
;LLAMO UN RETARDO DE 150 mS
;CARGO R16 = $12
;ENVIO EL VALOR R16 AL PUERTO D
;LLAMO UN RETARDO DE 150 mS
;CARGO R16 = $03
;ENVIO EL VALOR R16 AL PUERTO D
;LLAMO UN RETARDO DE 150 mS
;CARGO R16 = $7S
;ENVIO EL VALOR R16 AL PUERTO D
;LLAMO UN RETARDO DE 150 mS
;CARGO R16 = $00
;ENVIO EL VALOR R16 AL PUERTO D
;LLAMADA A SUBRUTINA RETARDO
;CARGO $18 AL REGISTRO R16
;ENVIA AL PUERTO R16
; LLAMADA A UN RETARDO DE 500MS

;................................................................................

HOLA:
LDI
R16,$09
;CARGO R16 = $09
OUT
PORTD,R16
;ENVIO EL VALOR R16 AL PUERTO
RCALL DELAY_HOLA ;LLAMO UN RETARDO DE 150 mS
LDI
R16,$40
;CARGO R16 = $40
OUT
PORTD,R16
;ENVIO EL VALOR R16 AL PUERTO
RCALL DELAY_HOLA ;LLAMO UN RETARDO DE 150 mS
LDI
R16,$47
;CARGO R16 = $47
OUT
PORTD,R16
;ENVIO EL VALOR R16 AL PUERTO
RCALL DELAY_HOLA ;LLAMO UN RETARDO DE 150 mS
LDI
R16,$08
;CARGO R16 = $08
OUT
PORTD,R16
;ENVIO EL VALOR R16 AL PUERTO
RCALL DELAY_HOLA ;LLAMO UN RETARDO DE 150 mS
RJMP BUCLE
;SALTO RELATIVO A BUCLE
;................................................................................

D
D
D
D

DELAY_NUM:

FOR_01:
FOR_02:
FOR_03:

IN R17,PINB
ANDI R17,$01
CPI R17,$00
BREQ HOLA
LDI R18,100

;GUARDO EN R17 EL VALOR DEL PUERTO B ANDI


;BINARIA ENTRE R17 Y $01
;COMPARO R17 Y $01
;SALTA A HOLA
;CARGAO A R17=$00

LDI R19,101

;CARGO VALOR 101 AL REGISTRO R19

LDI R20,65

; CARGO 65 AL R20

DEC R20
;DECREMENTO EN 1
BRNE FOR_03
;SI R20 ES IGUAL A CEROS
DEC R19
;DECREMENTA R19
BRNE FOR_02
;SALTA SI R19=0
DEC R18
;DECREMENTO EN 1 VALOR DE R18
BRNE FOR_01
; SALTO A FOR_01 SI R18=$00
RET
;................................................................................
DELAY_HOLA:
IN R17,PINB
ANDI R17,$01
CPI R17,$01
BREQ NUMERO
LDI R18,100

; GUARDO EN R17 VALOR PINB


;ANDI BINARIA ENTRE R17 Y $01
; COMAPRA R17 CON $01
;SALTA SI R17=$01
;CARGO R18=100

LDI R19,101

;CARGA CON $101 AL REGISTRO R19

LDI R20,65

;CARGO A R20=65

DEC R20
BRNE FOR_13
DEC R19
BRNE FOR_12
DEC
R18
BRNE FOR_11

; DECREMENTANDO R20
;SALTO A FOR_13 SI R20=$00
;DECREMENTO EN 1 REGISTRO R19
; SALTO A FOR_13 SI R19=$00
;DECREMENTO EN 1 REGISTRO R18
;SALTO A FOR:11 SI R18=$00

FOR_11:
FOR_12:
FOR_13:

RET

c) Hacer la simulacin
Cuando el pulsador esta habierto
U1

14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

ATMEGA8

Cuando el pulsador est cerrado


U1

14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

ATMEGA8

10.- Realizar un contador ascendente y descendente segn si el


interruptor conectado al PORTC.0 est abierto (ascendente ) o
cerrado ( descendente ) . Los pulsos a contarse entran desde un

pulsador conectado al PORTC.1. El nmero de pulsos es visualizado en


un display ctodo comn conectado al PORTD.
Desarrollo.
a) Realizar el diagrama de flujo del programa
Pregunta10.asm

Carga de la PILA y de Registro

INICIO

PUERTO D COMO SALIDA Y PORT C ENTRADA

BUCLE_2

SBIS

BUCLE

DESCENDENTE

ASCENDENTE

NUMERO

NUMEROS

NUMERO

BRNE

BRNE

ASC - DES

b) Escriba las instrucciones comentada

NUMEROS

/*
* PREGUNTA10.asm
*
* Created: 13/09/2015 06:36:33 a.m.
* Author:
*/
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0X0000

;CARGANDO CARACTERISTICAS DE ATMEGA8


;INICIO DEL SEGMENTO DE CODIGO
;DIRECCION DE INICIO

RJMP INICIO
;SALTO RELATIVO A INICIO
;..............................................................................
INICIO:
LDI R16,HIGH(RAMEND)
;CARGANDO CONFIGURACION DE LA PILA
OUT SPH,R16
;HABILITANDO PARTE ALTA DE LA PILA
LDI R16,LOW(RAMEND)
;CARGANDO CONFIGURACION DE LA PILA
OUT SPL,R16
;HABILITANDO PARTE BAJA DE LA PILA
LDI R16,$FF
;CARGAMOS A R16 CON UNOS
OUT DDRD,R16
;CONFIGURANDO PUERTO D COMO SALIDA
LDI R16,$00
;CARGAMOS A R16 CON CEROS
OUT DDRC,R16
;CONFIGURANDO PUERTO C COMO ENTRADA
OUT PORTD,R16
;ENVIANDO DATO DEL R16 AL PUERTO D
LDI R16,$FF
;CARGAMOS AL R16 CON 1
OUT PORTC,R16
;ENVIO EL VALOR DE R16 AL PUERTO C
LDI R18,$00
;INICIALIZACION DE R18
;...................................................................................

BUCLE_2:
BUCLE:

ETIQUETA
ASCENDENTE:

LDI R16,$40
OUT PORTD,R16

;CARGAMOS A R16 CON 40HEX


;ENVIO VALOR DE R16 AL PORT D

SBIS PINC,1
RJMP BUCLE_2

;SALTA SI PIN1 DEL PUERTO C ES UNO


;SALTO RELATIVO A BUCLE_2

SBIC PINC,0
;SALTA SI PIN0 DEL PUERTO C ES CERO
RJMP ASCENDENTE
; SALTO RELATIVO A ASCENDENTE
RJMP DESCENDENTE
;SI POR0 DE C NO ES UNO SALTA A

SBIS PINC,1
;NUEVAMENTE LEE PINC1 DE C Y SALTA SI ES UNO
RJMP INCREMENTO
;SI PIN1 DE C ES UNO SALTA INCREMENTO
RJMP BUCLE
;SI PIN1 DE C NO ES UNO SALTA A BUCLE
DESCENDENTE:
SBIS PINC,1
;LEE PIN1 DE C Y SALTA SI ES UNO
RJMP DECREMENTO ;SALTA A DECREMENTO SI PIN1 DE C ES UNO
RJMP BUCLE
; SALTO CONDICIONAL A BUCLE
;......................................................................................
INCREMENTO:

DECREMENTO:

CPI R18,$09
BREQ BUCLE
INC R18
RJMP NUMERO

;COMPARANDO VALOR DE R18 CON 9


;SALTA A BUCLE SI R18=$09
;INCREMETA AL R18
;SALTO RELATIVO A NUMERO

CPI R18,$00
;CARGANDO R18 CON CEROS
BREQ BUCLE
;SALTA A BUCLE SI R18=$00
DEC R18
; DECREMENTA R18
RJMP NUMERO
;SALTO RELATIVO A NUMERO
;.........................................................................................
NUMERO:

CPI R18,$00

;COMPARANDO R18 CON$00

BREQ CERO
CPI R18,$01
BREQ UNO
CPI R18,$02
BREQ DOS
CPI R18,$03
BREQ TRES
CPI R18,$04

;SI
;SI
;SI
;SI
;SI
;SI
;SI
;SI

SON IGUALES SALTA A CERO


NO SON IGUALES COMPARA CON $01
SON IGUALES SALTA A ETIQUETA UNO
R18 NO IGUAL A 1 ENTONCES COMPRA CON 2
R18=2 ENTONCES SALTA A ETIQUETA DOS
R18 NO IGUAL A 2 ENTONCES COMPARA CON 3
R18 ES IGUAL A 3 SALTA A ETIQUETA TRES
R18 NO ES IGUAL A 4 ENTONCES COMPARA CON

BREQ CUATRO
;SI R18 ES 4 ENTONCES SALTA A ETIQUETA CUATRO
CPI R18,$05
;SI R18 NO ES 4 ENTONCES COMPARA CON 5
BREQ CINCO
;SI R18 ES 5 SALTA A ETIQUETA CINCO
CPI R18,$06
;SI R18 NO ES 5 ENTONCES COMPARA CON 6
BREQ SEIS
;SI R18 ES 6 SALTA A ETIQUETA SEIS
CPI R18,$07
;SI R18 NO ES 6 ENTONCES COMPARA CON 7
BREQ SIETE
;SI R18 ES 7 SALTA A ETIQUETA SIETE
CPI R18,$08
;SI R18 NO ES 7 ENTONCES COMPARA CON 8
BREQ OCHO
;SI R18 ES 8 SALTA A ETIQUETA OCHO
CPI R18,$09
;SI R18 NO ES 8 ENTONCES COMPARA CON 9
BREQ NUEVE
;SI R18 ES 9 SALTA A ETIQUETA NUEVE
;................................................................................
CERO:

UNO:

DOS:

TRES:

CUATRO:

CINCO:

SEIS:

SIETE:

OCHO:

NUEVE:

LDI R16,$40
OUT PORTD,R16
RJMP BUCLE_2

;CARGAMOS A R16 CON 40HEX


;EVIANDO VALOR DE R16 A PORT D
;SALTO RELATIVO A BUCLE_2

LDI R16,$79
OUT PORTD,R16
RJMP BUCLE_2

;CARGAMOS A R16 CON 79HEX


;EVIANDO VALOR DE R16 A PORT D
;SALTO RELATIVO A BUCLE_2

LDI R16,$24
OUT PORTD,R16
RJMP BUCLE_2

;CARGAMOS A R16 CON 24HEX


;EVIANDO VALOR DE R16 A PORT D
;SALTO RELATIVO A BUCLE_2

LDI R16,$30
OUT PORTD,R16
RJMP BUCLE_2

;CARGAMOS A R16 CON 30HEX


;EVIANDO VALOR DE R16 A PORT D
;SALTO RELATIVO A BUCLE_2

LDI R16,$19
OUT PORTD,R16
RJMP BUCLE_2

;CARGAMOS A R16 CON 19HEX


;EVIANDO VALOR DE R16 A PORT D
;SALTO RELATIVO A BUCLE_2

LDI R16,$12
OUT PORTD,R16
RJMP BUCLE_2

;CARGAMOS A R16 CON 12HEX


;EVIANDO VALOR DE R16 A PORT D
;SALTO RELATIVO A BUCLE_2

LDI R16,$03
OUT PORTD,R16
RJMP BUCLE_2

;CARGAMOS A R16 CON 03HEX


;EVIANDO VALOR DE R16 A PORT D
;SALTO RELATIVO A BUCLE_2

LDI R16,$78
OUT PORTD,R16
RJMP BUCLE_2

;CARGAMOS A R16 CON 78HEX


;EVIANDO VALOR DE R16 A PORT D
;SALTO RELATIVO A BUCLE_2

LDI R16,$00
OUT PORTD,R16
RJMP BUCLE_2

;CARGAMOS A R16 CON 00HEX


;EVIANDO VALOR DE R16 A PORT D
;SALTO RELATIVO A BUCLE_2

LDI R16,$18
;CARGAMOS A R16 CON 19HEX
OUT PORTD,R16
;EVIANDO VALOR DE R16 A PORT D
RJMP BUCLE_2
;SALTO RELATIVO A BUCLE_2
;................................................................................

c) Hacer la simulacin
Cuando activador abierto contador ascendente
ACTIVADOR
PULSO

U1
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

AREF
AVCC

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

ATMEGA8

Contador descendente cuando el buton activador est cerrado.

ACTIVADOR
PULSO

U1
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC
ATMEGA8

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

Vous aimerez peut-être aussi