Study on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Solucion de practica1 calificada microcontroladores
1. UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE IGENIERIAELECTRONICA
CURSO: MICROCONTROLADORES
TEMA: SOLUCIONARIO DE PRACTICA CALIFICADA N°1
ALUMNO: TINEO QUISPE ROLAN
PROFESOR: MSc-ING.JACOB ASTOCONDOR VILLAR
CICLO : 6TO
CODIGO: 1223220597
2015
3. B.- ESCRIBIR EL PROGRAMA; COMENTE CADA INSTRUCCIÓN
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0x0000
. RJMP INICIO
.ORG 0x0020
INICIO: LDI R16,HIGH(RAMEND) ; SE APUNTA A LA
OUT SPH,R16 ; POCICION DE
LDI R16,LOW(RAMEND) ; MEMORIA STACK
OUT SPL,R16
;-----------------------------------------------------------------------------------
; DECLARO LA ENTRADA Y SALIDA |
; |
;-----------------------------------------------------------------------------------
CBI DDRC,PC0 ; DECLARO EL BIT PC0 COMO ENTRADA
LDI R17,255 ; CARGO UN INMEDIATO CON 255 QUE ES EQUIVALENTE A 0b11111111
OUT DDRD,R17 ; DECLARO EL PUERTO D COMO SALIDA
;-----------------------------------------------------
RJMP INTERRUPCION ; SALTO A INTERRUPCION
INTERRUPCION:
SBIC PINC,PC0 ; PREGUNTO EL ESTADO DE PC0 SI ES CERO SALTA UNA LINEA
RJMP INTERRUPCION ; SI ES UNO LOGICO EL ESTADO DE PC0 SALTA A INTERRUPCION
X1: LDI R18,0 ; CARGO CERO EN REGISTRO R18
OUT PORTD,R18 ; LO MUESTRO POR EL PUERTO D EL VALOR DE R18
RCALL DELAY ; LLAMO A UNA SUBRRUTINA PARA HACER UN RETARDO EN EL MUESTREO
LDI R18,192 ; CARGO EL REGISTRO R18 CON 192 EN DECIMAL QUE ES IGUAL
0b11000000
OUT PORTD,R18 ; LO MUESTRO POR EL PUERTO D EL VALOR DE R18
RCALL DELAY ; LLAMO A UNA SUBRRUTINA PARA HACER UN RETARDO EN EL MUESTREO
LDI R18,240 ; CARGO EL REGISTRO R18 CON 240 EN DECIMAL QUE ES IGUAL
0b11110000
OUT PORTD,R18 ; LO MUESTRO POR EL PUERTO D EL VALOR DE R18
RCALL DELAY ; LLAMO A UNA SUBRRUTINA PARA HACER UN RETARDO EN EL MUESTREO
LDI R18,252 ; CARGO EL REGISTRO R18 CON 252 EN DECIMAL QUE ES IGUAL 0b11111100
OUT PORTD,R18 ; LO MUESTRO POR EL PUERTO D EL VALOR DE R18
RCALL DELAY ; LLAMO A UNA SUBRRUTINA PARA HACER UN RETARDO EN EL MUESTREO
LDI R18,255 ; CARGO EL REGISTRO R18 CON 255 EN DECIMAL QUE ES IGUAL 0b11111111
OUT PORTD,R18 ;LO MUESTRO POR EL PUERTO D EL VALOR DE R18
RCALL DELAY ; LAMO A UNA SUBRRUTINA PARA HACER UN RETARDO EN EL MUESTREO
RJMP X1 ; SALTO A LA ETIQUETA X1 PARA ENPEZAR DE NUEVO LA SECUENCIA
;-----------------------------------------------------------------------------------
; RETARDO DE UN SEGUNDO |
; |
;-----------------------------------------------------------------------------------
DELAY: LDI R16,150 ; CARGO AL REGISTRO R16 CON 150 DECIMAL
Y0: LDI R17,45 ; CARGO AL REGISTRO R17 CON 45 DECIMAL
Y1: LDI R18,50 ; CARGO AL REGISTRO R18 CON 50 DECIMAL
Y2: DEC R18 ; DECREMENTAR EN 1 A R18
BRNE Y2 ;MIENTRAS QUE SEA DIFERENTE DE CERO R18 SALATA A LA ETIQUETA Y2
DEC R17 ; DECREMENTAR EN 1 A R17
BRNE Y1 ; MIENTRAS QUE SEA DIFERENTE DE CERO R17 SALATA A LA ETIQUETA Y1
4. DEC R16 ; DECREMENTAR EN 1 A R16
BRNE Y0 ; MIENTRAS QUE SEA DIFERENTE DE CERO R16 SALATA A LA ETIQUETA Y0
RET ; RETORNAR A LA SIGUIENTE LINEA DE DONDE FUE LLAMADO
C.- PRESENTAR EL CIRCUITO DEJANDO LISTO PARA HACER PRUEBAS EN EL
LABORATORIO
D.- SIMULAR EL FUNCIONAMIENTO DE DICHO CIRCUITO CON EL SOFTWARE PROTEUS
PB0/ICP1
14
PB1/OC1A
15
PB2/SS/OC1B
16
PB3/MOSI/OC2
17
PB4/MISO
18
PB5/SCK
19
PB6/TOSC1/XTAL1
9
PB7/TOSC2/XTAL2
10
PC6/RESET
1
PD0/RXD
2
PD1/TXD
3
PD2/INT0
4
PD3/INT1
5
PD4/T0/XCK
6
PD5/T1
11
PD6/AIN0
12
PD7/AIN1
13
PC0/ADC0
23
PC1/ADC1
24
PC2/ADC2
25
PC3/ADC3
26
PC4/ADC4/SDA
27
PC5/ADC5/SCL
28
AREF
21
AVCC
20
U1
ATMEGA8
R1
330
R2
330
R3
330
R4
330
R5
330
R6
330
R7
330
R8
330
D1
LED-YELLOW
D2
LED-YELLOW
D3
LED-YELLOW
D4
LED-YELLOW
D5
LED-YELLOW
D6
LED-YELLOW
D7
LED-YELLOW
D8
LED-YELLOW
R9
10k PULSADOR
PROBLEMA 1
PB0/ICP1
14
PB1/OC1A
15
PB2/SS/OC1B
16
PB3/MOSI/OC2
17
PB4/MISO
18
PB5/SCK
19
PB6/TOSC1/XTAL1
9
PB7/TOSC2/XTAL2
10
PC6/RESET
1
PD0/RXD
2
PD1/TXD
3
PD2/INT0
4
PD3/INT1
5
PD4/T0/XCK
6
PD5/T1
11
PD6/AIN0
12
PD7/AIN1
13
PC0/ADC0
23
PC1/ADC1
24
PC2/ADC2
25
PC3/ADC3
26
PC4/ADC4/SDA
27
PC5/ADC5/SCL
28
AREF
21
AVCC
20
U1
ATMEGA8
R1
330
R2
330
R3
330
R4
330
R5
330
R6
330
R7
330
R8
330
D1
LED-YELLOW
D2
LED-YELLOW
D3
LED-YELLOW
D4
LED-YELLOW
D5
LED-YELLOW
D6
LED-YELLOW
D7
LED-YELLOW
D8
LED-YELLOW
R9
10k PULSADOR
PROBLEMA 1
5. PROBLEMA 2.-
HACEMOS DIAGRAMA DE FLUJO PARA CALCULAR LOS TIEMPOS DE RETARDO DE UN LAZO, DOS LAZO Y
TRES LAZOS PARA HACER PARPADEAR LO IMPORTANTE ES HACER RETARDOS PRECISOS Y CON LAS
FORMULAS APROXIMAMOS BASTANTE A LO DESEADO LO DEMAS SOLO ES SACAR VALOR UNO LOGICO Y
HACER RETARDO Y LUEGO SACAR CERO LOGICO Y HACER RETARDO Y REPETIR CUANTAS VECES SEA
NECESARIO
6.
7.
8. NOS PERCATAMOS QUE CON LAZO DE TRES APROXIMAMOS A 3.00030ms DE RETARDO
A y b:
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0x0000
. RJMP INICIO
.ORG 0x0020
INICIO: LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
;-----------------------------------------------------
; DECLARO SALIDA |
;-----------------------------------------------------
SBI DDRB,PB0; PONGO UNO LOGICO EN PB0
LDI R17,0
;-----------------------------------------------------
; ENCIENDO Y APAGO LED CADA 300ms SOLO 10 VECES |
;-----------------------------------------------------
L1: SBI PORTB,PB0; SACO UNO LOGICO POR PB0 Y LO MUESTRO
RCALL DELAY_300ms; LLAMO UN TIEMPO DE RETARDO PARA MOSTRAR EL ENCENDIDO
CBI PORTB,PB0; SACO CERO LOGICO POR PBO Y LO MUESTRO
RCALL DELAY_300ms; LLAMO UN TIEMPO DE RETARDO PARA MOSTRAR EL APAGADO
INC R17; INCREMENTO EN UNO AL REGISTRO R17
CPI R17,10 ;COMPARO R17 CON 10 EN DECIMAL
BREQ APAGADO_TOTAL ; SI ES QUE R17 QUE ME INDICA LA CANTIDAD DE
; PRENDIDO Y APAGO ES IGUAL A 10 SALTA A APAGADO_TOTAL
RJMP L1 ;MIENTRA NO CUMPLA LO ANTERIOR SALTAR A ETIQUETA L1
;----------------------------------------------------
; BUCLE INFINITO |
;----------------------------------------------------
APAGADO_TOTAL: CLR R17 ; BORRO R17
CBI PORTB,PB0 ; SACO CERO LOGICO POR PB0 Y LO MUESTRO
RJMP APAGADO_TOTAL ; SALTA A ETIQUETA APAGADO_TOTAL
;--------------------------------------------------
; UTILIZAREMOS LA FORMULITA DE LAZO DE TRES PARA |
; CALCULAR EL TIEMPITO DE RETARDO |
; CARGAREMOS A LOS REGISTROS DE LA SIGUIENTE MODO: |
; 45;46;49 EN ESTE ORDEN Y NOS DARA APROXIMADAMENTE |
; UN TIEMPO DE 3.00030ms |
;--------------------------------------------------
DELAY_300ms: LDI R18,45;
X0: LDI R19,46
X1: LDI R20,49
X2: DEC R20
BRNE X2
DEC R19
BRNE X1
DEC R18
BRNE X0
RET
9. C y d:
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0x0000
. RJMP INICIO
.ORG 0x0020
INICIO: LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
;-----------------------------------------------------
; DECLARO SALIDA |
;-----------------------------------------------------
SBI DDRB,PB0; PONGO UNO LOGICO EN PB0
LDI R17,0
;-----------------------------------------------------
; ENCIENDO DURANTE 500ms Y APAGADO DURANTE 200ms |
; TODO ESTO DURANTE UN PERIODO DE 5 VECES |
;-----------------------------------------------------
L1: SBI PORTB,PB0; SACO UNO LOGICO POR PB0 Y LO MUESTRO
RCALL DELAY_500ms; LLAMO UN TIEMPO DE RETARDO PARA MOSTRAR EL ENCENDIDO
CBI PORTB,PB0; SACO CERO LOGICO POR PBO Y LO MUESTRO
RCALL DELAY_200ms; LLAMO UN TIEMPO DE RETARDO PARA MOSTRAR EL APAGADO
INC R17; INCREMENTO EN UNO AL REGISTRO R17
CPI R17,5; COMPARO R17 CON 5 EN DECIMAL
BREQ APAGADO_TOTAL ; SI ES QUE R17 QUE ME INDICA LA CANTIDAD DE
; PRENDIDO Y APAGO ES IGUAL A 5 SALTA A APAGADO_TOTAL
RJMP L1 ;MIENTRA NO CUMPLA LO ANTERIOR SALTAR A ETIQUETA L1
;----------------------------------------------------
; BUCLE INFINITO |
;----------------------------------------------------
APAGADO_TOTAL: CLR R17 ; BORRO R17
CBI PORTB,PB0 ; SACO CERO LOGICO POR PB0 Y LO MUESTRO
RJMP APAGADO_TOTAL ; SALTA A ETIQUETA APAGADO_TOTAL
;--------------------------------------------------
; CARGAREMOS A LOS REGISTROS DE LA SIGUIENTE MODO: |
; 45;46;49 EN ESTE ORDEN Y NOS DARA APROXIMADAMENTE |
; UN TIEMPO DE 300ms |
;--------------------------------------------------
DELAY_300ms: LDI R18,45
X0: LDI R19,46
X1: LDI R20,49
X2: DEC R20
BRNE X2
DEC R19
BRNE X1
DEC R18
BRNE X0
RET
10. ;--------------------------------------------------
; CARGAREMOS A LOS REGISTROS DE LA SIGUIENTE MODO: |
; 73;51;46 EN ESTE ORDEN Y NOS DARA APROXIMADAMENTE |
; UN TIEMPO DE 500ms |
;--------------------------------------------------
DELAY_500ms: LDI R18,73
Y0: LDI R19,51
Y1: LDI R20,46
Y2: DEC R20
BRNE Y2
DEC R19
BRNE Y1
DEC R18
BRNE Y0
RET
;--------------------------------------------------
; CARGAREMOS A LOS REGISTROS DE LA SIGUIENTE MODO: |
; 42;40;40 EN ESTE ORDEN Y NOS DARA APROXIMADAMENTE |
; UN TIEMPO DE 200ms |
;--------------------------------------------------
DELAY_200ms: LDI R18,42
Z0: LDI R19,40
Z1: LDI R20,40
Z2: DEC R20
BRNE Z2
DEC R19
BRNE Z1
DEC R18
BRNE Z0
RET
;--------------------------------------------------
CIRCUITO EN PROTEUS
PB0/ICP1
14
PB1/OC1A
15
PB2/SS/OC1B
16
PB3/MOSI/OC2
17
PB4/MISO
18
PB5/SCK
19
PB6/TOSC1/XTAL1
9
PB7/TOSC2/XTAL2
10
PC6/RESET
1
PD0/RXD
2
PD1/TXD
3
PD2/INT0
4
PD3/INT1
5
PD4/T0/XCK
6
PD5/T1
11
PD6/AIN0
12
PD7/AIN1
13
PC0/ADC0
23
PC1/ADC1
24
PC2/ADC2
25
PC3/ADC3
26
PC4/ADC4/SDA
27
PC5/ADC5/SCL
28
AREF
21
AVCC
20
U1
ATMEGA8
D1
LED-YELLOW
R1
330
PROBLEMA2
PB0/ICP1
14
PB1/OC1A
15
PB2/SS/OC1B
16
PB3/MOSI/OC2
17
PB4/MISO
18
PB5/SCK
19
PB6/TOSC1/XTAL1
9
PB7/TOSC2/XTAL2
10
PC6/RESET
1
PD0/RXD
2
PD1/TXD
3
PD2/INT0
4
PD3/INT1
5
PD4/T0/XCK
6
PD5/T1
11
PD6/AIN0
12
PD7/AIN1
13
PC0/ADC0
23
PC1/ADC1
24
PC2/ADC2
25
PC3/ADC3
26
PC4/ADC4/SDA
27
PC5/ADC5/SCL
28
AREF
21
AVCC
20
U1
ATMEGA8
D1
LED-YELLOW
R1
330
PROBLEMA2
APAGAOENCENDIDO
12. B.- ESCRIBA LAS INSTRUCCIONES
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0x0000
. RJMP INICIO
.ORG 0x0020
INICIO: LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
;--------------------------------------------------
; INICIALIZO LA SALIDA |
;--------------------------------------------------
LDI R17,3 ;CRAGO 0b00000011 EN EL REGISTRO R17
OUT DDRB,R17 ; CONFIGURO EL PUERTO B :PB0,PB1 COMO SALIDA
CLR R17 ; BORRO EL REGISTRO R17
;-------------------------------------------------
; CONTROL DEL MOTOR DC |
;-------------------------------------------------
X0: LDI R17,1; CARGO UNO DECIMAL
OUT PORTB,R17;SACO EL VALOR DEL REGISTRO R17 Y LO MUESTRO POR EL PUERTO B
RCALL DELAY_5segundo;LLAMO A UN RETARDO PARA SEGUIR MOSTRANDO LO ANTERIOR
LDI R17,0;CARGO 0 EN DECIMAL EN R17
OUT PORTB,R17; SACO EL VALOR DE R17=0 Y LO MUESTRO POR EL PUERTO B
RCALL DELAY_5segundo; LLAMO A UN RETARDO PARA SEGUIR MOSTRANDO LO ANTERIOR
LDI R17,2;CARGO 2EN DECIMAL AL REGISTRO R17
OUT PORTB,R17;SACO EL VALOR DE R17=2 Y LO MUESTRPO POR EL PUERTO B
RCALL DELAY_5segundo; LLAMO A UN RETARDO PARA SEGUIR MOSTRANDO LO ANTERIOR
LDI R17,0;CARGO 0 EN DECIMAL EN R17
OUT PORTB,R17;SACO EL VALOR DE R17=0 Y LO MUESTRPO POR EL PUERTO B
RCALL DELAY_5segundo; LLAMO A UN RETARDO PARA SEGUIR MOSTRANDO LO ANTERIOR
RJMP X0; SALTO A LA ETIQUETA X0
;------------------------------------------------------
; CARGAREMOS A LOS REGISTROS DE LA SIGUIENTE MODO: |
; 170;100;100 EN ESTE ORDEN Y NOS DARA APROXIMADAMENTE |
; UN TIEMPO DE 5segundo |
;------------------------------------------------------
DELAY_5segundo: LDI R18,170; CARGO 170 EN DECIMAL AL REGIATRO R18
Z0: LDI R19,100; CARGO 100 EN DECIMAL AL REGIATRO R19
Z1: LDI R20,100; CARGO 100 EN DECIMAL AL REGIATRO R20
Z2: DEC R20; DECREMENTO EN UNA UNIDAD A R20
BRNE Z2; SI R20 ES DIFERENTE DE CERO SALTA A ETIQUETA Z2
DEC R19; DECREMENTO EN UNA UNIDAD A R19
BRNE Z1; SI R19 ES DIFERENTE DE CERO SALTA A ETIQUETA Z1
DEC R18; DECREMENTO EN UNA UNIDAD A R18
BRNE Z0 ; SI R18 ES DIFERENTE DE CERO SALTA A ETIQUETA Z0
RET ;RETORNA A LA SIGUIENTE LINEA DE DONDE FUE LLAMADO
15. B.-ESCRIBA LAS INSTRUCCIONES
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0x0000
. RJMP INICIO
.ORG 0x0020
INICIO: LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
;-------------------------------------------
; INICIALIZO LA SALIDA TODO EL PUERTO D |
;-------------------------------------------
SER R17; PONGO TODO EL REGISTRO R17 A UNO LOGICO
OUT DDRD,R17; CARGO UNO LOGICO Y ACTIVO TODO EL PUERTO D COMO SALIDA
LDI R16,0; INICIALIZO EL CONTADOR EN CERO LO ALMACENO EN R16 COSA
; QUE EN T1 SE INCREMENTA EN UNA UNIDAD CADA CICLO QUE HACE
; EN TOTAL DEVE DE HACER 5 CICLOS DE PRENDIDO Y APAGADO DE LOS
; LEDS
;---------------------------------------------
; INTERRUPTOR |
;---------------------------------------------
INTERRUPTOR :
SBIC PINB,PB0 ; PEGUNTO PB0=0 SI LO ES SALTO UNA LINEA O SEA NO LEO
; LA LINEA SIGUIENTE
RJMP INTERRUPTOR;SALTO A INTERRUPTOR SIEMPRE Y CUANDO PB0=1
RJMP T1; SALTO A T1
T1:
SER R17;INICIALIZO TODO EL REGISTRO R17 CON UNOS
OUT PORTD,R17;SACO EL VALOR DE R17 POR EL PUERTO D
RCALL DELAY_200ms;LLAMO A UNA SUBRUTINA DELAY _200ms PARA OBSERVAR
; LO ANTERIOR UN INSTANTE
CLR R17;INICIALIZO TODO EL REGISTRO R17 CON CEROS
OUT PORTD,R17;SACO EL VALOR DE R17 POR EL PUERTO D
RCALL DELAY_200ms;LLAMO A UNA SUBRUTINA DELAY _200ms PARA
; OBSERVAR LO ANTERIOR UN INSTANTE
INC R16;INCREMENTO EN UNA UNIDAD EL REGISTRO R16
CPI R16,5;A R16 LE HAGO LA COMPARACION INMEDIATA CON 5 EN DECIMAL
BREQ AUTO_FANTASTICO1 ;DE LA COMPARACION ANTERIOR NOS PREGUNTAMOS SI
; ES IGUAL A 5 SALTA A AUTO_FANTASTICO1
RJMP T1;MIENTRAS QUE LO ANTERIOR NO SE CUMPLA AQUI SALTAMOS A T1
AUTO_FANTASTICO1:
CLC; BORRAMOS CARRY
CLR R17; INICIALIZO TODO EL REGISTRO R17 CON CEROS
LDI R17,1; CARGO R17 CON UNO
A1:
OUT PORTD,R17; SACO EL VALOR DE R17 POR EL PUERTO D AQUI SOLO PRENDE PD0
RCALL DELAY_150ms; LLAMO A UNA SUBRUTINA DELAY _150ms PARA OBSERVAR LO ANTERIOR UN
; INSTANTE
ROL R17; ROTO UN BIT A LA ISQUIERDA
BRCS AUTO_FANTASTICO2; ME PREGUNTO EXISTE CARRY AL FINAL C=1? SI EXISTE SALTA A
; AUTO_FANTASTICO2
RJMP A1; MIENTRA NO CUMPLA LO ANTERIOR AQUI SALTAMOS A ETIQUETA A1
AUTO_FANTASTICO2:
CLC; BORRAMOS CARRY
CLR R17; INICIALIZO TODO EL REGISTRO R17 CON CEROS
LDI R17,128;CARGO R17 CON 0b10000000
16. A2:
OUT PORTD,R17; MUESTRO LO QUE CARGUE EN EL REGISTRO R17 POR ;
EL PUERTO D AQUI SOLO PRENDE PD7
RCALL DELAY_150ms;LLAMO A UNA SUBRUTINA DELAY _150ms PARA OBSERVAR LO
; ANTERIOR UN INSTANTE
ROR R17;ROTO A LA DERECHA EL BIT
BRCS AUTO_FANTASTICO1;ME PREGUNTO EXISTE CARRY AL FINAL C=1? SI EXISTE SALTA A
; AUTO_FANTASTICO1
RJMP A2; MIENTRA NO CUMPLA LO ANTERIOR AQUI SALTAMOS A ETIQUETA A2
;--------------------------------------------------
; CARGAREMOS A LOS REGISTROS DE LA SIGUIENTE MODO: |
; 42;40;40 EN ESTE ORDEN Y NOS DARA APROXIMADAMENTE |
; UN TIEMPO DE 200ms |
;--------------------------------------------------
DELAY_200ms: LDI R18,42; CARGAMOS 42 EN DECIMAL EN EL REGISTRO R18
Z0: LDI R19,40; CARGAMOS 40 EN DECIMAL EN EL REGISTRO R19
Z1: LDI R20,40; CARGAMOS 40 EN DECIMAL EN EL REGISTRO R20
Z2: DEC R20; DECREMENTAMOS EN UNO AL REGISTRO R20
BRNE Z2; MIENTRAS QUE R20 SEA DIFERENTE DE CERO SALTA A Z2
DEC R19; DECREMENTAMOS EN UNO AL REGISTRO R19
BRNE Z1; MIENTRAS QUE R19 SEA DIFERENTE DE CERO SALTA A Z1
DEC R18; DECREMENTAMOS EN UNO AL REGISTRO R18
BRNE Z0; MIENTRAS QUE R18 SEA DIFERENTE DE CERO SALTA A Z0
RET ; RETORNA DENDE FUE LLAMADO
;--------------------------------------------------
; CARGAREMOS A LOS REGISTROS DE LA SIGUIENTE MODO: |
; 200;255 EN ESTE ORDEN Y NOS DARA APROXIMADAMENTE |
; UN TIEMPO DE 150ms |
;--------------------------------------------------
DELAY_150ms: LDI R18,200; CARGAMOS 200 EN DECIMAL EN EL REGISTRO R18
Y0: LDI R19,255; CARGAMOS 255 EN DECIMAL EN EL REGISTRO R19
Y1: DEC R19; DECREMENTAMOS EN UNO AL REGISTRO R19
BRNE Y1; MIENTRAS QUE R19 SEA DIFERENTE DE CERO SALTA A Y1
DEC R18; DECREMENTAMOS EN UNO AL REGISTRO R18
BRNE Y0; MIENTRAS QUE R18 SEA DIFERENTE DE CERO SALTA A Y0
RET ; RETORNA DE DONDE FUE LLAMADO
C.- SIMULACION
EL SWITCH ESTA ABIERTO
PB0/ICP1
14
PB1/OC1A
15
PB2/SS/OC1B
16
PB3/MOSI/OC2
17
PB4/MISO
18
PB5/SCK
19
PB6/TOSC1/XTAL1
9
PB7/TOSC2/XTAL2
10
PC6/RESET
1
PD0/RXD
2
PD1/TXD
3
PD2/INT0
4
PD3/INT1
5
PD4/T0/XCK
6
PD5/T1
11
PD6/AIN0
12
PD7/AIN1
13
PC0/ADC0
23
PC1/ADC1
24
PC2/ADC2
25
PC3/ADC3
26
PC4/ADC4/SDA
27
PC5/ADC5/SCL
28
AREF
21
AVCC
20
U1
ATMEGA8
D1
LED-YELLOW
D2
LED-YELLOW
D3
LED-YELLOW
D4
LED-YELLOW
D5
LED-YELLOW
D6
LED-YELLOW
D7
LED-YELLOW
D8
LED-YELLOW
R1
330
R2
330
R3
330
R4
330
R5
330
R6
330
R7
330
R8
330
R9
10k
18. B.- ESCRIBA LAS INSTRUCCIONES COMENTADAS
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0x0000
. RJMP INICIO
.ORG 0x0020
INICIO: LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
;-------------------------------------------
; INICIALIZO LA SALIDA TODO EL PUERTO D |
;-------------------------------------------
SER R17; PONGO TODO EL REGISTRO R17 A UNO LOGICO
OUT DDRD,R17; CARGO UNO LOGICO Y ACTIVO TODO EL PUERTO D COMO SALIDA
CBI DDRC,PC0; PONGO PC0 COMO ENTRADA
;---------------------------------------------
; INTERRUPTOR |
;---------------------------------------------
INTERRUPTOR : SBIC PINC,PC0 ; PEGUNTO PC0=0 SI LO ES SALTO UNA LINEA O SEA NO
; LEO LA LINEA SIGUIENTE
RJMP INTERRUPTOR; SALTO A INTERRUPTOR SIEMPRE Y CUANDO PB0=1
RJMP T1; SALTO A T1
T1: LDI R17,129; CARGO 120 QUE ES IGUAL A 0b10000001
OUT PORTD,R17; SACO EL VALOR DE R17 POR EL PUERTO D OSEA
; ESTARIA ENCENDIDO PD7 Y PD0
RCALL DELAY_300ms; TIEMPO DE RETARDO PARA PODER VISUALIZAR LO
; ANTERIOR
LDI R17,66; CARGO 66 QUE ES IGUAL A 0b01000010
OUT PORTD,R17; SACO EL VALOR DE R17 POR EL PUERTO D OSEA
; ESTARIA ENCENDIDO PD6 Y PD1
RCALL DELAY_300ms; TIEMPO DE RETARDO PARA PODER VISUALIZAR LO
; ANTERIOR
LDI R17,36; CARGO 36 QUE ES IGUAL A 0b00100100
OUT PORTD,R17; SACO EL VALOR DE R17 POR EL PUERTO D OSEA ESTARIA
; ENCENDIDO PD5 Y PD2
RCALL DELAY_300ms; TIEMPO DE RETARDO PARA PODER VISUALIZAR LO
; ANTERIOR
LDI R17,24; CARGO 24 QUE ES IGUAL A 0b00011000
OUT PORTD,R17; SACO EL VALOR DE R17 POR EL PUERTO D OSEA ESTARIA
; ENCENDIDO PD4 Y PD3
RCALL DELAY_300ms; TIEMPO DE RETARDO PARA PODER VISUALIZAR LO
; ANTERIOR
RJMP T1; SALTO A ETIQUETA T1 PARA REPETIR M EL CICLO DE NUEVO
19. ;--------------------------------------------------
; CARGAREMOS A LOS REGISTROS DE LA SIGUIENTE MODO: |
; 45;46;49 EN ESTE ORDEN Y NOS DARA APROXIMADAMENTE |
; UN TIEMPO DE 300ms |
;--------------------------------------------------
DELAY_300ms: LDI R18,45; CARGAMOS 45 EN DECIMAL AL REGISTRO R18
X0: LDI R19,46; CARGAMOS 46 EN DECIMAL AL REGISTRO R19
X1: LDI R20,49; CARGAMOS 49 EN DECIMAL AL REGISTRO R20
X2: DEC R20; DECREMENTO EN UNA UNIDAD AL REGISTRO R20
BRNE X2; MIENTRAS QUE R20 SEA DIFERENTE DE CERO SALTAR
; A X2
DEC R19; DECREMENTO EN UNA UNIDAD AL REGISTRO R19
BRNE X1; MIENTRAS QUE R19 SEA DIFERENTE DE CERO SALTAR
; A X1
DEC R18; DECREMENTO EN UNA UNIDAD AL REGISTRO R18
BRNE X0; MIENTRAS QUE R18 SEA DIFERENTE DE CERO SALTAR
; A X0
RET ; RETORNO A LA SIGUIENTE LINEA DE DONDE FUE
; LLAMADO
C.- HACER LA SIMULACION
EL INTERRUPTOR ESTA ABIERTO
PB0/ICP1
14
PB1/OC1A
15
PB2/SS/OC1B
16
PB3/MOSI/OC2
17
PB4/MISO
18
PB5/SCK
19
PB6/TOSC1/XTAL1
9
PB7/TOSC2/XTAL2
10
PC6/RESET
1
PD0/RXD
2
PD1/TXD
3
PD2/INT0
4
PD3/INT1
5
PD4/T0/XCK
6
PD5/T1
11
PD6/AIN0
12
PD7/AIN1
13
PC0/ADC0
23
PC1/ADC1
24
PC2/ADC2
25
PC3/ADC3
26
PC4/ADC4/SDA
27
PC5/ADC5/SCL
28
AREF
21
AVCC
20
U1
ATMEGA8
R1
330
R2
330
R3
330
R4
330
R5
330
R6
330
R7
330
R8
330
D1
LED-YELLOW
D2
LED-YELLOW
D3
LED-YELLOW
D4
LED-YELLOW
D5
LED-YELLOW
D6
LED-YELLOW
D7
LED-YELLOW
D8
LED-YELLOW
R9
10k
22. B.-ESCRIBA LAS INSTRUCCIONES COMENTADAS
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0x0000
. RJMP INICIO
.ORG 0x0020
INICIO: LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
;-------------------------------------------
; INICIALIZO LA SALIDA TODO EL PUERTO D |
;-------------------------------------------
SER R17; PONGO TODO EL REGISTRO R17 A UNO LOGICO
OUT DDRD,R17; CARGO UNO LOGICO Y ACTIVO TODO EL PUERTO D COMO SALIDA
CBI DDRC,PC1; PONGO PC1 COMO ENTRADA
CBI DDRC,PC0;PONGO PC0 COMO ENTRADA
;---------------------------------------------
; INTERRUPTOR |
;---------------------------------------------
PC1_: SBIC PINC,PC1;PREGUNTA POR PC1=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
SBIS PINC,PC1;PREGUNTA POR PC1=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_0;SALTA A ETIQUETA PC1_0 SI PC1=0
RJMP PC1_1;SALTA A ETIQUETA PC1_1 SI PC1=1
PC1_0: SBIC PINC,PC0;PREGUNTA POR PC0=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP AUTO_FANTASTICO;SI PC0=1 SALTA A ETIQUETA AUTO_FANTASTICO
RJMP LED_APAGADO ;SI PC0=0 SALTA A ETIQUETA LED_APAGADO
PC1_1: SBIC PINC,PC0;PREGUNTA POR PC0=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP JUEGO_DE_LEDS;SI PC0=1 SALTA A ETIQUETA JUEGO_DE_LEDS
RJMP LEDS_INTERMITENTES;SI PC0=0 SALTA A ETIQUETA LEDS_INTERMITENTES
;-----------------------------------------------
JUEGO_DE_LEDS:
SBIS PINC,PC1;PREGUNTA POR PC1=1? SI LO ES SALTA UNA LINEA DE INSTRUCCIÓN
RJMP PC1_;SALTA A PC1_ SI PC1=0
SBIS PINC,PC0;PREGUNTA POR PC0=1? SI LO ES SALTA UNA LINEA DE INSTRUCCIÓN
RJMP PC1_1;SALTA A PC1_1 SI PC0=0
LDI R17,129;CARGO 120 QUE ES IGUAL A 0b10000001
OUT PORTD,R17;SACO EL VALOR DE R17 POR EL PUERTO D OSEA ESTARIA ENCENDIDO PD7 Y PD0
RCALL DELAY_300ms;TIEMPO DE RETARDO PARA PODER VISUALIZAR LO ANTERIOR
SBIS PINC,PC1;PREGUNTA POR PC1=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_;SALTA A PC1_ SI PC1=0
SBIS PINC,PC0;PREGUNTA POR PC0=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_1;SALTA A PC1_1 SI PC0=0
LDI R17,66;CARGO 66 QUE ES IGUAL A 0b01000010
OUT PORTD,R17;SACO EL VALOR DE R17 POR EL PUERTO D OSEA ESTARIA ENCENDIDO PD6 Y PD1
RCALL DELAY_300ms;TIEMPO DE RETARDO PARA PODER VISUALIZAR LO ANTERIOR
SBIS PINC,PC1;PREGUNTA POR PC1=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_;SALTA A PC1_ SI PC1=0
SBIS PINC,PC0;PREGUNTA POR PC0=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_1;SALTA A PC1_1 SI PC0=0
LDI R17,36;CARGO 36 QUE ES IGUAL A 0b00100100
OUT PORTD,R17;SACO EL VALOR DE R17 POR EL PUERTO D OSEA ESTARIA ENCENDIDO PD5 Y PD2
23. RCALL DELAY_300ms;TIEMPO DE RETARDO PARA PODER VISUALIZAR LO ANTERIOR
SBIS PINC,PC1;PREGUNTA POR PC1=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_;SALTA A PC1_ SI PC1=0
SBIS PINC,PC0;PREGUNTA POR PC0=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_1;SALTA A PC1_1 SI PC0=0
LDI R17,24;CARGO 24 QUE ES IGUAL A 0b00011000
OUT PORTD,R17;SACO EL VALOR DE R17 POR EL PUERTO D OSEA ESTARIA ENCENDIDO PD4 Y PD3
RCALL DELAY_300ms;TIEMPO DE RETARDO PARA PODER VISUALIZAR LO ANTERIOR
SBIS PINC,PC1;PREGUNTA POR PC1=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_;SALTA A PC1_ SI PC1=0
SBIS PINC,PC0;PREGUNTA POR PC0=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_1;SALTA A PC1_1 SI PC0=0
RJMP JUEGO_DE_LEDS;SALTO A ETIQUETA JUEGO_DE_LEDS PARA REPETIR M EL CICLO DE NUEVO
LEDS_INTERMITENTES:
SBIS PINC,PC1;PREGUNTA POR PC1=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_;SALTA A PC1_ SI PC1=0
SBIC PINC,PC0;PREGUNTA POR PC0=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_1;SALTA A PC1_1 SI PC0=1
SER R17; INICIALIZO TODO EL REGISTRO R17 CON UNOS
OUT PORTD,R17; SACO EL VALOR DE R17 POR EL PUERTO D
RCALL DELAY_300ms;LLAMO A UNA SUBRUTINA DELAY _200ms PARA OBSERVAR LO ANTERIOR UN
; INSTANTE
SBIS PINC,PC1;PREGUNTA POR PC1=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_;SALTA A PC1_ SI PC1=0
SBIC PINC,PC0;PREGUNTA POR PC0=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_1;SALTA A PC1_1 SI PC0=1
CLR R17; INICIALIZO TODO EL REGISTRO R17 CON CEROS
OUT PORTD,R17; SACO EL VALOR DE R17 POR EL PUERTO D
RCALL DELAY_300ms; LLAMO A UNA SUBRUTINA DELAY _200ms PARA OBSERVAR LO ANTERIOR
; UN INSTANTE
SBIS PINC,PC1;PREGUNTA POR PC1=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_;SALTA A PC1_ SI PC1=0
SBIC PINC,PC0;PREGUNTA POR PC0=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_1;SALTA A PC1_1 SI PC0=1
RJMP LEDS_INTERMITENTES; SALTA A ETIQUETA LEDS_INTERMITENTES PARA HACER LOS CICLOS
; SUCESIVOS
AUTO_FANTASTICO:
SBIC PINC,PC1;PREGUNTA POR PC1=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_; SALTA A PC1_ SI PC1=1
SBIS PINC,PC0; PREGUNTA POR PC0=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_0;SALTA A PC1_0 SI PC0=0
AUTO_FANTASTICO1:
CLC; BORRAMOS CARRY
CLR R17; INICIALIZO TODO EL REGISTRO R17 CON CEROS
LDI R17,1; CARGO R17 CON UNO
A1:
OUT PORTD,R17; SACO EL VALOR DE R17 POR EL PUERTO D AQUI SOLO PRENDE PD0
RCALL DELAY_300ms; LLAMO A UNA SUBRUTINA DELAY _300ms PARA OBSERVAR LO ANTERIOR UN
; INSTANTE
ROL R17; ROTO UN BIT A LA ISQUIERDA
SBIC PINC,PC1;PREGUNTA POR PC1=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_ ;SALTA A PC1_ SI PC1=1
SBIS PINC,PC0;PREGUNTA POR PC0=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_0;SALTA A PC1_0 SI PC0=0
BRCS AUTO_FANTASTICO2; ME PREGUNTO EXISTE CARRY AL FINAL C=1? SI EXISTE SALTA A
; AUTO_FANTASTICO2
RJMP A1;MIENTRA NO CUMPLA LO ANTERIOR AQUI SALTAMOS A ETIQUETA A1
AUTO_FANTASTICO2:
24. SBIC PINC,PC1;PREGUNTA POR PC1=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_;SALTA A PC1_ SI PC1=1
CLC;BORRAMOS CARRY
CLR R17;INICIALIZO TODO EL REGISTRO R17 CON CEROS
LDI R17,128;CARGO R17 CON 0b10000000
A2:
OUT PORTD,R17; MUESTRO LO QUE CARGUE EN EL REGISTRO R17 POR EL PUERTO D AQUI SOLO
; PRENDE PD7
RCALL DELAY_300ms;LLAMO A UNA SUBRUTINA DELAY _300ms PARA OBSERVAR LO ANTERIOR UN
; INSTANTE
ROR R17; ROTO A LA DERECHA EL BIT
SBIC PINC,PC1;PREGUNTA POR PC1=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_ ;SALTA A PC1_ SI PC1=1
SBIS PINC,PC0;PREGUNTA POR PC0=1? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_0;SALTA A PC1_0 SI PC0=0
BRCS AUTO_FANTASTICO1; ME PREGUNTO EXISTE CARRY AL FINAL C=1? SI EXISTE SALTA A
; AUTO_FANTASTICO1
RJMP A2;MIENTRA NO CUMPLA LO ANTERIOR AQUI SALTAMOS A ETIQUETA A2
LED_APAGADO:
SBIC PINC,PC1;PREGUNTA POR PC1=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_;SALTA A PC1_ SI PC1=1
SBIC PINC,PC0;PREGUNTA POR PC0=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_0;SALTA A PC1_0 SI PC0=1
CLR R17 ;BORRO EL REGISTRO R17
OUT PORTD,R17;MUESTRO EL REGISTRO R17 POR EL PUERTO D
RCALL DELAY_300ms;LLAMO A UNA SUBRUTINA DELAY _300ms PARA OBSERVAR LO ANTERIOR UN
; INSTANTE
SBIC PINC,PC1;PREGUNTA POR PC1=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_; SALTA A PC1_ SI PC1=1
SBIC PINC,PC0;PREGUNTA POR PC0=0? SI LO ES SALTA UNA LINEA DE INSTRUCCION
RJMP PC1_0;SALTA A PC1_0 SI PC0=1
RJMP LED_APAGADO;SALTO A ETIQUETA LED_APAGADO MIENTRAS NO CUMPLA LO ANTERIOR OSEA
; PC0=1
;--------------------------------------------------
; CARGAREMOS A LOS REGISTROS DE LA SIGUIENTE MODO: |
; 45;46;49 EN ESTE ORDEN Y NOS DARA APROXIMADAMENTE |
; UN TIEMPO DE 300ms |
;--------------------------------------------------
DELAY_300ms:
LDI R18,45;CARGAMOS 45 EN DECIMAL AL REGISTRO R18
X0: LDI R19,46;CARGAMOS 46 EN DECIMAL AL REGISTRO R19
X1: LDI R20,49;CARGAMOS 49 EN DECIMAL AL REGISTRO R20
X2: DEC R20;DECREMENTO EN UNA UNIDAD AL REGISTRO R20
BRNE X2;MIENTRAS QUE R20 SEA DIFERENTE DE CERO SALTAR A X2
DEC R19;DECREMENTO EN UNA UNIDAD AL REGISTRO R19
BRNE X1;MIENTRAS QUE R19 SEA DIFERENTE DE CERO SALTAR A X1
DEC R18;DECREMENTO EN UNA UNIDAD AL REGISTRO R18
BRNE X0;MIENTRAS QUE R18 SEA DIFERENTE DE CERO SALTAR A X0
RET ;RETORNO A LA SIGUIENTE LINEA DE DONDE FUE LLAMADO
28. B.- ESCRIBA LAS INSTRUCCIONES
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0x0000
. RJMP INICIO
.ORG 0x0020
INICIO: LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
;----------------------------------------------------------------------
; DECLARO LAS ENTRADAS PARA LOS PULASDORES:BP,BM,BI,S |
;----------------------------------------------------------------------
CBI DDRB,PB0; DECLARO BP COMO ENTRADA
CBI DDRB,PB1; DECLARO BM COMO ENTRADA
CBI DDRB,PB2; DECLARO BI COMO ENTRADA
CBI DDRD,PD0; DECLARO S COMO ENTRADA
;--------------------------------------------------------
; DECLARO LA SALIDA PARA EL MOTOR DC |
;--------------------------------------------------------
LDI R16,3;CARGO 0b00000011
OUT DDRC,R16; DECLARO PC0 Y PC1 COMO SALIDA DEL MOTOR
;--------------------------------------------------------
; SUPERVICION |
;--------------------------------------------------------
SUPERVISION_S:
SBIC PIND,PD0; PREGUNTO POR PD0=0? SI ES CIERTO NO LEE LA SIGUIENTE LINEA DE LA
; PROGRAMACION
RJMP SUPERVISION_S ; SALTO A SUPERVISION_S SI PD0=1
LDI R16,1; CARGO UNO EN DECIMAL AL REGISTRO R16
RCALL DELAY_500ms ; UNA PAUSA PARA LEER LO QUE BIENE DESPUES DE ESTO
PREGUNTA_PB0:
SBIS PINB,PB0;PREGUNTO POR PB1=1? SI ES CIERTO NO LEE LA SIGUIENTE LINEA DE LA
; PROGRAMACION
RJMP APAGADO; SALTO A APAGADO SI LO ANTERIOR ES PB1=0
PREGUNTA_PB1:
SBIC PINB,PB1; PREGUNTO POR PB1=0? SI ES CIERTO NO LEE LA SIGUIENTE LINEA DE LA
; PROGRAMACION
RJMP INTERMITENTE; SI LO ANTERIOR SE COMPRUEBA QUE PB1=1 SALTAMOS A INTERMITENTE
RJMP MARCHA; SI LO ANTERIOR SE COMPRUEBA QUE PB1=0 SALTAMOS A MARCHA
MARCHA:
OUT PORTC,R16; SACO EL VALOR DE R16 POR EL PUERTO C OSEA 1 LOGICO
RCALL DELAY_500ms; RETARDO PARA OBSERVAR LO ANTERIOR
SBIS PINB,PB0; PREGUNTO POR PB0=1? SI ES CIERTO NO LEE LA SIGUIENTE LINEA DE LA
; PROGRAMACION
RJMP APAGADO ; SI LO ANTERIOR ES PB0=0 SALTAMOS A APAGADO
SBIS PINB,PB2;PREGUNTO POR PB2=1? SI ES CIERTO NO LEE LA SIGUIENTE LINEA DE LA
; PROGRAMACION
RJMP PREGUNTA_PB1; SI LO ANTERIOR ES PB2=0 SALTAMOS A PREGUNTA_PB1
RJMP MARCHA; SI PB2=1 SALTAMOS A MARCHA
29. APAGADO:
CBI PORTC,PC0;MUESTRO CERO LOGICO POR EL PUERTO C
RCALL DELAY_500ms;UN RETARDO PARA PODER PERCATAR LO ANTERIOR
SBIS PINB,PB0;PREGUNTO POR PB0=1? SI ES CIERTO NO LEE LA SIGUIENTE LINEA DE LA
; PROGRAMACION
RJMP APAGADO ; SI LO ANTERIOR PB0=0 SALTAMOS A APGADO
RJMP PREGUNTA_PB1;SI LO ANTERIOR PB0=1 SALTA A PREGUNTA_PB1
INTERMITENTE:
SBIS PINB,PB0;PREGUNTO POR PB0=1? SI ES CIERTO NO LEE LA SIGUIENTE LINEA DE LA
; PROGRAMACION
RJMP APAGADO; SALTA A APAGADO SI PB0=0
SBIS PINB,PB1;PREGUNTO POR PB1=1? SI ES CIERTO NO LEE LA SIGUIENTE LINEA DE LA
; PROGRAMACION
RJMP MARCHA; SALTA A MARCHA SI PB1=0
SBIC PINB,PB2;PREGUNTO POR PB2=0? SI ES CIERTO NO LEE LA SIGUIENTE LINEA DE LA
; PROGRAMACION
RCALL APA;LLAMO A LA SUBRRUTINA SI PB2=1
SBIS PINB,PB2;PREGUNTO POR PB2=1? SI ES CIERTO NO LEE LA SIGUIENTE LINEA DE LA
; PROGRAMACION
RCALL PRE; LLAMO A LA SUBRRUTINA SI PB2=0
RJMP INTERMITENTE;SALTO A ETIQUETA INTERMITENTE
PRE:
SBI PORTC,PC0; MUESTRO UNO LOGICO POR PC0
RET; RETORNA A LA SIGUIENTE LINEA DE DONDE FUE LLAMADO
APA:
CBI PORTC,PC0;MUESTRO CERO LOGICO POR PC0
RCALL DELAY_500ms;LLAMO UN RETARDO PARA APRECIAR LO ANTERIOR
RET;RETORNA A LA SIGUIENTE LINEA DE DONDE FUE LLAMADO
;--------------------------------------------------
; CARGAREMOS A LOS REGISTROS DE LA SIGUIENTE MODO: |
; 73;51;46 EN ESTE ORDEN Y NOS DARA APROXIMADAMENTE |
; UN TIEMPO DE 500ms |
;--------------------------------------------------
DELAY_500ms: LDI R18,73
Y0: LDI R19,51
Y1: LDI R20,46
Y2: DEC R20
BRNE Y2
DEC R19
BRNE Y1
DEC R18
BRNE Y0
RET
32. PROBLEMA 9.-
A.-REALIZAR EL DIAGRAMA DE FLUJO
B.-ESCRIBA LAS INSTRUCCIONES ,COMENTADAS
.INCLUDE"M8DEF.INC"
.CSEG
.ORG 0X000
RJMP INICIO
;------------------------------
;DECLARO LAS ENTRADAS |
;------------------------------
INICIO:
LDI R16,255; CARGO 0b11111111 EN EL REGISTRO R16
OUT DDRD,R16;SACO EL VALOR DE R16 POR EL PUERTO D DANDO COMO SALIDAD A TODO EL
PUERTO D
CBI DDRB,PB0;DECLARO ENTRADA A PB0
;----------------------------
;INTERRUPTOR |
;----------------------------
INTERRUPTOR:
SBIC PINB,PB0; PREGUNTO PB0=0? SI LO ES SALTO UNA LINEA DE PROGRAMACION OSEA NO LO
LEO LA LINEA SIGUIENTE
RJMP CONTEO; SALTO A CONTEO SI PB0=1
SBIS PINB,PB0; PREGUNTO PB0=1? SI LO ES SALTO UNA LINEA DE PROGRAMACION OSEA NO LO
LEO LA LINEA SIGUIENTE
RJMP HOLA;SALTO A HOLA SI PB0=0
RJMP INTERRUPTOR ; SALTO A INTERRUPCION
33. CONTEO:
LDI R17,0B00111111;CARGO EN R17 0B00111111
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY; LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
LDI R17,0B00000110;CARGO EN R17 0B00000110
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY; LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
LDI R17,0B01011011;CARGO EN R17 0B01011011
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
LDI R17,0B01001111;CARGO EN R17 0B01001111
OUT PORTD,R;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR17
RCALL DELAY
LDI R17,0B01100110;CARGO EN R17 0B01100110
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
LDI R17,0B01101101;CARGO EN R17 0B01101101
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
LDI R17,0B01111101;CARGO EN R17 0B01111101
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
LDI R17,0B00000111;CARGO EN R17 0B00000111
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
LDI R17,0B01111111;CARGO EN R17 0B01111111
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
LDI R17,0B01100111;CARGO EN R17 0B01100111
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
RJMP INTERRUPTOR;SALTO A INTERRUPTOR
HOLA:
LDI R17,0B01110110;CARGO EN R17 0B01110110
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
LDI R17,0B00111111;CARGO EN R17 0B00111111
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
LDI R17,0B00111000;CARGO EN R17 0B00111000
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
RCALL DELAY;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
LDI R17,0B01110111;CARGO EN R17 0B01110111
OUT PORTD,R17;MUESTRO LO ANTERIOR O SEA R17 SACO POR EL PUERTO D
34. RCALL DELAY;LLAMO A SUBRRUTINA PARA VISUALIZAR LO ANTERIOR
RJMP INTERRUPTOR ; SALTO A INTERRUPCION
;--------------------------------------------------
; CARGAREMOS A LOS REGISTROS DE LA SIGUIENTE MODO: |
; 46;60;60 EN ESTE ORDEN Y NOS DARA APROXIMADAMENTE |
; UN TIEMPO DE 500ms |
;--------------------------------------------------
DELAY:
LDI R20,46
X3: LDI R19,60
X2: LDI R18,60
X1: DEC R18
BRNE X1
DEC R19
BRNE X2
DEC R20
BRNE X3
RET
C.- HACER LA SIMULACION
PULSADOR ABIERTO EMPIEZA A CONTAR
PB0/ICP1
14
PB1/OC1A
15
PB2/SS/OC1B
16
PB3/MOSI/OC2
17
PB4/MISO
18
PB5/SCK
19
PB6/TOSC1/XTAL1
9
PB7/TOSC2/XTAL2
10
PC6/RESET
1
PD0/RXD
2
PD1/TXD
3
PD2/INT0
4
PD3/INT1
5
PD4/T0/XCK
6
PD5/T1
11
PD6/AIN0
12
PD7/AIN1
13
PC0/ADC0
23
PC1/ADC1
24
PC2/ADC2
25
PC3/ADC3
26
PC4/ADC4/SDA
27
PC5/ADC5/SCL
28
AREF
21
AVCC
20
U1
ATMEGA8
R1
10k
36. B.-ESCRIBA LAS INSTRUCCIONES ,COMENTADAS
.INCLUDE "M8DEF.INC"
.CSEG
.ORG 0X000
RJMP INICIO
INICIO:
LDI R16,255;CARGO 0B11111111 EN R16
OUT DDRD,R16;DECLARO SALIDA EL PUERTO D
CBI DDRB,PB0;PONGO PB0 COMO ENTADA
CBI DDRB,PB1;PONGO PB1 COMO ENTRADA
LDI R17,0;CARGO 0 EN DECIMAL
LDI R21,9;CARGO 9 EN DECIMAL
INTERRUPTOR:
SBIS PINB,PB0;PREGUNTO PB0=1? SI LO ES SALTA UNA LINEA
RJMP DESCENDENTE; SI PB0=0 SALTAMOS A DECENDENTE
RJMP ASCENDENTE;SI PB0=1 SALTAMOS ASCENDENTE
ASCENDENTE:
SBIC PINB,PB1;PREGUNTO PB1=0? SI LO ES SALTA UNA LINEA
RJMP ASCENDENTE;SI PB1=1 SALTO A ASCENDENTE
RCALL DELAY;RETARDO
OUT PORTD,R17;MUESTRO EL VALOR DE R17 Y LO SACO POR EL PUERTO D
INC R17;INCREMENTO R17 EN UNA UNIDAD
CPI R17,10;COMPARO CON 10
BREQ I1;SI LO ANTERIOR ES IGUAL OSEA R17=10 SALTO A ETIQUETA I1
RJMP INTERRUPTOR;SALTO A INTERRUPTOR
DESCENDENTE:
SBIC PINB,PB1;PREGUNTO PB1=0? SI LO ES SALTA UNA LINEA
RJMP DESCENDENTE;SI PB1=1 SALTO A ASCENDENTE
RCALL DELAY;RETARDO
OUT PORTD,R21;MUESTRO EL VALOR DE R21 Y LO SACO POR EL PUERTO D
DEC R21;DECREMENTO A R21 EN UNA UNIDAD
CPI R21,-1 ;COMPARO CON -1
BREQ I2;SI LO ANTERIOR ES IGUAL OSEA R21=-1 SALTO A ETIQUETA I2
RJMP INTERRUPTOR;SALTO A INTERRUPTOR
I1: LDI R17,0;INICIALIZO DE NUEVO CON CERO A R17
RJMP ASCENDENTE; SALTO ASCENDENTE
I2: LDI R21,9;INICIALIZO DE NUEVO CON NUEVE A R21
RJMP DESCENDENTE; SALTO DESCENDENTE
DELAY: ;CREACION DE RETARDO
LDI R20,50
X3:LDI R19,45
X2:LDI R18,40
X1:DEC R18
BRNE X1
DEC R19
BRNE X2
DEC R20
BRNE X3
RET