Está en la página 1de 18

Preguntas Propuestas para ETS y EXTRA de Micros

1. En la siguiente tabla se muestran cinco instrucciones que usan WREG o FileReg como
destino. Explicar cada una de ellas y agregar tres más.

COMF FileReg, d
DECF FileReg, d
DECFSZ FileReg, d
MOVF FileReg, d
SWAPF FileReg, d
FileReg, d
FileReg, d
FileReg, d

2. En la siguiente tabla se muestran cinco instrucciones con la ALU. Explicar cada una de
ellas y agregar las tres que faltan.

ADDWF FileReg, d
ANDF FileReg, d
DECFSZ FileReg, d
XORWF FileReg, d
SUBFWB FileReg, d
FileReg, d
FileReg, d
FileReg, d

3. En la siguiente tabla se muestran cinco instrucciones que se ramifican (branch)


dependiendo del estado de STATUS. Explicar cada una de ellas y añadir tres que
faltan.

BC
BZ
BN
BNOV
BNZ

4. En el diagrama del PIC indicar cinco subsistemas sin nombre y explicar su función.

Prof. S. Saucedo Guía ETS Micros 2016 1


5. Explicar, anexando un diagrama, el banco de acceso por omisión.
6. Explicar la instrucción MOVWF POSTINC1.
7. Explicar la instrucción TBLRD*+.
8. Explicar la instrucción BTFSS FileReg, Bit.

Prof. S. Saucedo Guía ETS Micros 2016 2


9. Explicar la diferencia entre las instrucciones BRA y GOTO.
10. Explicar la diferencia entre las instrucciones CALL y RCALL.
11. Dar una rutina que use quince veces la instrucción RETLW.
12. Hacer una rutina en assembler que tarde 20.2 milisegundos.
13. Explicar tres modos de direccionamiento, dando tres ejemplos de cada uno.
14. Hacer un programa que permita intercambiar bytes de modo serial a dos PIC18F.

15. Hacer un programa en assembler que exhiba minutos y segundos en cuatro displays
de ánodo común multiplexados.

16. Hacer un programa en assembler que exhiba minutos y segundos en cuatro displays
de cátodo común multiplexados.

Prof. S. Saucedo Guía ETS Micros 2016 3


17. En la siguiente tabla se muestran cinco instrucciones que pueden saltar, o no, la
siguiente instrucción. Explicar su operación y agregar otras tres similares.

CPFSGT f,a
INCFSZ f,d,a
CPFSEQ f,a
DECFSNZ f,d,a
BTFSC f,b,a

18. Calcular el baudrate de la UART para cuatro casos de la siguiente tabla


SYNC = 0 Fosc/4 = 12MHz
BRG16 BRGH SPBRGH SPBRG BAUDRATE
0 0 3 77
0 0 2 51
0 1 1 207
1 0 2 112
1 0 1 160
1 1 4 225

19. Calcular precargas en decimal y en HEX para el timer 3


4,80E+07 1,20E+07 =Fosc/4
precarga
ms 30 21 39 9 24 10
PREESCALA 8 4 8 2 8 2
En HEX:
precarga = 65,536 - ms*(Fosc/4/prescala/1000)

Prof. S. Saucedo Guía ETS Micros 2016 4


20. Calcular precargas en HEX para timer 0 en modo de 16 bits. Fosc = 48MHz. Llenar
seis de los huecos.

miliseg 100,0 140,0 220,0 300,0 400,0 500,0 700,0 850,0 1200,0
preescala 32 32 64 64 128 128 256 256 256
TMR0H 0x32 0x6D 0x7F 0x64
TMR0L 0x84 0xEC 0xDE 0xE5 0xD4 0x46

21. Hacer un programa en assembler que envíe un carácter introducido mediante un


teclado matricial a un LCD de 2*16 caracteres.

22. En el PWM del CCP2 del PIC18F4550 se intenta tener 60% de duty. Llenar los cinco
huecos de la siguiente tabla. Datos: cuatro en binario y uno en decimal.

Frec. Hz Prescala PR2 T2CON CCPR2L CCP2CON


2,952.76 16 00000111 10011000 00111100
2,976.19 16 11111011 10010111 00001100
3,000.00 16 11111001 00000111 00111100
3,024.19 16 11110111 00000111 10010100
16 11110101 00000111 10010011 00101100

Prof. S. Saucedo Guía ETS Micros 2016 5


23. Para un ciclo de instrucción de 0.08334 µs Calcular retardo de siguiente subrutina.

R2 equ 0x17 ; localidades de RAM


R3 equ 0x18
DELAY
MOVLW D’200’
MOVWF R2
AGAIN MOVLW D’180’
MOVWF R3
AQUÍ NOP
NOP
DECF R3, F
BNZ AQUÍ
DECF R2, F
BNZ AGAIN
RETURN

24. Programar el modo Compare del CCP2 para generar una onda rectangular con
periodo de 480µs y duty de 200 µs.

Configurar el módulo CCP2 en modo PWM igual que en caso anterior utilizando como
pin de salida RC1 o RB3 en función del estado de la directiva:

#pragma config CCP2MX=ON // Señal PWM en RC1


#pragma config CCP2MX=OFF // Señal PWM en RB3

Prof. S. Saucedo Guía ETS Micros 2016 6


25. Para seis fuentes de interrupción llenar los huecos y agregar otras tres.

Interrupción Bandera(registro) Permisivo (registro) Prioridad(registro)


TMR0 TMR0IF(INTCON) TMR0IE(INTCON) TMR0IP(INTCON2)
TMR1 TMR1IF (PIR1) TMR1IE (PIE1)
TMR2 TMR2IF (PIR1) TMR2IP (IPR1)
TMR3 TMR3IF ( ) TMR3IE (PIE2) TMR3IP (IPR2)
INT1 INT1IF (PIR1) INT1IE ( ) INTI1IP (INTCON3)
RCIF RCIF ( PIR1) RCIE ( PIE1)

26. Usar lenguaje C para tomar lecturas de temperatura y salvarlas en la EEPROM del
PIC18F.

27. Asumir que WREG tiene dos BCDs empacados. Escriba un programa que convierta
ambos BCDs empacados a dos números ASCII y los ponga en las localidades 0x11 y
0x10.

28. Asumir que las localidades 0x20 y 0x21 tienen sendos dígitos BCD en formato ASCII.
Escriba un programa que los convierta a dos BCDs empacados en la localidad 0x23.

Prof. S. Saucedo Guía ETS Micros 2016 7


29. En las localidades 0x1200 a 0x122F de flash se tienen 48 números de ocho bits, sin
signo. Hacer un programa en C que los clasifique, colocándolos en RAM. Colocar a partir
de la localidad 0x120 los números menores a 0x56; a partir de la localidad 0x160 a los
números mayores a 0xB1 y los restantes ponerlos a partir de la localidad 0x140.

30. En las localidades 0x1240 a 0x126F de flash se tienen 48 números de ocho bits, con
signo. Hacer un programa en C que los clasifique, colocándolos en RAM. Colocar a partir
de la localidad 0x220 los números menores a -86; a partir de la localidad 0x260 a los
números mayores a 86 y los restantes ponerlos a partir de la localidad 0x240.

31. En las localidades 0x1300 a 0x134F de flash se tienen 40 números de 16 bits, sin signo.
Hacer un programa en C que los clasifique, colocándolos en RAM. Colocar a partir de la
localidad 0x320 los números menores a 0x175F; a partir de la localidad 0x380 a los
números mayores a 0x4CB8 y los restantes ponerlos a partir de la localidad 0x340.

32. Usar algoritmo heapsort o algoritmo mergesort en C para ordenar de modo ascendente
catorce números de ocho bits con signo situados en memoria RAM del PIC18F.

33. Usar algoritmo quicksort o algoritmo insertion sort en C para ordenar catorce números
de ocho bits con signo situados en memoria RAM del PIC18F.

34. Usar algoritmo heapsort o algoritmo bubble sort en assembler para ordenar catorce
números de ocho bits sin signo situados en memoria RAM del PIC18F.

35. Analizar lo que hace el siguiente programa.

BCF TRISD, 5 ; RD5 es una salida


MOVLW 0x08 ; Timer 0, 16 bits, clk inter, sin prescala
MOVWF T0CON ; Carga reg T0CON
AQUÍ MOVLW 0xFF ; TMR0H = FFH (byte alto)
MOVWF TMR0H
MOVLW 0x30 ; TMR0L = 0x30 (byte bajo)
MOVWF TMR0L
BCF INTCON,TMR0IF ; Limpia bit de interrupción
BTG LATD,5 ; Conmuta a RD5
BSF T0CON,TMR0ON ; Arranca timer 0
AGAIN BTFSS INTCON,TMR0IF ; monitorea bandera del timer
BRA AGAIN
BCF INTCON, TMR0ON ; Apaga al timer 0
BRA AQUI ; Recarga TMR0H y TMR0L

Registro T0CON:

36. Rehacer problema anterior con pre escala de 64 y con el PIN RD3.

37. Se conectan las seis puntas de la sonda lógica a los pines RD5 a RD0 del PIC18F.
Aplicar siete combinaciones con dos pines puestos como entrada y cuatro como

Prof. S. Saucedo Guía ETS Micros 2016 8


salida. Cada combinación debe durar 300 ms. Dos de las salidas deben ser 1 y las
otras dos deben ser 0.

38. Emplear la instrucción de multiplicar para diseñar un generador de números pseudo


aleatorios de ocho bits, sin signo.

39. Hacer un programa en C (o assembler) que maneje cinco interrupciones: INT0, INT1,
TMR0, TMR1 y RBI; las primeras tres de prioridad alta y las dos últimas de baja prioridad.

40. En las localidades de flash 0x1230 a 0x1233 se tiene el número HEX 0x7DE8CA5B y
en las localidades flash 0x1234 a 0x1237 se tiene el número HEX 0xB872C69A. Obtener
la resta del primero del segundo y dejar resultado HEX en RAM a partir de la localidad
0x30.

41. Hacer un programa en assembler para generar números pseudo aleatorios de 32 bits
usando un registro de corrimiento con retro lineal (Linear Feedback Shift Register).

Prof. S. Saucedo Guía ETS Micros 2016 9


Ver: http://www.electricdruid.net/index.php?page=techniques.practicalLFSRs

rlf macro file,dest


rlcf file,dest
endm
rrf macro file,dest
rrcf file,dest
endm
;*************************************************************************
;Variable definitions
; These variables are only needed if low priority interrupts are used.
; More variables may be needed to store other special function registers
used in the interrupt routines.
SHIFT_REG3 equ 0x20
SHIFT_REG2 equ 0x21
SHIFT_REG1 equ 0x22
SHIFT_REG0 equ 0x23
NEW_REG0 equ 0x25 ;The replacement SHIFT_REG0 byte
TEMP_REG3A equ 0x30 ; Exactly what they say on the tin.
TEMP_REG3B equ 0x31
TEMP_REG2A equ 0x32 ; Temporales copias de REGs 2 & 3
TEMP_REG2B equ 0x33

Main:

; *** main code goes here **


call Cfgptos ;Subrutina para configurar puertos I/O
movlw 0x76
movwf SHIFT_REG3
movlw 0xD6
movwf SHIFT_REG2
movlw 0x16
movwf SHIFT_REG1
movlw 0xD3
movwf SHIFT_REG0
Ciclo
movf PORTB,W
nop
movwf LATA
rcall NoiseSource
goto Ciclo

42. Hacer un programa para crear un minutero: segundero usando un reloj externo de 1.0
Hz para crear un conteo en el timer 1.

Prof. S. Saucedo Guía ETS Micros 2016 10


43. Hacer un programa en assembler para generar números pseudo aleatorios de 16 bits.
Usar el método de Lehmer.

44. Hacer un programa para crear un minutero: segundero usando un reloj externo de 1.0
Hz para crear un evento en el pin RB7. Ver diagrama siguiente.

45. Llenar seis de los huecos para la operación del timer 2. Fosc/4 = 12 MHz.

Fosc/4= 1,20E+07 1,20E+07 1,20E+07 1,20E+07 1,20E+07 1,20E+07 1,20E+07 1,00E+00 1,20E+07
pre_esca 16 16 16 4 4 4 4 1
post_esca 14 5 7 13 6 13 15 12
PR2 145 163 189 115 103 94 78
frecuencia 4,31E+02 3,29E+02 7,94E+02 9,32E+02 2,78E+03 2,14E-04 6,29E+03
periodo 2,32E-03 1,26E-03 1,07E-03 4,46E-04 1,88E-04 3,60E-04 1,59E-04

Prof. S. Saucedo Guía ETS Micros 2016 11


46. Hacer un programa en assembler para generar números pseudo aleatorios de 24 bits
usando un registro de corrimiento con retro lineal (Linear Feedback Shift Register).

Ver: http://www.electricdruid.net/index.php?page=techniques.practicalLFSRs

47. Hacer un programa para calcular el CRC de la cadena ASCIIZ “123456789”


Elegir uno de los estándares: CRC-5/EPC, CRC-5/ITU, CRC-5/USB,
CRC-6/CDMA2000-A, CRC-6/CDMA2000-B, CRC-6/DARC, CRC-7, CRC-7/ROHC,
CRC-8, CRC-8/CDMA2000.

Ver: http://reveng.sourceforge.net/crc-catalogue/1-15.htm

48. Hacer un programa para calcular el CRC de 16 bits de la cadena ASCIIZ “123456789”
Elegir uno de los estándares: ARC, CRC-16/AUG-CCITT, CRC-16/BUYPASS,
CRC-16/CCITT-FALSE, CRC-16/DNP, CRC-16/USB, KERMIT, XMODEM.

Ver: http://reveng.sourceforge.net/crc-catalogue/16.htm

Prof. S. Saucedo Guía ETS Micros 2016 12


Ver: http://www.lammertbies.nl/comm/info/crc-calculation.html

49. Hacer un programa para generar una onda senoidal de 100 Hz, según el siguiente
diagrama, que usa sólo siete bits del puerto D.

50. Hacer un programa que lea el estado de cuatro interruptores y exhibir en un display de
siete segmentos el número hexadecimal dado por el estado del DIP switch. Ver la figura
siguiente. Usar una rutina con 16 veces la instrucción RETLW.

Prof. S. Saucedo Guía ETS Micros 2016 13


51. Hacer un programa para implementar un Reloj en Tiempo Real (RTC). Cablear según
la figura.

Ver páginas 603 a 627 del libro de Pearson/Prentice Hall:

Prof. S. Saucedo Guía ETS Micros 2016 14


52. Hacer un programa en C para crear un reloj minutero: segundero que vaya de 00:00 a
39:59 y reinicie, usando retardos por software. Cableado que debe usarse:

53. Escribir el código en C para escribir y leer en una de dos memorias usando la interfaz
serie I2C, según el diagrama siguiente.

Prof. S. Saucedo Guía ETS Micros 2016 15


54. Para la tabla de cálculos del timer 0 en modo de ocho bits, llenar seis huecos.

timer 0, modo 8 bits Fosc/4 = 12e6 = 1,20E+07 Hz


prescala 64 128 128 32 32 256 256
precarga 93 136 231 213 97 154
Hz 1150,31 1201,92 7500 3232,76 294,81
ms 1,28 0,832 0,1333 0,30933 0,11467 2,176

prescala 64 128 128 32 32 256 256


precarga 130 191 218 225 197
Hz 1194,27 1442,31 4934,21 2819,55 794,49 384,22
ms 0,83733 1,34400 0,20267 0,35467 0,08267 2,60267

55. Hacer un programa que copie doce localidades de RAM de la 0x30 a la 0x3B en la
memoria EEPROM del PIC.

56. Hacer un programa que copie doce localidades de memoria EEPROM del PIC a doce
localidades de RAM de la 0x40 a la 0x4B.

57. Hacer un programa para controlar 28 LEDs usando el integrado MM5451, según la
siguiente figura.

Prof. S. Saucedo Guía ETS Micros 2016 16


58. Hacer un programa para controlar un convertidor de digital a analógico con interfaz SPI
según la figura siguiente.

59. Asumir un cristal de 20 MHz Crear un programa para generar una onda cuadrada de
60 Hz por el pin PORTD 7. Usar al timer0 con en modo 16 bits, con una pre escala =
64.

60. Asumir que Fosc = 48 MHz. Calcular la frecuencia de la onda cuadrada generada en la
terminal PORTD 0 con el siguiente programa-

BCF TRISD,0 ; RD0 es UNA salida


MOVLW 0x48 ; timer0, 8 bits, sin prescala
MOVWF T0CON ; carga registro de control
BCF INTCON,TMR0IF ; limpia bandera de interrupción

Prof. S. Saucedo Guía ETS Micros 2016 17


ACA MOVLW 0x7 ; TMR0L = 7, el byte bajo
MOVWF TMR0L ; carga byte del timer0
RCALL DELAY ;
BTG PORTD,0 ; conmuta salida
BRA ACA ; carga regisstro otra vez
;-------------------------- retardo usando el timer 0
DELAY BSF T0CON,TMR0ON ; arranca al timer
AQUÍ BTFSS INTCON,TMR0IF ; coteja bandera del timer hasta que
BRA AQUÍ ; desborde
BCF T0CON,TMR0ON ; detiene al TMR0
BCF INTCON,TMR0IF ; limpia bandera del timer
RETURN

61. La siguiente se exhiben algunos tipos de datos de C para el PIC18F. Completar cuatro
de los huecos.

Tipo de Dato Cantidad de bits Rango


unsigned char 8 bits 0 a 255
char 8 bits -128 a
unsigned int 0 a 65,535
int 16 bits a +32,767
unsigned short 0 a 65,535
16 bits -32,768 a +32,767
unsigned short long 24 bits 0a
short long -8’388,608 a
32 bits -2,147’483,648 a

Prof. S. Saucedo Guía ETS Micros 2016 18

También podría gustarte