Académique Documents
Professionnel Documents
Culture Documents
1.
b) Escribir el programa :
.include "m8def.inc"
.cseg
.org 0x00
rjmp INICIO
INICIO:
FIEE-UNAC
LDI R16,HIGH(RAMEND); Se apunta a la posicin de la memoria
OUT SPH,R16
LDI R16,LOW(RAMEND);Stack
OUT SPL,R16
SER R16; poner a '1' los bits R16
OUT DDRD,R16; el puerto salida de datos
CBI DDRC,0; pone PC0 como entrada
Interruptor:
ldi r16,0x00
out portd,r16
SBIC PINC,0; si pinc=0 salta la instruccin
rjmp Interruptor
loop:
LDI R17,0x00
OUT PORTD,R17; Leds apagados
Rcall delay
LDI R17,0xC0
OUT PORTD,R17; led pb7,pb6 encendidos
Rcall delay
LDI R17,0xF0
OUT PORTD,R17; led pb7,pb6,pb5,pb4 encendidos
Rcall delay
LDI R17,0xFC
out portD,R17; led pb7,...,pb2 encendidos
Rcall delay
LDI R17,0xFF
Out portD,R17; todos los leds encendidos
Rcall delay
rjmp interruptor
Delay:;retardo de 1 seg
LDI R18,95
X1: LDI R19,82
X2: LDI R20,50
X3: DEC R20
BRNE X3
DEC R19
BRNE X2
DEC R18
BRNE X1
RET
FIEE-UNAC
Repite a ) y b ) 10 veces
FIEE-UNAC
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
II.
Realice la simulacin del sistema
SOLUCION:
a) Diagrama de flujo del programa:
FIEE-UNAC
b) Escribir el programa:
.include "m8def.inc"
.cseg
.org 0x00
rjmp INICIO
INICIO:
LDI R16,HIGH(RAMEND); Se apunta a la posicin de la memoria
OUT SPH,R16
LDI R16,LOW(RAMEND);Stack
OUT SPL,R16
FIEE-UNAC
SBI DDRB,0;declaramos PB0 como salida
PROGRAMA:
LDI R16,0b00000001;cargamos"1" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL pausa300;llama ala subrutina"pausa300"
LDI R16,0b00000010;cargamos"2" en el registro R16
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa300
LDI R16,0b00000001
OUT PORTB,R16
FIEE-UNAC
RCALL pausa300
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa1;llamamos a la subrutina"pausa1"
LDI R16,0b00000001;cargamos"1" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL pausa500;llamamos a la subrutina"pausa500"
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa200;llamamos a la subrutina"pausa200"
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa500
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa200
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa500
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa200
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa500
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa200
LDI R16,0b00000001
OUT PORTB,R16
RCALL pausa500
LDI R16,0b00000010
OUT PORTB,R16
RCALL pausa1;llamamos a la subrutina"pausa1"
RJMP PROGRAMA;retornamos a"PROGRAMA"
pausa200:;retardo de 200ms
LDI R18,25;carga R18 con 25
X1: LDI R19,40;carga R19 con 40
X2: LDI R20,25;carga R20 con 25
X3: DEC R20;decrementa en 1 a R20
BRNE X3;si R20 es diferente de cero, sigue decrementando (salto a "x3"), si R20 = 0, sigue
DEC R19;decrementa en 1 a R19
BRNE X2;si R19 es diferente de cero, sigue decrementando (salto a "x2"), si R19 = 0, sigue
DEC R18;decrementa en 1 a R18
BRNE X1;si R18 es diferente de cero, sigue decrementando (salto a "x1"), si R18 = 0, sigue
RET;retorno a la linea siguiente
pausa300:;retardo de 300ms
LDI R21,30;carga R21 con 30
Y1: LDI R22,42;carga R22 con 42
Y2: LDI R23,50;carga R23 con 50
Y3: DEC R23;decrementa en 1 a R23
BRNE Y3;si R23 es diferente de cero, sigue decrementando (salto a "Y3"), si R23 = 0, sigue
DEC R22;decrementa en 1 a R22
BRNE Y2;si R22 es diferente de cero, sigue decrementando (salto a "Y2"), si R22 = 0, sigue
DEC R21;decrementa en 1 a R21
BRNE Y1;si R21 es diferente de cero, sigue decrementando (salto a "Y1"), si R21 = 0, sigue
RET;retorno a la linea siguiente
pausa500:;retardo de 500ms
FIEE-UNAC
LDI R24,50;carga R24 con 50
Z1: LDI R25,75;carga R25 con 75
Z2: LDI R26,50;carga R26 con 50
Z3: DEC R26;decrementa en 1 a R26
BRNE Z3;si R26 es diferente de cero, sigue decrementando (salto a "Z3"), si R26 = 0, sigue
DEC R25;decrementa en 1 a R25
BRNE Z2;si R25 es diferente de cero, sigue decrementando (salto a "Z2"), si R25 = 0, sigue
DEC R24;decrementa en 1 a R24
BRNE Z1;si R24 es diferente de cero, sigue decrementando (salto a "Z1"), si R24 = 0, sigue
RET;retorno a la linea siguiente
pausa1:;retardo de 1seg
LDI R27,70;carga R27 con 70
S1: LDI R28,60;carga R28 con 60
S2: LDI R29,60;carga R29 con 60
S3: DEC R29;decrementa en 1 a R29
BRNE S3;si R29 es diferente de cero, sigue decrementando (salto a "S3"), si R29 = 0, sigue
DEC R28;decrementa en 1 a R28
BRNE S2;si R28 es diferente de cero, sigue decrementando (salto a "S2"), si R28 = 0, sigue
DEC R27;decrementa en 1 a R27
BRNE S1;si R27 es diferente de cero, sigue decrementando (salto a "S1"), si R27 = 0, sigue
RET;retorno a la linea siguiente
c) Realizar la simulacin:
No Compilado
Compilado
FIEE-UNAC
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.
a) Realizar el diagrama de flujo del programa
FIEE-UNAC
b) Escriba la programacin:
.include "m8def.inc"
.cseg
.org 0x00
rjmp inicio
inicio:
LDI R16,HIGH(RAMEND); Se apunta a la posicin de la memoria
OUT SPH,R16
LDI R16,LOW(RAMEND);Stack
OUT SPL,R16
SBI DDRB,0;declara como salida a PB0
SBI DDRB,1;declara como salida a PB1
PROGRAMA:
LDI R16,0b00000001;cargamos"1" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL PAUSA;llama ala subrutina"PAUSA"
LDI R16,0b00000010;cargamos"2" en el registro R16
10
FIEE-UNAC
OUT PORTB,R16
RCALL PAUSA
RJMP PROGRAMA;retorna a"PROGRAMA"
PAUSA:
LDI R17,100;carga R17 con 100
ZZ:LDI R18,150;carga R18 con 150
YY:LDI R19,100;carga R19 con 100
XX:DEC R19;decrementa en 1 a R19
BRNE XX;si R19 es diferente de cero, sigue decrementando (salto a "XX"), si
R19 = 0, sigue
DEC R18;decrementa en 1 a R18
BRNE YY;si R18 es diferente de cero, sigue decrementando (salto a "YY"), si
R18 = 0, sigue
DEC R17;decrementa en 1 a R17
BRNE ZZ;si R17 es diferente de cero, sigue decrementando (salto a "ZZ"), si
R17 = 0, sigue
RET;retorno a la linea siguiente
c) Realizar la simulacin :
Sin Compilar
Compilado
11
FIEE-UNAC
12
FIEE-UNAC
b) Escriba la programacin:
.include "m8def.inc"
.cseg
.org 0x00
rjmp inicio
inicio:
LDI R16,HIGH(RAMEND); Se apunta a la posicin de la memoria
OUT SPH,R16
LDI R16,LOW(RAMEND);Stack
OUT SPL,R16
SER R16; ponemos en "1" todos los bit de R16
OUT DDRD,R16; declaramos como salida al puerto D
CBI DDRB,0; declaramos como entrada PB0
PROGRAMA:
LDI R16,0x00
OUT PORTD,R16
13
FIEE-UNAC
SBIC PINB,0; lee el estado del pinB0=0,salta una linea
RCALL PROGRAMA; llama subrutina "PROGRAMA"
RCALL LUCES1; llama subrutina "LUCES1"
LUCES1:
LDI R17,0b10101010; carga "10101010" en R17
OUT PORTD,R17; muestra por el puerto D el valor de R17
RCALL PAUSA2; llama subrutina "PAUSA2"
LDI R17,0b01010101; carga "01010101" en R17
OUT PORTD,R17; muestra por el puerto D el valor de R17
RCALL PAUSA2
LDI R17,0b10101010
OUT PORTD,R17
RCALL PAUSA2
LDI R17,0b01010101
OUT PORTD,R17
RCALL PAUSA2
LDI R17,0b10101010
OUT PORTD,R17
RCALL PAUSA2
LDI R17,0b01010101
OUT PORTD,R17
RCALL PAUSA2
LDI R17,0b10101010
OUT PORTD,R17
RCALL PAUSA2
LDI R17,0b01010101
OUT PORTD,R17
RCALL PAUSA2
LDI R17,0b10101010
OUT PORTD,R17
RCALL PAUSA2
LDI R17,0b01010101
OUT PORTD,R17
RCALL PAUSA3; llama a la subrutina "PAUSA3"
RCALL LUCES2; llama a la subrutina "LUCES2"
LUCES2:
LDI R17,0b00000001; carga "00000001" en R17
OUT PORTD,R17; muestra por el puerto D el valor de R17
RCALL PAUSA1; llama a la subrutina "PAUSA1"
LDI R17,0b00000010; carga "00000010" en R17
OUT PORTD,R17; muestra por el puerto D el valor de R17
RCALL PAUSA1
LDI R17,0b00000100
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b00001000
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b00010000
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b00100000
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b01000000
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b10000000
14
FIEE-UNAC
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b01000000
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b00100000
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b00010000
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b00001000
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b00000100
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b00000010
OUT PORTD,R17
RCALL PAUSA1
LDI R17,0b00000001
OUT PORTD,R17
RCALL PAUSA1
RJMP PROGRAMA; retorna a "PROGRAMA"
PAUSA2:
LDI R21,50; carga R21 con 50
AA:LDI R22,50; carga R22 con 50
BB:LDI R23,70; carga R23 con 70
CC:DEC R23;decrementa en 1 a R23
BRNE CC;si R23 es diferente de cero, sigue decrementando (salto a "CC"), si R23
= 0, sigue
DEC R22;decrementa en 1 a R19
BRNE BB;si R22 es diferente de cero, sigue decrementando (salto a "BB"), si R22
= 0, sigue
DEC R21;decrementa en 1 a R19
BRNE AA;si R21 es diferente de cero, sigue decrementando (salto a "AA"), si R21
= 0, sigue
RET;retorno a la linea siguiente
PAUSA1:
LDI R24,20; carga R24 con 20
XX:LDI R25,40; carga R25 con 40
YY:LDI R26,30; carga R26 con 30
ZZ:DEC R26;decrementa en 1 a R26
BRNE ZZ;si R26 es diferente de cero, sigue decrementando (salto a "ZZ"), si R26
= 0, sigue
DEC R25;decrementa en 1 a R25
BRNE YY;si R25 es diferente de cero, sigue decrementando (salto a "YY"), si R25
= 0, sigue
DEC R24;decrementa en 1 a R24
BRNE XX;si R24 es diferente de cero, sigue decrementando (salto a "XX"), si R24
= 0, sigue
RET;retorno a la linea siguiente
PAUSA3:
LDI R27,80; carga R27 con 80
PP:LDI R28,85; carga R28 con 85
QQ:LDI R29,90; carga R29 con 90
RR:DEC R29;decrementa en 1 a R29
15
FIEE-UNAC
BRNE RR;si R29 es diferente de cero, sigue decrementando (salto a "RR"), si R29
= 0, sigue
DEC R28;decrementa en 1 a R28
BRNE QQ;si R28 es diferente de cero, sigue decrementando (salto a "QQ"), si
R28 = 0, sigue
DEC R27;decrementa en 1 a R27
BRNE PP;si R27 es diferente de cero, sigue decrementando (salto a "PP"), si R27
= 0, sigue
RET;retorno a la linea siguiente
c)
Hacer la simulacin:
No compilado
Compilado
16
FIEE-UNAC
17
FIEE-UNAC
b) Escriba la programacin:
.include "m8def.inc"
.cseg
.org 0x00
rjmp inicio
inicio:
LDI R16,HIGH(RAMEND); Se apunta a la posicin de la memoria
OUT SPH,R16
LDI R16,LOW(RAMEND);Stack
OUT SPL,R16
18
FIEE-UNAC
SER R16; poner a "1" los bits de R16
OUT DDRB,R16; declara como salida al puerto B
CBI DDRC,0; declara como entrada a PC0
PROGRAMA:
LDI R16,0x00
OUT PORTB,R16
SBIC PINC,0; lee el estado de PC0=0,salta una linea
RCALL JUEGODELEDS; llama a la subrutina "JUEGODELEDS"
RCALL PROGRAMA; llama a la subrutina "PROGRAMA"
JUEGODELEDS:
LDI R16,0xFF;cargamos"FF" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL PAUSA; llama a la subrutina "PAUSA"
LDI R16,0x7E;cargamos"7E" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL PAUSA
LDI R16,0x3C;cargamos"3C" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL PAUSA
LDI R16,0x18;cargamos"18" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL PAUSA
LDI R16,0x00;cargamos"00" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL PAUSA
RJMP PROGRAMA
PAUSA:
LDI R18,50;carga R18 con 50
X1: LDI R19,40;carga R19 con 40
X2: LDI R20,25;carga R20 con 25
X3: DEC R20;decrementa en 1 a R20
BRNE X3;si R20 es diferente de cero, sigue decrementando (salto a "X3"), si
R20 = 0, sigue
DEC R19;decrementa en 1 a R19
BRNE X2;si R19 es diferente de cero, sigue decrementando (salto a "X2"), si
R19 = 0, sigue
DEC R18;decrementa en 1 a R18
BRNE X1;si R18 es diferente de cero, sigue decrementando (salto a "X1"), si
R18 = 0, sigue
RET;retorno a la linea siguiente
c) Hacer la simulacin:
No Compilado
19
FIEE-UNAC
Compilado
20
FIEE-UNAC
b) Escriba la programacin:
.include "m8def.inc"
.cseg
.org 0x00
rjmp inicio
inicio:
LDI R16,HIGH(RAMEND); Se apunta a la posicin de la memoria
OUT SPH,R16
LDI R16,LOW(RAMEND);Stack
OUT SPL,R16
SER R16; poner a "1" los bits de R16
21
FIEE-UNAC
OUT DDRB,R16; declara como salida al puerto B
CBI DDRC,0; declara como entrada a PC0
PROGRAMA:
LDI R16,0x00
OUT PORTB,R16
SBIC PINC,0; lee el estado de PC0=0,salta una linea
RCALL PROGRAMA; llama a la subrutina "PROGRAMA"
RCALL JUEGODELEDS; llama a la subrutina "JUEGODELEDS"
JUEGODELEDS:
LDI R16,0xFF;cargamos"FF" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL PAUSA
LDI R16,0x7E;cargamos"7E" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL PAUSA; llama a la subrutina "PAUSA"
LDI R16,0x3C;cargamos"3C" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL PAUSA
LDI R16,0x18;cargamos"18" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL PAUSA
LDI R16,0x00;cargamos"00" en el registro R16
OUT PORTB,R16;mostramos por el puerto B el valor de R16
RCALL PAUSA
RJMP PROGRAMA; retorna a "PROGRAMA"
PAUSA:
LDI R18,50;carga R18 con 50
X1: LDI R19,40;carga R19 con 40
X2: LDI R20,25;carga R20 con 25
X3: DEC R20;decrementa en 1 a R20
BRNE X3;si R20 es diferente de cero, sigue decrementando (salto a "X3"), si
R20 = 0, sigue
DEC R19;decrementa en 1 a R19
BRNE X2;si R19 es diferente de cero, sigue decrementando (salto a "X2"), si
R19 = 0, sigue
DEC R18;decrementa en 1 a R18
BRNE X1;si R18 es diferente de cero, sigue decrementando (salto a "X1"), si
R18 = 0, sigue
RET;retorno a la linea siguiente
c) Hacer la simulacin:
Sin Compilar
22
FIEE-UNAC
Compilado
23
FIEE-UNAC
a) Realizar el diagrama de flujo del programa
b) Escriba la programacin:
.include "m8def.inc"
.cseg
.org 0x00
rjmp inicio
inicio:
LDI R16,HIGH(RAMEND); Se apunta a la posicin de la memoria
OUT SPH,R16
LDI R16,LOW(RAMEND);Stack
OUT SPL,R16
cbi ddrc,0; declara PC0 como entrada
cbi ddrc,1; declara PC1 como entrada
ser r16; pone a "1" los bits del r16
24
FIEE-UNAC
out ddrd,r16;declara como salida al puerto D
programa:
ldi r16,0x00
out portd,r16
sbic pinc,0; lee el estado del PC0=0, salta una linea
rcall prendido1; llama a "prendido1"
rcall apagado1; llama a "apagado1"
apagado1:
sbic pinc,1; lee el estado del PC1=0, salta una linea
rcall ledsintermitentes; llama a "ledsintermitentes"
rcall apagadototal; llama a "apagadototal"
apagadototal:
ldi r16,0x00
out portd,r16
rjmp programa; retorna a "programa"
ledsintermitentes:
LDI R17,0b10101010
OUT PORTD,R17
RCALL PAUSA; llama a " PAUSA"
LDI R17,0b01010101
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b10101010
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b01010101
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b10101010
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b01010101
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b10101010
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b01010101
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b10101010
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b01010101
OUT PORTD,R17
rjmp programa; retorna a "programa"
prendido1:
sbic pinc,1; lee el estado del PC1=0, salta una linea
rcall juegodeleds; llama a "juegodeleds"
rcall autofantastico; llama a "autofantastico"
autofantastico:
LDI R17,0b00000001
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b00000010
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b00000100
25
FIEE-UNAC
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b00001000
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b00010000
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b00100000
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b01000000
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b10000000
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b01000000
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b00100000
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b00010000
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b00001000
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b00000100
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b00000010
OUT PORTD,R17
RCALL PAUSA
LDI R17,0b00000001
OUT PORTD,R17
rjmp programa; retorna a "programa"
juegodeleds:
LDI R16,0xFF
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x7E
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x3C
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x18
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x00
OUT PORTD,R16
RCALL PAUSA
rjmp programa; retorna a "programa"
PAUSA:
LDI R18,50;carga R18 con 50
X1: LDI R19,40;carga R19 con 40
26
FIEE-UNAC
X2: LDI R20,25;carga R20 con 25
X3: DEC R20;decrementa en 1 a R20
BRNE X3;si R20 es diferente de cero, sigue decrementando (salto a "X3"), si
R20 = 0, sigue
DEC R19;decrementa en 1 a R19
BRNE X2;si R19 es diferente de cero, sigue decrementando (salto a "X2"), si
R19 = 0, sigue
DEC R18;decrementa en 1 a R18
BRNE X1;si R18 es diferente de cero, sigue decrementando (salto a "X1"), si
R18 = 0, sigue
RET;retorno a la linea siguiente
c) Hacer la simulacin:
Sin Compilar
Compilado
Estado 0-0(apagado)
Estado1-0(leds intermitentes)
27
FIEE-UNAC
Estado0-1(autofantastico)
Estado1-1(juego
leds)
de
28
FIEE-UNAC
b) Escriba la programacin:
.include "m8def.inc"
.cseg
.org 0x00
rjmp inicio
inicio:
ldi r16, high(ramend); stack
out sph, r16;
ldi r16, low(ramend); si solo se desea simular
out spl, r16;
ldi r16, 0b00000011; cargamos el registro R16
out ddrb, r16; configuramos el puerto B como salida de datos
cbi ddrc, 0; configuro PC0 como entrada, BP
cbi ddrc, 1; configuro PC1 como entrada; BM
cbi ddrc, 2; configuro PC2 como entrada; BI
cbi ddrc, 3; configuro PC3 como entrada; S
interruptor:
sbic pinc,0; lee estado del PC0=0, salta una linea
rjmp interruptor2; retorna a interruptor2
rjmp interruptor3; retorna a interruptor3
interruptor2:
sbic pinc,2; lee el estado del PC2=0, salta una linea
rjmp interruptor; retorna a interruptor
rjmp bucle2; retorna a bucle2
29
FIEE-UNAC
interruptor3:
sbic pinc,2; lee el estado del PC2=0, salta una linea
rjmp bucle;
rjmp interruptor
bucle:
ldi r17,0b00000010
out portb,r17
rcall analisis1; llama a analisis1
rcall analisis2; llamada a "analisis2"
rjmp bucle
bucle2:
ldi r17,0b00000010
out portb,r17
sbic pinc,2; lee el estado de PC2=0, salta una linea
rjmp analisis3; retorna a analisis3
rjmp bucle2; retorna a bucle2
analisis1:
sbic pinc,1; lee el estado del PC1=0, salta una linea
ret; si no lo pulso, retorna a la linea siguiente de llamar a "analisis1"
cbi portb, 1; pone a 0 la salida PB1
cbi portb, 0; pone a 0 la salida PB0
rjmp interruptor
analisis2:
sbic pinc,3; lee el estado de PC3=0, salta una linea
ret; si no lo pulso, retorna a la linea siguiente de llamar a "analisis1"
cbi portb, 1; pone a 0 la salida PB1
cbi portb, 0; pone a 0 la salida PB0
rjmp interruptor
analisis3:
cbi portb, 1; pone a 0 la salida PB1
cbi portb, 0; pone a 0 la salida PB0
rjmp interruptor
c) Hacer la simulacin:
Sin Compilar
Compilado
30
FIEE-UNAC
31
FIEE-UNAC
b) Escriba la programacin:
.include "m8def.inc"
.cseg
.org 0x00
rjmp inicio
inicio:
LDI R16,HIGH(RAMEND); Se apunta a la posicin de la memoria
OUT SPH,R16
LDI R16,LOW(RAMEND);Stack
OUT SPL,R16
32
FIEE-UNAC
SER R16; pone en "1" todos los bits de R16
OUT DDRD,R16; declara al puero D como salida
CBI DDRB,0; declara PB0como entrada
LDI R16,0x00
OUT PORTD,R16
PROGRAMA:
SBIC PINB,0; lee PB0=0, salta una linea
RCALL CONTEO; llama a "CONTEO"
RCALL HOLA; llama a "HOLA"
CONTEO:
LDI R16,0x3F
OUT PORTD,R16
RCALL PAUSA; llama a "PAUSA"
LDI R16,0x06
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x5B
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x4F
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x66
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x6D
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x7D
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x07
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x7F
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x6F
OUT PORTD,R16
RCALL PAUSA
RJMP PROGRAMA; retorna a "PROGRAMA"
HOLA:
LDI R16,0x76
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x3F
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x38
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x77
OUT PORTD,R16
RCALL PAUSA
RJMP PROGRAMA; retorna a "PROGRAMA"
PAUSA:
LDI R17,95; carga R17 con 95
ZZ:LDI R18,82; carga R18 con 82
33
FIEE-UNAC
YY:LDI R19,50; carga R19 con 50
XX:DEC R19;decrementa en 1 a R19
BRNE XX;si R19 es diferente de cero, sigue decrementando (salto a "XX"), si R19
= 0, sigue
DEC R18;decrementa en 1 a R18
BRNE YY;si R18 es diferente de cero, sigue decrementando (salto a "YY"), si R18
= 0, sigue
DEC R17;decrementa en 1 a R17
BRNE ZZ;si R17 es diferente de cero, sigue decrementando (salto a "ZZ"), si R17
= 0, sigue
RET;retorno a la linea siguiente
c) Hacer la simulacin:
Sin Compilar
Conteo en 1
34
FIEE-UNAC
Hola en 0
35
FIEE-UNAC
b) Escriba la programacin:
.include "m8def.inc"
.cseg
.org 0x00
rjmp inicio
inicio:
LDI R16,HIGH(RAMEND); Se apunta a la posicin de la memoria
OUT SPH,R16
LDI R16,LOW(RAMEND);Stack
36
FIEE-UNAC
OUT SPL,R16
SER R16; pone en "1"a todos los bits de R16
OUT DDRD,R16;declara como salida al puerto D
CBI DDRC,0; declara como entrada PC0
CBI DDRC,1; declara como entrada PC1
PROGRAMA:
LDI R16,0x3F
OUT PORTD,R16
SBIC PINC,0; lee estado de PC0=0, salta una linea
RCALL ASCENDENTE; llama a "ASCENDENTE"
RCALL DESCENDENTE; llama a "DESCENDENTE"
ASCENDENTE:
sbic pinc,1; lee estado de PC1=0, salta una linea
rcall aumento2; llama a "aumento2"
rcall aumento1; llama a "aumento1"
aumento1:
LDI R16,0x3F
OUT PORTD,R16
RCALL PAUSA; llama a "PAUSA"
LDI R16,0x06
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x5B
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x4F
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x66
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x6D
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x7D
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x07
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x7F
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x6F
OUT PORTD,R16
RCALL PAUSA
RJMP PROGRAMA; retorna a "PROGRAMA"
aumento2:
LDI R16,0x3F
OUT PORTD,R16
RCALL PAUSA
RJMP PROGRAMA
DESCENDENTE:
sbic pinc,1; lee estado del PC1=0, salta una linea
rcall deciende2; llama a "deciende2"
rcall deciende1; llama a "deciende1"
deciende1:
LDI R16,0x6F
37
FIEE-UNAC
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x7F
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x07
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x7D
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x6D
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x66
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x4F
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x5B
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x06
OUT PORTD,R16
RCALL PAUSA
LDI R16,0x3F
OUT PORTD,R16
RCALL PAUSA
RJMP PROGRAMA; retorna a "PROGRAMA"
deciende2:
LDI R16,0x3F
OUT PORTD,R16
RCALL PAUSA
RJMP PROGRAMA; retorna a "PROGRAMA"
PAUSA:
LDI R17,95;carga R17 con 95
ZZ:LDI R18,80;carga R18 con 80
YY:LDI R19,50;carga R19 con 50
XX:DEC R19;decrementa en 1 a R19
BRNE XX ;si R19 es diferente de cero, sigue decrementando (salto a "XX"), si
R19 = 0, sigue
DEC R18;decrementa en 1 a R18
BRNE YY ;si R18 es diferente de cero, sigue decrementando (salto a "YY"),
DEC R17;decrementa en 1 a R17
BRNE ZZ ;si R17 es diferente de cero, sigue decrementando (salto a "ZZ"), si
R17 = 0, sigue
RET;retorno a la linea siguiente
c) Hacer la simulacin:
Sin Compilar
38
FIEE-UNAC
Compilado
Estado 01-ascendente
Estado 00-descendente
39