Sunteți pe pagina 1din 7

“Año de la Universalización de la Salud”

Práctica de Laboratorio

DOCENTE: MERLO GALVEZ, Juan Luis

ALUMNOS:

 RAMOS FLORES, Anderson Ismael

 MAYTA RUIZ, Carlos Javier

 ILIZARBE ORDOÑEZ Ernan

CARRERA PROFESIONAL: INGENIERÍA ELÉCTRICA

ASIGNATURA: MICROCONTROLADORES
HUANCAYO Mayo de 2020

ENUNCIADO DEL PROBLEMA


Controlar el funcionamiento de una red semafórica, El semáforo cuenta con un
interruptor que permite encenderlo y apagarlo. Al estar el semáforo apagado ninguna
luz debe permanecer encendido, para ello utilizamos el PIC18F2550.

ESQUEMA PICTÓRICO (DIBUJO DESCRIPTIVO DEL PROBLEMA)

Dibujo descriptivo del problema.

El siguiente problema inicia haciendo los cálculos matemáticos para controlar el


tiempo, en este caso utilizamos una frecuencia de 2MHz y un predivisor de
256.
Para iniciar con el programa pusimos las 5 luces apagadas y a continuación
con la sentencia if encendimos la luz verde de automóviles y la luz roja de
peatones y controlamos un tiempo de 20 segundos, pasado estos 20 segundos
se encienda la luz amarilla durante el tiempo de 5 segundos, terminados estos
5 segundos se enciende la luz roja de automóviles durante 25 mientras que a
los 27 segundos se apaga la luz roja de peatones y se enciende la luz verde
durante el periodo de 21 segundos de peatones; cumpliendo un ciclo de
trabajo.
Posteriormente vuelve a la posición inicial iniciando nuevamente dicha
secuencia.

Tiempos:
20 segundos: H=103 L=105
5 segundos: H=217 L=218
2 segundos: H=240 L=190
21 segundos: H=95 L=200
25 segundos H=65 L=68

ESQUEMA CIRCUITAL: Programa de mikroC a Proteus

Prueba de experimental:

Prueba final:
PROGRAMACION:

/* ****************************************************************************
* Programa: Problema 02, Guía de Práctica 05
* Descripción: Controlar el funcionamiento de una red semafórica con
* la secuencia de la figura. El semáforo cuenta con una
* llave (interruptor) que permite encenderlo y apagarlo.
* Al estar el semáforo apagado ninguna luz debe permanecer
* encendida. Al encenderlo, debe iniciarse la secuencia
* indicada. Los tiempos deben controlarse con cualquiera
* de los cuatro temporizadores del PIC18F2550.
* Fecha: 20/05/20
**************************************************************************** */

// Definiciones y constantes
#define S1 RA0_bit
#define V1 LATB0_bit
#define A1 LATB1_bit
#define R1 LATB2_bit
#define V2 LATB3_bit
#define R2 LATB4_bit
#define ON 1
#define OFF 0

//variables
bit R2_actual;

void main()
{
// Configuración
OSCCON=0x53; // Oscilador interno a 2 MHz
ADCON1=0x0F; // Puerto A --> digital
TRISA=0x01; // RA0 --> Entrada
TRISB=0; // RB4:RB0 --> Salidas
TRISC=0; // Puerto C no se usa
// Timer0 en modo de 16 bits con predivisor 1:256, inicia apagado
T0CON=0x17;

// Inicialización --> Todo inicia apagado


V1=OFF; A1=OFF; R1=OFF; V2=OFF; R2=OFF;

// Bucle principal
while(1)
{
/* ********************************* Primer if 1 **************************** */
if(S1 && !V1 && !A1 && !R1 && !V2 && !R2 && !V2 )
{
// Encender LED verde de automóviles y encender LED rojo de peatones
V1=ON; R2=ON;
TMR0H=103; TMR0L=105; // Preparar Timer0 para 20 s
TMR0IF_bit=0; // Borrar el flag de Timer0
TMR0ON_bit=ON; // y encender el temporizador
}

/* ********************************* Segundo if ***************************** */


if(TMR0IF_bit && S1 && V1 && !A1 && !R1 && !V2 && R2 )
{
// Apagar LED verde de automóviles y encender LED ambar se automóviles
V1=OFF; A1=ON;
TMR0H=217; TMR0L=218; // Preparar Timer0 para 5 s
TMR0IF_bit=0; // Borrar el flag de Timer0
R2_actual=R2 ;
}
/* ********************************** Tercer if ***************************** */
if(TMR0IF_bit && S1 && !V1 && A1 && !R1 && !V2 && R2_actual )
{
// Apagar LED ambar de automóviles y encender LED rojo se automóviles
A1=OFF; R1=ON;
TMR0H=240; TMR0L=190; // Preparar Timer0 para 2 s
TMR0IF_bit=0; // Borrar el flag de Timer0
}
/* ********************************** Cuarto if ***************************** */
if(TMR0IF_bit && S1 && !V1 && !A1 && R1 && !V2 && R2_actual )
{
// Encender LED verde de peatones y apagar LED rojo peatonal
V2=ON; R2_actual=OFF;
TMR0H=95; TMR0L=200; // Preparar Timer0 para 21 s
TMR0IF_bit=0; // Borrar el flag de Timer0
R2=R2_actual ;
}
/* ********************************** Quinto if ***************************** */
if(TMR0IF_bit && S1 && !V1 && !A1 && R1 && V2 && !R2 )
{
// Apagar LED verde peatonal y encender LED rojo peatonal
V2=OFF; R2=ON;
TMR0H=240; TMR0L=190; // Preparar Timer0 para 2 s
TMR0IF_bit=0; // Borrar el flag de Timer0
}
if(TMR0IF_bit && S1 && !V1 && !A1 && R1 && !V2 && R2 )
{ V1=OFF; A1=OFF; R1=OFF; V2=OFF; R2=OFF;
}
/*********************************** Sexto if ****************************** */
if(!S1)
{
V1=OFF; A1=OFF; R1=OFF; V2=OFF; R2=OFF;
TMR0ON_bit=OFF; // y apagar el temporizador
}
}
}

S-ar putea să vă placă și