Segundo Parcial Programación en Mikro C para microcontroladores PIC PIC16F877 M.I. Alfredo Santillana Cedillo Practica No. 4.- Luces secuenciales • Programa que envíe la siguiente secuencia de datos al puerto de salida D. Secuencia : – 00000001 – 00000010 – 00000100 – 00001000 – 00010000 – 00100000 – 01000000 – 10000000 M.I. Alfredo Santillana Cedillo Luces secuenciales (algoritmo) 1. 2. 3. 4. Configuración de puerto como salida de datos. Envío de primer dato al puerto de salida Envío de segundo dato al puerto de salida Envío de tercer dato al puerto de salida . 9. Envío de ultimo dato al puerto de salida 10. Regresar a 2 M.I. Alfredo Santillana Cedillo Luces secuenciales (diagrama de flujo) Luces Configura puerto como salida Envía 00000100 Envía 00100000 Envía 00000001 Envía 00001000 Envía 01000000 Envía 00000010 Envía 00010000 Envía 10000000 M.I. Alfredo Santillana Cedillo Luces secuenciales (esquemático) M.I. Alfredo Santillana Cedillo Luces secuenciales (programa) void main(void) { TRISD = 0; while ( 1 ) { PORTD = 0b00000001; Delay_ms(500); PORTD = 0b00000010; Delay_ms(500); PORTD = 0b00000100; Delay_ms(500); PORTD = 0b00001000; Delay_ms(500); PORTD = 0b00010000; Delay_ms(500); PORTD = 0b00100000; Delay_ms(500); PORTD = 0b01000000; Delay_ms(500); PORTD = 0b10000000; Delay_ms(500); } } M.I. Alfredo Santillana Cedillo // CONFIGURACION COMO PUERTO DE SALIDA // CICLO INFINITO // ENVIA PRIMER DATO // ENVIA SEGUNDO DATO // ENVIA TERCER DATO Practicas 5 y 6: Luces Secuenciales 5. El alumno enviara una secuencia de datos distinta por el puerto B, utilizando retardos por software de distintas duraciones, con incrementos de 100 milisegundos entre si. 6. El alumno enviara la secuencia de datos por el puerto A, utilizando retardos por software con duración de 800 milisegundos. M.I. Alfredo Santillana Cedillo 100001 010010 001100 010010 100001 Arreglos (definiciones) #define MAX 50 int vector_one[10]; /* arreglo de 10 enteros */ float vector_two[MAX]; /* arreglo 50 flotantes */ float vector_three[MAX - 20]; /* arreglo 30 flotantes */ char numero[5]; short dato[8]; long temperatura[15]; unsigned peso[7]; unsigned short d[3]; M.I. Alfredo Santillana Cedillo Arreglos (Inicializando) /* Arreglo el cúal contiene el número de días de cada mes */ int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; /* La declaraciones es identica a la anterior */ int *days = {31,28,31,30,31,30,31,31,30,31,30,31}; /* Las dos declaraciones son identicas */ const char msg1[ ] = {'T', 'e', 's', 't', '\0'}; const char msg2[ ] = "Test"; M.I. Alfredo Santillana Cedillo Condicionante if if (expresión) conjunto 1 [else conjunto 2] • Cuando la expresión evaluada es verdadera, Las instrucciones del conjunto 1 son ejecutadas. Si la expresión es falso, las instrucciones del conjunto 2 es ejecutada. La expresión debe ser evaluada a un valor entero. Los paréntesis que encierra la expresión son obligatorios. • La palabra especial “else conjunto 2” es opcional. M.I. Alfredo Santillana Cedillo Símbolos de condición Operador Operación == igual != no igual > mayor que < menor que >= mayor que o igual a <= menor que o igual a M.I. Alfredo Santillana Cedillo Practica No. 7 Luces con arreglo (algoritmo) 1. 2. 3. 4. 5. Configuración de puerto como salida. Inicializa apuntador. Envío de dato apuntado. Incrementa apuntador. Si apuntador es mayor que o igual a 8 inicia el apuntador. 6. Regresa a 3. M.I. Alfredo Santillana Cedillo Luces con arreglo (diagrama de flujo) Luces Configura puerto como salida Incrementa apuntador si Limpia apuntador apuntador ≥ 8 Envía dato apuntado M.I. Alfredo Santillana Cedillo no Limpia apuntador Luces con arreglo (programa) short dato [ 8 ] = {1, 2, 4, 8, 16, 32, 64, 128}; short apunta; void main(void) { TRISB = 0; // Configura puerto apunta = 0; // Limpia apuntador while(1) // Ciclo infinito { PORTB = dato [ apunta ]; // Envía dato Delay_ms(1000); apunta ++; // Incrementa apuntador if ( apunta > = 8 ) // Si apuntador ≥ 8 apunta = 0; // Limpia apuntador } } M.I. Alfredo Santillana Cedillo Practica No. 8 Luces Secuenciales por Asignación de Puerto 1. El alumno enviara una secuencia por el puerto B usando los valores almacenado en un arreglo. M.I. Alfredo Santillana Cedillo 00000011 00000110 00001100 00011000 00110000 01100000 11000000