Examen Final Microcontroladores

14
UNIVERSIDAD NACIONAL DEL CALLAO FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA SOLUCIONARIO DEL EXAMEN FINAL DE MICROCONTROLADORES PROFESOR: Ing. Zenón Cucho Mendoza ALUMNO: VICENTE LEIVA, PERCY DAVID 090619F

description

examen de microcontroladores de la universidad nacional del callao

Transcript of Examen Final Microcontroladores

UNIVERSIDAD NACIONAL DEL CALLAO

FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA

SOLUCIONARIO DEL EXAMEN FINAL DE MICROCONTROLADORES

PROFESOR: Ing. Zenón Cucho Mendoza

ALUMNO:VICENTE LEIVA, PERCY DAVID 090619F

2012-B

SOLUCIONARIO

EXAMEN FINAL DE MICROCONTROLADORES

PREGUNTA1:a. Complete el siguiente programa para hacer parpadear el diodo led, en el puerto PB4.

Complete el programa principal.

b. Halle el periodo de la onda de salida (en ms) por el puerto PB4. Considere la Fclk=1MHz

; ******************************************************; COMPLETE EL SIGUIENTE PROGRAMA PARA PARPADEAR UN LED; ******************************************************.include "C:\Users\PERCY\Desktop\VMLAB\include\m8def.inc"RJMP INICIOINICIO:

LDI R16, HIGH(RAMEND);iniciamos la PILAOUT SPH, R16LDI R16, LOW(RAMEND)OUT SPL, R16LDI R16, $10 ;puerto PB4 como salidaOUT DDRB, R16

; PROGRAMA PRINCIPALBUCLE:

LDI R16, $10OUT PORTB, R16RCALL RETARDOCLR R16OUT PORTB, R16RCALL RETARDO

RJMP BUCLE; Subrutina RETARDORETARDO:

LDI R17, 800 ;1 cicloLAZO:

DEC R17 ;1 cicloCPI R17, $00 ;1 cicloBRNE LAZO ;2 ciclosRET ;5 ciclos

c. Si se desea hacer parpadear el led con un periodo de 1ms. Modifique la subrutina de RETARDO.

Lo que hacemos es cambiar esta instrucción de nuestra subrutina RETARDO:

PREGUNTA2:Desarrolla un programa para el microcontrolador que permita leer un número de 2 bits y otro de 3 bits, empleando interruptores para cada bit. Luego, con un pulsador (al presionarlo y soltarlo) permita ver la suma en un visualizador de 7 segmentos. La suma se observa en formato hexadecimal.Se pide: a. Completar el cronograma principal.b. Completar la subrutina LECTURA_DE_NUMEROS.

;subrutina RETARDORETARDO:

LDI R17, 1147 ;1 cicloLAZO:

DEC R17 ;1 cicloCPI R17, $00 ;1 cicloBRNE LAZO ;2 ciclosRET ;5 ciclos

Datos:K0 PD0; es bit LBSK1 PD1Segundo número:K2 PD2; es bit K3 PD3K4 PD4

El pulsador a PC5 y el display al puerto B:Programa:

; ******************************************************; Ingreso un numero de 2 bits y otro de 3 bits; los cuales seran sumados al presionar y soltar; un pulsador, y seran mostrados en un display; en formato Hexadecimal.; ******************************************************.include "C:\Users\PERCY\Desktop\VMLAB\include\m8def.inc".CSEG.ORG $00RJMP INICIOINICIO:

LDI R16, HIGH(RAMEND)OUT SPH, R16LDI R16, LOW(RAMEND)OUT SPL, R16RCALL CONFIG_PUERTOS

LAZO:RCALL LECTURA_DE_NUMEROSADD R16, R18 ;suma los números

ESPERA_PULSO:SBIS PINC, 5RJMP ESPERA_PULSO

ESPERA_SOLTAR:SBIC PINC, 5RJMP ESPERA_SOLTAR

;código para mostrar el resultado LDI ZL, LOW(TABLA1*2) LDI ZH, HIGH(TABLA1*2) CLR R17 ADD ZL, R16 ADC ZH, R17 LPM R19, Z OUT PORTB, R19

RJMP LAZO

MOSTRANDO LA SUMA: 7+0=7

;*****************************************;**********configuramos puertos***********CONFIG_PUERTOS:

LDI R17, $FFOUT DDRB, R17OUT PORTD, R17RET

;*****************************************; subrutina que halla los numeros de 2 bits; y de 3 bits en R16 y en R18 respectivamenteLECTURA_DE_NUMEROS:

IN R16, PINDANDI R16, $03 ;#1 EN PD1 Y PD0IN R18, PINDANDI R18, $38 ;#2 EN PD5, PD4 Y PD3LSR R18LSR R18LSR R18RET

;*****************************************; ahora ingresaremso los valores a la tablaTABLA1:.DB 0B00111111, 0B00000110 ;0,1.DB 0B01011011, 0B01001111 ;2,3.DB 0B01100110, 0B01101101 ;4,5.DB 0B01111101, 0B00000111 ;6,7.DB 0B01111111, 0B01101111 ;8,9.DB 0B01110111, 0B01111100 ;A,B

MOSTRANDO LA SUMA: 7+3=10(A)

MOSTRANDO LA SUMA: 1+3=4

MOSTRANDO LA SUMA: 4+2=6

PREGUNTA3:Se tiene 4 diodos leds, y un interruptor conectados al microcontrolador. Implemente un programa para obtener un contador ascendente de números pares desde 2 hasta el 12 y se repita, es decir cuando llega a 12, nuevamente comienza en 2. La función del interruptores comenzar la cuenta cuando está cerrado, si está abierto la cuenta esta en cero es decir los leds están apagados.Cada valor debe mostrarse 600 ms después del anterior. Se configura el temporizador 1, usando el preescalador igual a 64, en modo CTC, para la frecuencia de reloj igual a 1MHz. El trabajo de la cuenta debe realizarse en la rutina de servicio de interrupción RSI, no en el programa principal. El programa “no habrá nada”.a. Diagrama de flujo del p.p.b. Diagrama de flujo de la RSI.c. Subrutina de la configuración del timer.d. Subrutina de servicio de interrupción.e. Programa principal.

SOLUCION:

Subrutina de TIMER1:

INICIO

Configura puertoB como salida

Configura TiMER1

Pulsar y soltar pulsador

Incremento de contador <= 12

Muestro en puertoB

NO

NO

;******************************************************;*********configuramos TIMER1,modo CTC******************CONFIG_TIMER1:;preescalamiento 1:64;modo CTC

LDI R16,$00OUT TCCR1A, R16LDI R16, $0BOUT TCCR1B, R16

;valor del registro OCR1A: 249ELDI R20,$24LDI R21,$9EOUT OCR1AH, R20 ;(1us)x(64)x(OCR1A+1)=600msOUT OCR1AL, R21RET

Programa principal:

; ******************************************************; Contador par ascendente del 2 al 12, y que se repita; Se inicia cuenta con pulsador, inicialmente apagados.; tiempo entre valores debe ser de 600ms.; configuraremos el TIMER1, con preescalador en 64, modo CTC; ******************************************************.include "C:\Users\PERCY\Desktop\VMLAB\include\m8def.inc".CSEG.ORG $00RJMP INICIOINICIO:

LDI R16, $0F ;puertoB como salida PB3-PB0OUT DDRB, R16CLR R16OUT PORTB, R16RCALL CONFIG_TIMER1

PULSAR:SBIS PINC,0RJMP PULSAR

SOLTAR:SBIC PINC,0RJMP SOLTAR

CONTEO:LDI R17, $00 ;registro que llevara el conteoCLR R18

SONDEO:;***son deamos el OCF1A (bit4 del TIFR)

IN R16, TIFRANDI R16, $10CPI R16, $10BRNE SONDEOIN R16, TIFRORI R16, $10OUT TIFR, R16

;****incrementamos la cuenta***LDI ZL, LOW(DATOS*2)LDI ZH, HIGH(DATOS*2)ADD ZL, R17ADC ZH, R18LPM R19, ZINC R17CPI R17, 7BREQ CONTEOOUT PORTB, R19RJMP SONDEO

DATOS:.DB $02,$04,$06,$08,$0A,$0C

PREGUNTA4:Escriba: a. La instrucción que permite borrar todas las interrupciones en el CPU.

b. Que función cumple la instrucción RETI.

Retorna y habilita después de una interrupción.

c. La instrucción que permite tener un preescalamiento igual a 8, para el modo CTC del timer1.

d. Las instrucciones que definen el vector de interrupción para el timer0 cuando ocurre el desborde.

Verificamos el flag TOV0 del registro TIFR

REGUNTA5:El siguiente circuito mide la variación de un divisor de voltaje, utilizando un potenciómetro y determina si se encuentra establecido. Cuando el valor leído esta entre 1 voltio y menor que 2.5 voltios se prende el diodo led D1, cuando el valor leído esta entre 2.5 y 4 voltios se prende el led D2 y cuando supera el valor de 4 voltios se prende el diodo D3. Inicialmente los diodos están apagados. Se pide escribir un programa que cumpla con los requerimientos solicitados. El potenciómetro esta conectado al pin PC1 y los leds D1, D2 y D3 a los pines PB0, PB1 y PB2 del microcontrolador. La resolución es de 8 bits.

Datos de la subrutina que configura el ADC; canal seleccionado:1; modo de conversión: única; división del preescalador: 8; ajuste del resultado: izquierdo;voltaje de referencia AVCC

LDI R16, $0BOUT TCCR1B, R16

SONDEO:IN R16, TIFRANDI R16, $01CPI R16, $01BRNE SONDEO

; ******************************************************; D1,D2,D3 ==> PB0,PB1,PB2; ******************************************************.include "C:\Users\PERCY\Desktop\VMLAB\include\m8def.inc".CSEG.ORG $00RJMP INICIOINICIO:

LDI R16, HIGH(RAMEND)OUT SPH, R16LDI R16, LOW (RAMEND)OUT SPL, R16RCALL CONFIG_PUERTOSRCALL CONFIG_ADCCLR R16OUT PORTB, R16 ;LEDS INICIALMENTE APAGADOS

;*********SE ACTIVA CONVERSION*****************SBI ADCSR, ADEN

;*********SE INICIALIZA CONVERSION*************INICIA_CONVERSION:

SBI ADCSR, ADSC;*********ESPERA FIN CONVERSION****************ESPERA_FIN_CONVERSION:

SBIS ADCSR, ADIFRJMP ESPERA_FIN_CONVERSION

IN R16, ADCLIN R16, ADCHCPI R16, $80BRLO ON_D1RJMP ON_D2RJMP INICIA_CONVERSIONIN R16, ADCLIN R16, ADCHCPI R16, $CDBRLO ON_D2RJMP ON_D3

ON_D1:LDI R20, $01OUT PORTB, R20CBI ADCSR, ADIFRJMP INICIA_CONVERSION

ON_D2:LDI R20, $02OUT PORTB, R20CBI ADCSR, ADIFRJMP INICIA_CONVERSION

ON_D3:LDI R20, $04OUT PORTB, R20CBI ADCSR, ADIFRJMP INICIA_CONVERSION

;**********************************************; subrutina configurar puerto;**********************************************CONFIG_PUERTOS:

LDI R16, $00OUT DDRC, R16LDI R16, $07OUT DDRB, R16RET

;**********************************************;*******SUBRUTINA CONFIGURAR ADC***************; canal seleccionado: 1; modo de conversion: unica; factor de division del pre-escalador: 8; ajuste del resultado: izquierdo; voltaje de referencia: AVCC;**********************************************CONFIG_ADC:

LDI R16, $61 ;MUX3..MUX0=0000 :canal1OUT ADMUX, R16 ;REFS1 REFS0=01:AVCC; ADLAR=1

; ajuste a la izquierdaLDI R16, $83 ;modo de conversion unicaOUT ADCSR, R16 ;ADPS2..ADPS0=011: pre-escalador 8RET