Fase 2 : Programación básica con bucles de control.
MICROCONTROLADORES
PROYECTO N° 01
- Utilizar al microcontrolador en aplicaciones de control electrónico.
- Desarrollar y ejecutar programas en un microcontrolador PIC
- Programar y configurar interfaces básicas del microcontrolador.
II. COMPETENCIA ESPECIFICA DE LA SESIÓN
- Manejo de puertos de forma grupal e independiente para manejo de luces
- Programación de sonidos mediante sub rutinas.
- Creación de Subrutinas mediante funciones.
- Declaración de variables enteras.
III. CONTENIDOS A TRATAR
- Control de puertos como entradas y/o salidas
- Generación de salida pulsante
- Bucles de control
IV. RESULTADOS
- Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.
V. MATERIALES Y EQUIPO
- CCS Compiler instalado.
- Entrenador de PICS
- Pantalla LCD
- PIC16F877A
- Motor DC
- Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
- PC con Software de simulación.
IX. TAREAS GUIADAS DENTRO DEL LABORATORIO
1. Transcriba el programa mostrado, compile dicho programa, simule en Proteus y compruebe
funcionamiento en Tarjeta Entrenadora. Responda a las preguntas planteadas.
2. Preguntas:
a. ¿Para qué sirve el símbolo “!” antes del comando “input”?
El signo ‘!’ delante de una instrucción sirve para negamos esta, es decir, al poner "!" a una entrada estamos negando esa entrada, si este PIN recibe un 0 lógico hará que el PIC lo lea como 1 logico y viceversa.
b. ¿Qué valores acepta el tipo de variable ENTERO?
Un tipo de dato entero en computación es un tipo de dato que puede representar un subconjunto finito de los números enteros. El número mayor que puede representar depende del tamaño del espacio usado por el dato y la posibilidad (o no) de representar números negativos. Los tipos de dato entero disponibles y su tamaño dependen del lenguaje de programación usado así como la arquitectura en cuestión. Por ejemplo, si para almacenar un número entero disponemos de 4 bytes de memoria tememos que:
4 Bytes =
4x8 = 32 bits
Con 32 bits
se pueden representar 232=4294967296 valores:
·
Sólo positivos (enteros sin signo): del 0 al
4294967295
·
Positivos y negativos (enteros con signo): del
-2147483648 al 2147483647
c. ¿con qué comando introduzco retardos del orden de micro segundos?
DelayMicroseconds()
Transcriba el programa mostrado, compile dicho programa, simule en Proteus y compruebe
funcionamiento en Tarjeta Entrenadora. Responda a las preguntas planteadas
Preguntas:
¿Cuál sería el código más eficiente para emitir un sonido “bip” cada vez que se pulse una
tecla cualquiera?
Usando una subrutina, para llamarla cuando sea necesario.
Realizar lo siguiente:
1. Descripción de los principales BUCLES DE CONTROL: while, if, if-else, for.
Los bucles de control son estructuras
condicionales o estructuras de programación que permiten modificar las escalas
de ejecución en las instrucciones
de un programa , todas las estructuras
de control poseen un solo punto de entrada.
Las estructuras de control se pueden clasificar en secuenciales, iterativas y de control avanzado, esta es una de las
características por las cuales la programación se basa en las reglas de la programación estructurada.
Los bucles de
control son variados pero mencionaremos los principales y los más usados:
ü Bucle de control “WHILE”
Es conocido como
el bucle puede que no pase , en este bucle se ejecuta la instrucción sucesivamente si se
sigue cumpliendo la condición
While(condición)
EJEMPLO
<script type=”text/javascript”>
var contador = 0;
……while ( contador<10 )
……{
……document.write(contador+”<br />”);
……contador++;
……}
</script>
ü Bucle de
control “IF”
El bucle “if” es utilizado para ejecutar el fragmento de un
código en función de los valores de una
variable , se trata de una estructura de
control que permite redirigir
la ejecución de una instrucción
según la evaluación de una condición simple , si es falso o verdadero
If(tomar
decisiones)
EJEMPLO
<script type=”text/javascript”>
…..var valor1, valor2;
…..valor1 = 3;
…..valor2 = 3;
……….if (valor1 == valor2 ) {
……….document.write (“Son iguales”)
……….}
</script>
ü
Bucle de control “IF – ELSE”
El bucle “IF- ELSE “ nos
brinda una instrucción de ejecución o no ejecución de la instrucción de
acuerdo a los valores establecidos , si la instrucción es verdadera se ejecuta pero si no lo es no
se ejecuta el otro bloque de instrucciones.
IF
– ELSE ( IF TOMAR DECISION AFRIMATIVA
ELSE TOMAR OTRA DECISION)
EJEMPLO
<script type=”text/javascript”>
var nombre;
nombre = prompt(“Hola, ¿Quién eres, Ana o Isa?”,””);
…… if ( nombre == “Ana” ) { // Aquí podemos usar OR ( || ), para reducir código. [ Ana o Isa ]
…… alert(“Eres Ana”);
…… }
…… else
…… …… {
…… …… …… if ( nombre == “Isa” ) {
…… …… …… alert (“Eres Isa”);
…… …… }
…… …… …… else { alert (“No eres ni Ana ni Isa”);
…… …… …… }
…… …… }
</script>
ü Bucle de control “FOR”
El bucle de control “for” es denominado como una herramienta de control bucles es una estructura de control el cual analiza
un valor inicial respecto de la
condición y actualiza resultados
Este bucle de control permite ejecutar un conjunto de sentencias cierto numero de veces
EJEMPLO
<script type=”text/javascript”>
var contador = 0;
for ( contador; contador<10; contador++ )
{
document.write(” Este es el número ” + contador + “<br />”);
}
</script>
<script type=”text/javascript”>
var contador = 0;
for ( contador; contador<10; contador++ )
{
document.write(” Este es el número ” + contador + “<br />”);
}
</script>
2. Elaborar un programa que encienda un led a la vez cada vez que se presione un pulsador y al
llegar al sexto pulso, que emita 3 bips y el programa se detenga allí hasta que se reinicie dicho
programa presionando RESET. Muestre la simulación de dicho programa.
#include <16f877a.h> // Incluimos archivo
con PIC a utilizar
#use delay (clock=20M) // Indicamos al compilador
que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT // Configuración básica de los
fusibles
int salida=0b1000000; // Declaramos variable
"salida" como entera y valor UNO
int pulsos =0; // Declaramos variable
"pulsos" como entera y valor CERO
void main () // FUNCION PRINCIPAL
del programa, indispensable
{
output_c(0b00000000);
// Sacamos por el puerto C el valor de salida (00000000)
while
(pulsos<6) //
Bucle de REPETICION mientras pulsos sea menor a 6
{
IF
(!input(PIN_A5)) // SI
detectamos 0 voltios en PIN A5 (presionando pulsador)
{
salida
= salida >> 1; //
Recorremos el contenido de "salida" una posición a la derecha
output_c(salida);
// Sacamos por el puerto C el valor de salida
delay_ms(500); // "Congela el
tiempo" durante 500 ms para evitar falsos disparos
pulsos= pulsos+1;
// Aumentamos en uno la variable pulsos
}
}
FOR (int i=0;i<=2;++i) //Se repetirá 3 veces el
sonido BIP
{
FOR
(int BIP=0;BIP<=20;++BIP)
// Se repetirá 20 veces los comandos siguientes entre llaves
{
output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5
voltios)
delay_ms(1);
// "Congela el tiempo" durante 1ms
output_low(PIN_E1);
// Pone a "0" el pin E1
delay_ms(1);
// "Congela el tiempo" durante 1ms
}
delay_ms(1000);
//delay de 1 segundo para espacio entre cada BIP
}
}
3. Vídeo mostrando las tareas realizadas en laboratorio:
Link del video:
4. Video mostrando en SIMULACION el programa solicitado.
Link del video:
OBSERVACIONES Y CONCLUSIONES
OBSERVACIONES:
- Observamos que al colocar el signo ‘!’ delante de una instrucción negamos esta, es decir, al poner !INPUT(PIN_A5) estamos negando la entrada por el PIN A5, si este PIN recibe un 0 lógico hará que el PIC lo lea como 1 logico.
- El buzzer piezoeléctrico de la placa entrenadora solo detecta señal analógica, esto es, señales que tengan frecuencias, según esta el pitido será más o menos agudo.
- Observamos que la sentencia WHILE nos permite entrar en un bucle si el argumento de la esa sentencia es verdadero, y con la sentencia FOR logramos repetir un bucle de acuerdo a las veces que le indiquemos. - Podemos asignar a variables valores decimales o binarias según nos convenga, para usarlas como salidas.
- El programa CCS Compiler se integra perfectamente con PROTEUS para el proceso de depuración.
- Permite insertar partes de código de otras paginas web, o archivos como word, pdf, etc. directamente sin que se modifique dicho código en el programa CCS compiler.
CONCLUSIONES
- Aprendimos a manejar el puerto C de nuestro PIC 16F877A usándolo como salida para encender LEDs, utilizando ciertos PINES de los puertos A C D y E como entradas a través de pulsadores.
- Utilizamos las sentencias FOR y WHILE para repetir acciones verificando anteriormente que se cumpla una condición y la sentencia IF para verificar que una condición sea verdadera y realizar alguna acción.
- Usar variables tipo entero (int) para realizar nuestro código en CCS Compiler, estas variables usan 32 bits de memoria y pueden tomar valores desde -2,147,483,648 hasta 2,147,483,647.
- Vimos que las subrutinas forman parte del algoritmo principal, las cuales permiten resolver una tarea específica.
Comentarios
Publicar un comentario