Вы находитесь на странице: 1из 13

UNIVERSIDAD NACIONAL DEL CALLAO

FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA

SOLUCIONARIO DEL EXAMEN FINAL DE MICROCONTROLADORES


PROFESOR: Ing. Zenn 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.
; ****************************************************** ; COMPLETE EL SIGUIENTE PROGRAMA PARA PARPADEAR UN LED ; ****************************************************** .include "C:\Users\PERCY\Desktop\VMLAB\include\m8def.inc" RJMP INICIO INICIO: LDI R16, HIGH(RAMEND);iniciamos la PILA OUT SPH, R16 LDI R16, LOW(RAMEND) OUT SPL, R16 LDI R16, $10 ;puerto PB4 como salida OUT DDRB, R16 ; PROGRAMA PRINCIPAL BUCLE: LDI R16, $10 OUT PORTB, R16 RCALL RETARDO CLR R16 OUT PORTB, R16 RCALL RETARDO RJMP BUCLE ; Subrutina RETARDO RETARDO: LDI R17, 800 ;1 ciclo LAZO: DEC R17 ;1 ciclo CPI R17, $00 ;1 ciclo BRNE LAZO ;2 ciclos RET ;5 ciclos

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

c. Si se desea hacer parpadear el led con un periodo de 1ms. Modifique la subrutina de RETARDO.
;subrutina RETARDO RETARDO: LDI R17, 1147 ;1 ciclo LAZO: DEC R17 ;1 ciclo CPI R17, $00 ;1 ciclo BRNE LAZO ;2 ciclos RET ;5 ciclos

Lo que hacemos es cambiar esta instruccin de nuestra subrutina RETARDO:

PREGUNTA2: Desarrolla un programa para el microcontrolador que permita leer un nmero 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.

Datos: K0 PD0; es bit LBS K1 PD1 Segundo nmero: K2 PD2; es bit K3 PD3 K4 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 $00 RJMP INICIO INICIO: LDI R16, HIGH(RAMEND) OUT SPH, R16 LDI R16, LOW(RAMEND) OUT SPL, R16 RCALL CONFIG_PUERTOS LAZO: RCALL LECTURA_DE_NUMEROS ADD R16, R18 ;suma los nmeros ESPERA_PULSO: SBIS PINC, 5 RJMP ESPERA_PULSO ESPERA_SOLTAR: SBIC PINC, 5 RJMP ESPERA_SOLTAR ;cdigo 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

;***************************************** ;**********configuramos puertos*********** CONFIG_PUERTOS: LDI R17, $FF OUT DDRB, R17 OUT PORTD, R17 RET ;***************************************** ; subrutina que halla los numeros de 2 bits ; y de 3 bits en R16 y en R18 respectivamente LECTURA_DE_NUMEROS: IN R16, PIND ANDI R16, $03 ;#1 EN PD1 Y PD0 IN R18, PIND ANDI R18, $38 ;#2 EN PD5, PD4 Y PD3 LSR R18 LSR R18 LSR R18 RET ;***************************************** ; ahora ingresaremso los valores a la tabla TABLA1: .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+0=7

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 nmeros pares desde 2 hasta el 12 y se repita, es decir cuando llega a 12, nuevamente comienza en 2. La funcin del interruptores comenzar la cuenta cuando est cerrado, si est abierto la cuenta esta en cero es decir los leds estn apagados. Cada valor debe mostrarse 600 ms despus 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 interrupcin 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 configuracin del timer. d. Subrutina de servicio de interrupcin. e. Programa principal.

SOLUCION: INICIO

Configura puertoB como salida Configura TiMER1

NO Pulsar y soltar pulsador

NO Incremento de contador <= 12

Muestro en puertoB

Subrutina de TIMER1:
;****************************************************** ;*********configuramos TIMER1,modo CTC****************** CONFIG_TIMER1: ;preescalamiento 1:64 ;modo CTC LDI R16,$00 OUT TCCR1A, R16 LDI R16, $0B OUT TCCR1B, R16 ;valor del registro OCR1A: 249E LDI R20,$24 LDI R21,$9E OUT OCR1AH, R20 ;(1us)x(64)x(OCR1A+1)=600ms OUT OCR1AL, R21 RET

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 $00 RJMP INICIO INICIO: LDI R16, $0F ;puertoB como salida PB3-PB0 OUT DDRB, R16 CLR R16 OUT PORTB, R16 RCALL CONFIG_TIMER1 PULSAR: SBIS PINC,0 RJMP PULSAR SOLTAR: SBIC PINC,0 RJMP SOLTAR CONTEO: LDI R17, $00 ;registro que llevara el conteo CLR R18 SONDEO: ;***son deamos el OCF1A (bit4 del TIFR) IN R16, TIFR ANDI R16, $10 CPI R16, $10 BRNE SONDEO IN R16, TIFR ORI R16, $10 OUT TIFR, R16 ;****incrementamos la cuenta*** LDI ZL, LOW(DATOS*2) LDI ZH, HIGH(DATOS*2) ADD ZL, R17 ADC ZH, R18 LPM R19, Z INC R17 CPI R17, 7 BREQ CONTEO OUT PORTB, R19 RJMP SONDEO DATOS: .DB $02,$04,$06,$08,$0A,$0C

PREGUNTA4: Escriba: a. La instruccin que permite borrar todas las interrupciones en el CPU.

b. Que funcin cumple la instruccin RETI. Retorna y habilita despus de una interrupcin. c. La instruccin que permite tener un preescalamiento igual a 8, para el modo CTC del timer1.
LDI R16, $0B OUT TCCR1B, R16

d. Las instrucciones que definen el vector de interrupcin para el timer0 cuando ocurre el desborde. Verificamos el flag TOV0 del registro TIFR SONDEO: IN R16, TIFR ANDI R16, $01 CPI R16, $01 BRNE SONDEO REGUNTA5: El siguiente circuito mide la variacin de un divisor de voltaje, utilizando un potencimetro y determina si se encuentra establecido. Cuando el valor ledo esta entre 1 voltio y menor que 2.5 voltios se prende el diodo led D1, cuando el valor ledo 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 estn apagados. Se pide escribir un programa que cumpla con los requerimientos solicitados. El potencimetro esta conectado al pin PC1 y los leds D1, D2 y D3 a los pines PB0, PB1 y PB2 del microcontrolador. La resolucin es de 8 bits. Datos de la subrutina que configura el ADC ; canal seleccionado:1 ; modo de conversin: nica ; divisin del preescalador: 8 ; ajuste del resultado: izquierdo ;voltaje de referencia AVCC

; ****************************************************** ; D1,D2,D3 ==> PB0,PB1,PB2 ; ****************************************************** .include "C:\Users\PERCY\Desktop\VMLAB\include\m8def.inc" .CSEG .ORG $00 RJMP INICIO INICIO: LDI R16, HIGH(RAMEND) OUT SPH, R16 LDI R16, LOW (RAMEND) OUT SPL, R16 RCALL CONFIG_PUERTOS RCALL CONFIG_ADC CLR R16 OUT 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, ADIF RJMP ESPERA_FIN_CONVERSION
IN R16, ADCL IN R16, ADCH CPI R16, $80 BRLO ON_D1 RJMP ON_D2 RJMP INICIA_CONVERSION IN R16, ADCL IN R16, ADCH CPI R16, $CD BRLO ON_D2 RJMP ON_D3 ON_D1: LDI R20, $01 OUT PORTB, R20 CBI ADCSR, ADIF RJMP INICIA_CONVERSION ON_D2: LDI R20, $02 OUT PORTB, R20 CBI ADCSR, ADIF RJMP INICIA_CONVERSION ON_D3: LDI R20, $04 OUT PORTB, R20 CBI ADCSR, ADIF RJMP INICIA_CONVERSION ;********************************************** ; subrutina configurar puerto ;********************************************** CONFIG_PUERTOS: LDI R16, $00 OUT DDRC, R16 LDI R16, $07 OUT DDRB, R16 RET

;********************************************** ;*******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 :canal1 OUT ADMUX, R16 ;REFS1 REFS0=01:AVCC; ADLAR=1 ; ajuste a la izquierda LDI R16, $83 ;modo de conversion unica OUT ADCSR, R16 ;ADPS2..ADPS0=011: pre-escalador 8 RET

Вам также может понравиться