Informe 3

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 9

UNIVERSIDAD MAYOR DE SAN ANDRES

FACULTAD DE TECNOLOGIA
ELECTRONICA Y TELECOMUNICACIONES
SEMESTRE II/2020

INFORME LABORATORIO # 3
INTERRUPCIONES EXTERNAS EN EL MICROCONTROLADOR ATMEGA 32

DOCENTE: Ing. José Arturo Marín Thames


NOMBRE:

La Paz - Bolivia

INFORME LABORATORIO # 3
INTERRUPCIONES EXTERNAS EN EL MICROCONTROLADOR ATMEGA 32

Competencias: El estudiante al finalizar este laboratorio:


a. Conoce el funcionamiento general de las interrupciones en el
microcontrolador ATMEGA32
b. Configura los registros que controlan el funcionamiento de las
interrupciones externas en el microcontrolador ATMEGA 32.
c. Desarrolla programas utilizando las interrupciones externas del
microcontrolador.

1.- Realizar un programa en lenguaje ensamblador para ATMEGA 32 que habilite las
interrupciones externas 0 y 1, para ejecutar las siguientes acciones:
 Las interrupciones deben ser configuradas para que sean detectadas mediante
flanco de subida para INT 0 y flanco de bajada para INT 1. (Se recomienda
implementar un eliminador de rebotes ya sea por Hardware o por Software)
 Cuando se detecte la interrupción externa 0 la “variable contador” debe
incrementarse y su conteo debe ser visto en un display de 7 segmentos conectado
al puerto B del microcontrolador.
 Cuando se detecte la interrupción externa 1 la “variable contador” debe
decrementarse y su conteo debe ser visto en un display de 7 segmentos conectado
al puerto B del microcontrolador.

CODIGO:
.INCLUDE "M32DEF.INC"
.ORG $00
JMP PROGRAMA ; Interrupción Reset
.ORG $02
JMP INTER0 ; Interrupción 0
.ORG $0004
JMP INTER1 ; Interrupción 1

PROGRAMA:
LDI R16, HIGH(RAMEND) ;Coloco la Pila al final de la RAM
OUT SPH, R16
LDI R16, LOW(RAMEND)
OUT SPL, R16

LDI R16, 0xFF


OUT DDRB,R16 ;Puerto B como salida
LDI R16,0B00001011 ;con fanco asendente para int0 y flanco desendente para int1
OUT MCUCR,R16 ;INT0 por FLANCO ASENDENTE cambio de nivel
LDI R16,0B11000000
OUT GICR,R16 ; INT0 Habilitada Y INT1 HABILITADA
CBI PORTB, 0 ; Se coloca el bit 0 del puerto B en 0
SEI

BUCLE:
RJMP BUCLE

INTER0:
CALL RETARDO ; Llama a subrutina RETARDO para eliminar rebotes
;SBIS PIND, 2 ; Omite la siguiente instrucción si bit 2 puerto D esta en 1
INC R20

MOV R17,R20
;INC R16
;IN R17,PINA ;lee el dato del puerto A y lo almacena en el
registroR16
LDI R16,0x00 ;carga el numero 0 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Cero ;salta a "case ", si el resultado de la resta es cero
LDI R16,0x01 ;carga el numero 1 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Uno ;salta a "case ", si el resultado de la resta es cero
LDI R16,0x02 ;carga el numero 2 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Dos ;salta a "case", si el resultado de la resta es cero
LDI R16,0x03 ;carga el numero 3 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Tres ;salta a "case ", si el resultado de la resta es cero
LDI R16,0x04 ;carga el numero 4 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Cuatro ;salta a "case ", si el resultado de la resta es cero
LDI R16,0x05 ;carga el numero 5 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Cinco ;salta a "case", si el resultado de la resta es cero
LDI R16,0x06 ;carga el numero 6 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Seis ;salta a "case ", si el resultado de la resta es cero
LDI R16,0x07 ;carga el numero 7 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Siete ;salta a "case", si el resultado de la resta es cero
LDI R16,0x08 ;carga el numero 8 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Ocho ;salta a "case", si el resultado de la resta es cero
LDI R16,0x09 ;carga el numero 9 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Nueve ;salta a "case ", si el resultado de la resta es cero

RETI

RETARDO:
LDI R25, 31 ;Configurado para evitar Rebote
Bucle_Externo:
LDI R24, 255
Bucle_Interno:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DEC R24
BRNE Bucle_Interno
DEC R25
BRNE Bucle_Externo
RET

Case_Cero:
LDI R18,0x3F ;carga el equivalente a 0 para mostrarlo en el display
OUT PORTB,R18 ;muestra el 0 por el puerto D
RETI ;salta o retorna al programa principal "bucle"
Case_Uno:
LDI R18,0x06 ;carga el equivalente a 1 para mostrarlo en el display
OUT PORTB,R18 ;muestra el 1 por el puerto D
RETI ;salta o retorna al programa principal "bucle"
Case_Dos:
LDI R18,0x5B ;carga el equivalente a 2 para mostrarlo en el display
OUT PORTB,R18 ;muestra el 2 por el puerto D
RETI
Case_Tres:
LDI R18,0x4F ;carga el equivalente a 3 para mostrarlo en el display
OUT PORTB,R18 ;muestra el 3 por el puerto D
RETI ;salta o retorna al programa principal "bucle"
Case_Cuatro:
LDI R18,0x66 ;carga el equivalente a 4 para mostrarlo en el display
OUT PORTB,R18 ;muestra el 4 por el puerto D
RETI
Case_Cinco:
LDI R18,0x6D ;carga el equivalente a 5 para mostrarlo en el display
OUT PORTB,R18 ;muestra el 5 por el puerto D
RETI ;salta o retorna al programa principal "bucle"
Case_Seis:
LDI R18,0x7D ;carga el equivalente a 6 para mostrarlo en el display
OUT PORTB,R18 ;muestra el 6 por el puerto D
RETI ;salta o retorna al programa principal "bucle"
Case_Siete:
LDI R18,0x07 ;carga el equivalente a 7 para mostrarlo en el display
OUT PORTB,R18 ;muestra el 7 por el puerto D
RETI ;salta o retorna al programa principal "bucle"
Case_Ocho:
LDI R18,0x7F ;carga el equivalente a 8 para mostrarlo en el display
OUT PORTB,R18 ;muestra el 8 por el puerto D
RETI ;salta o retorna al programa principal "bucle"
Case_Nueve:
LDI R18,0x67 ;carga el equivalente a 9 para mostrarlo en el display
OUT PORTB,R18 ;muestra el 9 por el puerto D
RETI ;salta o retorna al programa principal "bucle"

INTER1:
CALL RETARDO ; Llama a subrutina RETARDO para eliminar rebotes
DEC R20
MOV R17,R20
LDI R16,0x00 ;carga el numero 0 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Cero ;salta a "case ", si el resultado de la resta es cero
LDI R16,0x01 ;carga el numero 1 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Uno ;salta a "case ", si el resultado de la resta es cero
LDI R16,0x02 ;carga el numero 2 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Dos ;salta a "case", si el resultado de la resta es cero
LDI R16,0x03 ;carga el numero 3 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Tres ;salta a "case ", si el resultado de la resta es cero
LDI R16,0x04 ;carga el numero 4 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Cuatro ;salta a "case ", si el resultado de la resta es cero
LDI R16,0x05 ;carga el numero 5 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Cinco ;salta a "case", si el resultado de la resta es cero
LDI R16,0x06 ;carga el numero 6 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Seis ;salta a "case ", si el resultado de la resta es cero
LDI R16,0x07 ;carga el numero 7 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Siete ;salta a "case", si el resultado de la resta es cero
LDI R16,0x08 ;carga el numero 8 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Ocho ;salta a "case", si el resultado de la resta es cero
LDI R16,0x09 ;carga el numero 9 en el registro R16
CP R16,R17 ;compara (resta R16-R17)
BREQ Case_Nueve ;salta a "case ", si el resultado de la resta es cero

RETI

ESQUEMA DEL CIRCUITO:

R1
10k
U1
9 22
RESET PC0/SCL
23
PC1/SDA
13 24
XTAL1 PC2/TCK
12 25
XTAL2 PC3/TMS
26
PC4/TDO
40 27
PA0/ADC0 PC5/TDI
39 28
PA1/ADC1 PC6/TOSC1
38 29
PA2/ADC2 PC7/TOSC2
37
PA3/ADC3
36 14
PA4/ADC4 PD0/RXD
35 15
PA5/ADC5 PD1/TXD
34 16 INTERRUPCION 0
PA6/ADC6 PD2/INT0
33 17
PA7/ADC7 PD3/INT1
18
PD4/OC1B
1 19 INCREMENTA EL CONTADOR CON FLNCO DE SUBIDA
2
PB0/T0/XCK PD5/OC1A
20 R2
PB1/T1 PD6/ICP1 10k
3 21
PB2/AIN0/INT2 PD7/OC2
4
PB3/AIN1/OC0
5
PB4/SS
6
PB5/MOSI
7 32
PB6/MISO AREF
8 30
PB7/SCK AVCC
ATMEGA32

INTERRUPCION 1

DECREMENTA EL CONTADOR CON FLANCO DE BAJADA

R3
10k

2.- Realizar un programa en lenguaje ensamblador para ATMEGA 32 que habilite la


interrupción del conversor analógico digital del microcontrolador. Al leer el valor de
voltaje analógico proveniente de un potenciómetro conectado al pin 0 del puerto A, se debe
leer el valor convertido y llevarlo a los puertos B y C.
Tomar en cuenta el bit 4 del registro ADCSRA, denominado ADIF que es la bandera que se
activa cuando se completa la conversión analógica digital. Deben estar ACTIVADOS los
bits ADIE y el bit 7 (I) del registro de estado, que es el habilitador global de interrupciones.
Registro ADCSRA correspondiente al ADC del microcontrolador ATMEGA 32:

CODIGO:
.INCLUDE<m32def.inc>
.org $0000
JMP main
main:
LDI R16,$04
OUT SPH,R16
LDI R16,$5F
OUT SPL,R16
SER R16
OUT DDRB,R16
LDI R16,$03 ;o 7F
OUT DDRC,R16
LDI R16,0b10000000 ;interruciones globales activaadas
OUT SREG,R16

bucle:
;LECTURA DEL ADC
LDI R16,$40
OUT ADMUX,R16
LDI R16,$95 ;10010101=95
OUT ADCSRA,R16
CALL delay200u
RJMP loop
RJMP bucle
;==================
;funciones de lectura
loop:
SBI ADCSRA,ADSC
convertir:
SBI ADCSRA,ADSC
RJMP leer

RJMP convertir
leer:
IN R16,ADCL
OUT PORTB,R16
IN R16,ADCH
OUT PORTC,R16
CALL delay25m
RJMP bucle
;===================
;RETARDOS
delay25m:
LDI R17,$A5
WGLOOP0: LDI R18,$C9
WGLOOP1: DEC R18
BRNE WGLOOP1
DEC R17
BRNE WGLOOP0
LDI R17,$03
WGLOOP2: DEC R17
BRNE WGLOOP2
NOP
RET
delay200u:
LDI R17,$02
WGLOOP3: LDI R18,$84
WGLOOP4: DEC R18
BRNE WGLOOP4
DEC R17
BRNE WGLOOP3
NOP
NOP

RET
ESQUEMA DEL CIRCUITO:

R1
10k
U1
9 22
RESET PC0/SCL 256
23
RV1 13
PC1/SDA
24
512
XTAL1 PC2/TCK
12 25
XTAL2 PC3/TMS
26
PC4/TDO
40 27
54%

PA0/ADC0 PC5/TDI
39 28
PA1/ADC1 PC6/TOSC1
38 29
PA2/ADC2 PC7/TOSC2
+2.70 37
PA3/ADC3
10k Volts 36 14
PA4/ADC4 PD0/RXD
35 15
512

256

128

PA5/ADC5 PD1/TXD
64

32

16

34 16 8

1
PA6/ADC6 PD2/INT0
33 17
PA7/ADC7 PD3/INT1
18
PD4/OC1B
1 19
1 PB0/T0/XCK PD5/OC1A
2 20
2 PB1/T1 PD6/ICP1
3 21
4 PB2/AIN0/INT2 PD7/OC2
4
8 PB3/AIN1/OC0
5
16 PB4/SS
6
32 PB5/MOSI
7 32
64 PB6/MISO AREF
8 30
128 PB7/SCK AVCC
ATMEGA32

También podría gustarte