Você está na página 1de 20

Microcontroladores y microprocesadores – Ingeniería Mecatrónica ---- Taller 1

1- Indique por lo menos 3 diferencias fundamentales entre los Microcontroladores y los


microprocesadores

 Las capacidades de entradas y salidas, La configuración mínima básica de un


Microprocesador está constituida por un Microprocesador, una memoria RAM, una
memoria ROM, un decodificador de direcciones, lo cual lo convierte en un circuito bastante
engorroso. El Microcontrolador incluye todos estos elementos en un solo Circuito
Integrado.
 El rendimiento de la CPU, El microprocesador tiene mucha más potencia de cálculo, por lo
cual solamente realiza sus funciones con lo que tiene (datos) y su algoritmo o programa
establecida.
 Los microprocesadores son más susceptibles a la interferencia electromagnética debido a
su tamaño y a su cableado externo que lo hace más propenso al ruido. Para los
microcontroladores, el alto nivel de integración reduce los niveles de interferencia
electromagnética.
2- ¿Cuantos tipos de memoria tiene el microcontrolador 16f887 en su interior? ¿Cuál es la función
de cada una de ellas?
 La pila: Se usa para guardar los retornos de instrucciones de salto a subrutinas o
interrupciones. Tiene 8 localidades por 13 bits
 Memoria EEPROM: Espacio de memoria usada para guardar información del usuario que
no se desea perder cuando no hay energía. Conformada por 256 localidades por 8 bits.
 Memoria de programa: Usada para guardar el programa. Tiene una capacidad de 8K
posiciones por 14 bits.
 Memoria de datos: Memoria volátil implementada en 4 bancos de trabajo y distribuida en
2 grandes grupos.
o SFR: Registro de función especial
o GPR: Registros de propósito general

3- Indique la capacidad de almacenamiento de la memoria de programa.


114688 bits (8k (8192) * 14 bits) Por confirmar
4- ¿De los tipos de memoria que tiene el microcontrolador 16F887, cuales son no volátiles?
La pila, EEPROM, memoria de programa.
5- ¿Según el datasheet del microcontrolador 16F887, cual es la resolución del conversor análogo
digital? ¿Qué significa la resolución en este dispositivo?
10 Bits , la cantidad de bits que pueden convertir y guardar.
6- Cuál es el uso de los registros GPR y SFR?.
• Los SFR se usan para configurar los recursos del sistema y los GPR se utilizan como
memoria para guardar datos temporalmente.
7- Como está dividida la memoria de programa del microcontrolador y la memoria de registros del
microcontrolador 16F887
La memoria de programa esta dividida en 8K posiciones por 14 bits cada posición, la memoria de
registros está dividida en 4 bancos de trabajo y distribuida en 2 grandes grupos, SFR y GPR.
8- Que significa vector de RESET?
Es la locación central donde la unidad central de procesamiento va a buscar la primera instrucción
después de que ocurre un reinicio, es decir, donde el microcontrolador siempre comienza a buscar
apenas pueda ejecutar una instrucción.
9- Cuáles son los requerimientos mínimos para colocar en marcha el microcontrolador 16F887?
 Suministro eléctrico
 Circuito de reset.
 Oscilador (Interno o Externo)
10- ¿En el compilador de CCS, a que se llama directivas?
 Son instrucciones que van dirigidas directamente al compilador más que al programa en sí,
se caracterizan por estar antecedidos por el símbolo #.
11- Indique por lo menos 4 tipos de datos que pueden ser manejados en el compilador CCS. Indique
su longitud de bits.
 Char: 8bits
 Float: 32bits
 Long: 16 bits.
 Short: 1 bit.
12- Como se define una variable en el compilador CCS? Escriba un ejemplo
TIPO NOMBRE DE LA VARIABLE = VALOR INICIAL;
Short ejemplo=1;
13- ¿Cuál es la diferencia entre una variable local y una global? ¿Cómo se definen ellas dentro de la
programación?
 Variables locales: Son aquellas que se declaran dentro de una función particular del
programa. Solo tiene significado para la función donde pertenece, fuera de ella, la
variable no es reconocida.
 Variables Globales: Se declaran antes del programa principal, el valor almacenado en
ella puede ser usado por cualquier parte del programa.
14- Indique cuatro ejemplos de operadores Matemáticos
+, -, *, /.
15- Indique cuatro ejemplos de operadores de relación. ¿Para qué sirven?
<,>, ==,!=, sirven para poner una condición haciendo una comparación entre dos valores.
16- ¿Cuál es el uso de la instrucción IF – ELSE?
Evalúa la condición verdadera y falsa de una expresión
17- Cuál es la diferencia que existe entre un ciclo FOR y un WHILE.
La variable contadora y el paso de esta en el FOR se declaran en la cabecera de la instrucción
mientras que, para el WHILE, la variable contadora se declara antes y el paso se declara durante la
instrucción.
18- De que depende el uso de un ciclo WHILE y DO – WHILE?
Si se necesita que la instrucción se ejecute por lo menos una vez se usa el Do-While, de resto se usa
el WHILE.
19- Qué diferencia se puede apreciar entre la instrucción IF-ELSE y la instrucción SWITCH-CASE
La instrucción SWITCH-CASE permite dar diferentes instrucciones comparando la misma variable en
diferentes condiciones, la instrucción IF-ELSE permite hacer lo mismo y además permite comparar
diferentes variables entre sí.
20- ¿En el compilador CCS, como se identifican las Directivas?
Se identifican por comenzar con el símbolo #.
21- ¿Si se desea incluir un fichero dentro de la compilación del programa en uso, cual es la directiva
que permite hacer esta acción?
#include
22- Según el datasheet del microcontrolador 16F887, defina cuantos puertos de entrada/salida
digital posee el dispositivo. ¿De cuántos bits es cada uno de ellos?
El microcontrolador posee 5 Puertos de entrada/salida digital, Los PORTA al PORTD tienen 8 bits y
el PORTE tiene 4 bits.
23- Según el datasheet del microcontrolador 16F887, ¿Qué registros son los encargados de
configurar los puertos del microcontrolador como entradas y salidas digitales? ¿En qué bancos se
ubican?
TRISA, TRISB, TRISC, TRISD,TRISE se encuentran en los bancos 85h al 89h.
24- ¿Qué diferencia existe cuando se usa la función del compilador FAST_IO(puerto) y la función
STANDARD_IO(puerto)?
La función FAST permite al usuario controlar si los puertos son de entrada o de salida mientras que
con la función STANDARD el compilador cambia automáticamente los puertos dependiendo de si la
instrucción que se le mandó al puerto es de entrada o salida.
25- A que se llaman resistencias de PULL UP? ¿Qué puerto del microcontrolador tiene la opción de
este tipo de resistencias?
Son resistencias conectadas al voltaje de entrada y el voltaje de salida, teniendo un pulsador
conectado al voltaje de salida y tierra, cuando el pulsador está en reposo, Vout será prácticamente
Vcc pudiéndose considerar como nivel lógico alto. Ahora bien, cuando se presiona el pulsador, se
deriva toda la corriente a masa, por tanto, Vout será 0v, valor lógico bajo. El puerto B es el que tiene
esta opción.
26- Según el datasheet del microcontrolador 16F887, ¿En qué posiciones de memoria y en que
página se encuentran ubicados los vectores de RESET y de INTERRUPCIÓN?
El vector de Reset se encuentra en la posición de memoria 0000h página 1 y el vector de interrupción
se encuentra en la posición de memoria 0004h página uno.
27- Según lo indicado por el datasheet, los registros ANSEL y ANSELH ¿qué propiedades configuran
en los pines del microcontrolador?
Los registros ANSEL y ANSELH son usados para configurar el modo de entrada/salida de un pin a ser
un pin análogo.
28- Según el datasheet, ¿qué función cumple el registro WPUB y el bit 7 del registro OPTION?
Explicar detalladamente
El registro WPUB se usa para habilitar o deshabilitar los pull ups del puerto B por pin y el bit 7 del
registro Option se usa para habilitar o deshabilitar los pull ups del puerto B de todos los pines.
29- Según el datasheet del microcontrolador 16F887, ¿Qué tipos de puerto de comunicación tiene
el microcontrolador 16F887? ¿Cuáles son?
30- Según el datasheet, ¿Cuál es el rango en que puede ser seleccionado el oscilador interno del
microcontrolador 16F887?
 8 MHz
 4 MHz (default)
 2 MHz
 1 MHz
 500 kHz
 250 kHz
 125 kHz
 31 kHz (LFINTOSC)
31- Según el datasheet, que es un módulo de comparación, que características posee, realice una
descripción de su funcionamiento.
Los comparadores se utilizan para conectar circuitos analógicos a un circuito digital comparando
dos voltajes analógicos y proporcionando una indicación digital de sus magnitudes relativas. Los
comparadores son muy útiles para la construcción de bloques de señales mixtas porque
proporcionan funcionalidad analógica independiente de la ejecución del programa. El módulo
comparador análogo incluye las siguientes características:
• Control de comparación independiente.
• Selección de entrada programable.
• La salida del comparador está disponible interna / externamente.
• Polaridad de salida programable.
• interrupción en el cambio.
• Despertar del sueño.
• Apagado de PWM.
• Puerta Timer1 (habilitación de conteo).
• Sincronización de salida a entrada de reloj Timer1.
• SR Latch.
• Referencia de tensión programable y fija.
Al comparar dos entradas de voltaje análogas se define cuando se manda un alto nivel lógico,
diciendo así que cuando uno de esos dos voltajes supere al otro se manda un alto nivel lógico y
cuando ese mismo voltaje es inferior al otro se manda un bajo nivel lógico.
32- Diseñar un programa que resuelva la siguiente expresión lógica.

33- Construir un programa que lea una entrada binaria de 4 bits y realice su correspondiente
conversión a código GRAY.
34- Desarrollar un programa que realice la conversión de código GRAY a código binario en 8 bits
35- Diseñe un contador binario de 0 a 12, de tal forma que se incremente cuando se pulsa la tecla A
y se decremento cuando se pulsa la tecla B. Si son pulsados simultáneamente las dos teclas, el
contador se resetea a cero.
36- Construya un programa que simule el comportamiento de un Flip Flop tipo JK. El
comportamiento de este dispositivo se puede observar en la siguiente figura. Para este caso, el Flip
Flop responde a su señal de reloj en los flancos de subida.
37- Diseñar un programa que realice el corrimiento de un cero lógico en el puerto B de tal manera
que la secuencia se repita indefinidamente. La secuencia debe ser mostrada a través de LEDs
colocados en dicho puerto. Usar arreglos para desarrollar este programa.

38- En una aplicación industrial, un cilindro (A) acerca hacia la derecha un soporte en el que hay
colocada una pieza de cobre en forma de “L”. Allí, dos cilindros le harán en cada cara una marca
por presión. Primero se la hace el vertical (B) y luego el horizontal (C). Hechas las dos marcas, el
cilindro grande hace retroceder el soporte con la pieza. Para realizar la detección de sus posiciones,
los movimientos extremos de cada cilindro tienen asociados unos sensores finales de carrera; la
secuencia solo empieza una vez ha sido pulsado el interruptor de START y necesariamente los
cilindros se encuentren en su posición inicio.
Diseñar un programa para el microcontrolador 16F887 capaz de atender los requerimientos de la
situación expuesta anteriormente. La siguiente figura apoya el proceso de la máquina.
/* El siguiente programa hace uso de un teclado matricial 4x4 y una LCD 16x2
para crear una calculadora basica (suma, resta, multiplicacion y division)
de nuemros enteros de 3 digitos
*/

#INCLUDE <16F887.H>
#FUSES NOWDT, NOPUT, INTRC_IO, NOMCLR, NOPROTECT, NOBROWNOUT,NOWRT
#USE DELAY(internal = 8MHZ)
#INCLUDE <LCD.C>
#INCLUDE <KBD4X4.C>
#USE FAST_IO(B)

int tecla=0, operador=0;


float resultado = 0, dato1=0, dato2=0;
int1 fin=false;

void main()
{
// se inician las rutinas para el manejo de la LCD y el teclado
kbd_init();
lcd_init();
port_b_pullups(255);
//Presentacion inicial en la LCD
lcd_gotoxy(3,1);
lcd_putc("calculadora");
delay_ms(1000);
lcd_putc("\f"); //Borra la LCD
lcd_gotoxy(1,1);
lcd_putc("dato1= ");
lcd_gotoxy(1,2);
lcd_putc("dato2= ");

while(true)
{
tecla = kbd_getc(); // Es leido el teclado
if (tecla != 0) // Si hay tecla oprimida se procede a identificarla
{
switch(tecla)
{
case 'D': //letra D, tecla de suma
operador = 1; //indica que la operacion es una suma
break;
case 'C': //Letra C, Tecla de resta
operador = 2; //indica que la operacion es una resta
break;
case 'B': //letra B, Tecla de multiplicacion
operador = 3; //indica que la operacion es una multiplicacion
break;
case 'A': // Letra A, Tecla de division
operador = 4; //indica que la operacion es una division
break;
case 0x2A: // Simbolo *. representa el igual (=) de la calculadora
// Se identifica la operacion que se debe realizar con los datos
if (operador == 1) // se realiza la suma de dato1 y dato2
resultado = dato1 + dato2;
if (operador == 2) // se realiza la resta de dato1 y dato2
resultado = dato1 - dato2;
if (operador == 3) // se realiza la multiplicacion de dato1 y dato2
resultado = dato1 * dato2;
if (operador == 4) // se realiza la division de dato1 y dato2
resultado = dato1 / dato2;

// Presenta el resultadode la opercion seleccionada y reestablece la calculadora


// para una nueva operacion
lcd_putc("\f"); //Borra la LCD y presenta el resultado
printf(lcd_putc,"R.= %1.2f", resultado); // se imprime el resultado y se
operador = 0; // reestablece los calculos
lcd_gotoxy(1,1);
dato1 = 0.0;
dato2 = 0.0;
resultado = 0.0;
fin = true; //bandera que indica la finalizacion de la operacion
break;
case 0x23: //Simbolo #, borra la operacion en curso y cominzade nuevo
dato1 = 0.0;
dato2 = 0.0;
resultado = 0.0;
lcd_putc("\f"); //Borra la LCD
lcd_gotoxy(1,1);
lcd_putc("dato1= ");
lcd_gotoxy(1,2);
lcd_putc("dato2= ");
break;
default:
if (fin == true) // despues de una operacion matematica, se reestablece la presentacion
inicial
{
lcd_putc("\f"); //Borra la LCD
lcd_gotoxy(1,1);
lcd_putc("dato1= ");
lcd_gotoxy(1,2);
lcd_putc("dato2= ");
fin = false;
}
tecla = tecla -0x30; // convierte la tecla oprimida en un nuemro decimal
/* La variable "operador" indica si ha sido definida una operacion matematica.
Cuando es cero la entrada del teclado se almacena el dato1 y cuando es diferente.
cero, la entrada del teclado se almacena en dato2 */
if(operador == 0)
{
dato1= dato1*10.0 + tecla*1.0; //Convierte la entrada del teclado en un nuemro
decimal
lcd_gotoxy(8,1);
printf(lcd_putc,"%1.0f",dato1);
}
else
{
dato2= dato2*10.0 + tecla*1.0; //Convierte la entrada del teclado en un nuemro
decimal
lcd_gotoxy(8,2);
printf(lcd_putc,"%1.0f",dato2);
}
break;
}
}
}
}

Você também pode gostar