Está en la página 1de 17

Objetivos

Realizar modificacin de la prctica 1, reprogramando las entradas y salidas

del micro controlador usando lenguaje C.


-

Mantener el funcionamiento del semforo y el secuenciador.

Implementar displays 7segmentos.

Implementar el max232 con la finalidad de comunicar el PIC con un

ordenador.
-

Simular y comprobar el funcionamiento.


La practica 2 se basa principalmente en el uso de displays 7segmentos,

los cuales usaremos en este caso para visualizar la hora programada en el


16F877A, manteniendo la programacin (el semforo y el secuenciador), son
bsicamente 4 displaysctodo comn, los cuales son activados mediante
transistores en intervalos de tiempo tan pequeos q es difcil de diferenciar a
simple vista cuando el display pueda apagarse.
Por otro lado se encuentra el uso de un nuevo dispositivo el Max232, el cual
es un circuito integrado de Maxim que convierte las seales de un puerto serie
RS-232 a seales compatibles con los niveles TTL de circuitos lgicos. El MAX232
sirve como interfaz de transmisin y recepcin para las seales RX, TX, CTS y
RTS.
El circuito integrado tiene salidas para manejar niveles de voltaje del RS-232
(aprox. 7.5 V) que las produce a partir de un voltaje de alimentacin de + 5 V
utilizando multiplicadores de voltaje internamente en el MAX232 con la adicin de
condensadores externos. Esto es de mucha utilidad para la implementacin de
puertos serie RS-232 en dispositivos que tengan una alimentacin simple de + 5
V.

Las entradas de recepcin de RS-232 (las cuales pueden llegar a 25 V), se


convierten al nivel estndar de 5 V de la lgica TTL. estos receptores tienen un
umbral tpico de 1.3 V, y una histresis de 0.5 V.
La versin MAX232A es compatible con la original MAX232, y tiene la mejora
de trabajar con mayores velocidades de transferencia de informacin (mayor tasa
de baudios), lo que reduce el tamao de los condensadores externos utilizados
por el multiplicador de voltaje, 0.1 F en lugar del 1.0 F usado en el dispositivo
original.
Una versin ms nueva de este circuito integrado, el MAX3232 tambin es
compatible con el original, pero opera en un rango ms amplio, de 3 a 5.5 V.
A continuacin se explicar brevemente algunas caractersticas principales del
PIC16F877, directivas de programacin en lenguaje C, para as llegar al desarrollo
de dicha prctica.

MICROCONTROLADOR
Un microcontrolador es un circuito integrado o chip que incluye en su interior las
tres unidades funcionales de una computadora: CPU, Memoria y Unidades de
Entrada-Salida, es decir, se trata de un computador completo en un solo circuito
integrado.
El diagrama de un sistema microcontrolado sera algo as:

Los dispositivos de entrada pueden ser un teclado, un interruptor, un sensor,


etc.

PROGRAMACION
#include <16f877A.h>
#fuses xt,nowdt
#use delay (clock=4000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
// Botones
#define Boton_1 pin_a0
#define Boton_2 pin_a1
#define Boton_3 pin_a2
#define Boton_4 pin_a3
#define led pin_c0
#define led pin_c1
#define led pin_c2
// Leds
// Semaforo 1
#define Verde_1 pin_b0
#define Amarillo_1 pin_b1
#define Rojo_1 pin_b2
// Semaforo 2
#define Verde_2 pin_b3
#define Amarillo_2 pin_b4
#define Rojo_2 pin_b5
#define led1 pin_b6
// Displays
#define Display_1 pin_d4
#define Display_2 pin_d5
#define Display_3 pin_d6

#define Display_4 pin_d7


// Variables de Cambio
int Sw = 0;

// modo

int B2 = 0;

// secuencia

int1 B3 = 0;

// inicio de secuencia

int1 Inter = 0; // Semaforo en Modo Intermitente


int1 Normal = 1; // Semaforo en Modo Normal
int i = 0;
int j = 0;
int k = 0;
int1 HMS= 0;
int Horas_12 = 1;
int Horas_0_9 = 2;
int Minutos_Dec= 0;
int Minutos_Unid= 0;
int Segundos_Dec=0;
int Segundos_Unid=0;
//Declaracion de funciones
void Waitms_1_Segundo();Void Tiempo_Semaforo();Void Botones_Modo0();
Void Botones_Modo1();Void Boton_Inicio(); Void Reloj();Void Horas_Minutos();
Void Tiempo_Reloj();Void Horas_Minutos_Segundos();
void main(){ // Funcion Principal
set_tris_a(0b00001111); // A0, A1, A2 como entrada
set_tris_b(0b00000000);
set_tris_c(0b00000000);
set_tris_d(0b00000000);
output_b(0x00);
while(true){
Secuencia_1:

// Puerto B como Salida

While (B2==0){;
B3=0;
if ((Sw==0) && (B2==0)){output_b(0b00000001);Waitms_1_Segundo();}
output_bit(pin_c0,1);
output_bit(pin_c1,0);
output_bit(pin_c2,0);
if(B2==1){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=0;goto Secuencia_1;}
if ((Sw==0) && (B2==0)){output_b(0b00000010);Waitms_1_Segundo();}
if(B2==1){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=0;goto Secuencia_1;}
if ((Sw==0) && (B2==0)){output_b(0b00000100);Waitms_1_Segundo();}
if(B2==1){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=0;goto Secuencia_1;}
if ((Sw==0) && (B2==0)){output_b(0b00001000);Waitms_1_Segundo();}
if(B2==1){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=0;goto Secuencia_1;}
if ((Sw==0) && (B2==0)){output_b(0b00010000);Waitms_1_Segundo();}
if(B2==1){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=0;goto Secuencia_1;}
if ((Sw==0) && (B2==0)){output_b(0b00100000);Waitms_1_Segundo();}
if(B2==1){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=0;goto Secuencia_1;}
if ((Sw==0) && (B2==0)){output_b(0b01000000);Waitms_1_Segundo();}
if(B2==1){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=0;goto Secuencia_1;}
if ((Sw==0) && (B2==0)){output_b(0b10000000);Waitms_1_Segundo();}
if(B2==1){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=0;goto Secuencia_1;}B2=0;}// Fin Del While Para B2 = 0

While (B2==1){Boton_Inicio();
B3=0;
if ((Sw==0) && (B2==1)){output_b(0b11111111);Waitms_1_Segundo();}
if(B2==2){break;} if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=1;Continue;}
if ((Sw==0) && (B2==1)){output_b(0b11111110);Waitms_1_Segundo();}
if(B2==2){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=1;Continue;}
if ((Sw==0) && (B2==1)){output_b(0b11111100);Waitms_1_Segundo();}
if(B2==2){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=1;Continue;}
if ((Sw==0) && (B2==1)){output_b(0b11111000);Waitms_1_Segundo();}
if(B2==2){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=1;Continue;}
if ((Sw==0) && (B2==1)){output_b(0b11110000);Waitms_1_Segundo();}
if(B2==2){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=1;Continue;}
if ((Sw==0) && (B2==1)){output_b(0b11100000);Waitms_1_Segundo();}
if(B2==2){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=1;Continue;}
if ((Sw==0) && (B2==1)){output_b(0b11000000);Waitms_1_Segundo();}
if(B2==2){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=1;Continue;}
if ((Sw==0) && (B2==1)){output_b(0b10000000);Waitms_1_Segundo();}
if(B2==2){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=1;Continue;} B2=1; }// Fin Del While para B2=1
While (B2==2){Boton_Inicio();
B3=0;
if ((Sw==0) && (B2==2)){output_b(0b00011000);Waitms_1_Segundo();}

if(B2==3){break;}if (Sw==1){output_b(0x00);goto Semaforo;}


if (B3==1){B2=2;Continue;}
if ((Sw==0) && (B2==2)){output_b(0b00100100);Waitms_1_Segundo();}
if(B2==3){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=2;Continue;}
if ((Sw==0) && (B2==2)){output_b(0b01000010);Waitms_1_Segundo();}
if(B2==3){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=2;Continue;}
if ((Sw==0) && (B2==2)){output_b(0b10000001);Waitms_1_Segundo();}
if(B2==3){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=2;Continue;}
if ((Sw==0) && (B2==2)){output_b(0b01000010);Waitms_1_Segundo();}
if(B2==3){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=2;Continue;}
if ((Sw==0) && (B2==2)){output_b(0b00100100);Waitms_1_Segundo();}
if(B2==3){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=2;Continue;}
if ((Sw==0) && (B2==2)){output_b(0b00011000);Waitms_1_Segundo();}
if(B2==3){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=2;Continue;}
if ((Sw==0) && (B2==2)){output_b(0b00000000);Waitms_1_Segundo();}
if(B2==3){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=2;Continue;}B2=2;}//Fin del while Para B2=2
while (B2==3){Boton_Inicio();
B3=0;
if ((Sw==0) && (B2==3)){output_b(0b00011000);Waitms_1_Segundo();}
if(B2==0){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=3;Continue;}
if ((Sw==0) && (B2==3)){output_b(0b00111100);Waitms_1_Segundo();}

if(B2==0){break;}if (Sw==1){output_b(0x00);goto Semaforo;}


if (B3==1){B2=3;Continue;}
if ((Sw==0) && (B2==3)){output_b(0b01111110);Waitms_1_Segundo();}
if(B2==0){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=3;Continue;}
if ((Sw==0) && (B2==3)){output_b(0b11111111);Waitms_1_Segundo();}
if(B2==0){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=3;Continue;}
if ((Sw==0) && (B2==3)){output_b(0b01111110);Waitms_1_Segundo();}
if(B2==0){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=3;Continue;}
if ((Sw==0) && (B2==3)){output_b(0b00111100);Waitms_1_Segundo();}
if(B2==0){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=3;Continue;}
if ((Sw==0) && (B2==3)){output_b(0b00011000);Waitms_1_Segundo();}
if(B2==0){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=3;Continue;}
if ((Sw==0) && (B2==3)){output_b(0b00000000);Waitms_1_Segundo();}
if(B2==0){break;}if (Sw==1){output_b(0x00);goto Semaforo;}
if (B3==1){B2=3;Continue;}}//Fin del while Para B2=3
B2=0;Continue; } // Fin while Infinito

//****************************************************************************

Semaforo:
output_b(0x00);Sw=1;Normal=1;Inter=0;B3= 0;
output_bit(pin_c0,0);
output_bit(pin_c1,1);
output_bit(pin_c2,0);

while ((Sw==1)&&(Normal==1)){
for(i=1 ; i<= 8 ; i++)
{output_bit(Verde_1,1);output_bit(Rojo_2,1);//Tiempo_Semaforo();
if((Sw==1)&&(Normal==1)){Tiempo_Semaforo();}
if(Sw==2){Tiempo_Reloj();}
if(Normal==0){goto Intermitente;}
if(Sw==0){Sw=0;B2=0; goto Secuencia_1;}}
for(i=1 ; i<= 2 ; i++)
{output_bit(Verde_1,0);output_bit(Amarillo_1,1);//Tiempo_Semaforo();
if((Sw==1)&&(Normal==1)){Tiempo_Semaforo();}
if(Sw==2){Tiempo_Reloj();}
if(Normal==0) {goto Intermitente;}
if(Sw==0){Sw=0;B2=0;goto Secuencia_1;}}
output_bit(Amarillo_1,0);output_bit(Rojo_2,0);
for(i=1 ; i<= 5 ; i++)
{output_bit(Verde_2,1);output_bit(Rojo_1,1);//Tiempo_Semaforo();
if((Sw==1)&&(Normal==1)){Tiempo_Semaforo();}
if(Sw==2){Tiempo_Reloj();}
if(Normal==0) {goto Intermitente;}
if(Sw==0){Sw=0;B2=0;goto Secuencia_1;}}
for(i=1 ; i<= 3 ; i++)
{output_bit(Verde_2,0);output_bit(Amarillo_2,1);
if((Sw==1)&&(Normal==1)){Tiempo_Semaforo();}
if(Sw==2){Tiempo_Reloj();}
if(Sw==0){Sw=0;B2=0;goto Secuencia_1;}}
output_bit(Amarillo_2,0); output_bit(Rojo_1,0);Tiempo_Semaforo();
if(Sw==0){Sw=0;B2=0;goto Secuencia_1;}}
intermitente:
output_b(0x00);Sw=1;Inter=1;Normal = 0;

while ((Normal==0)&&(Inter==1)) {
output_bit(Amarillo_1,1);output_bit(Rojo_2,1);
if((Sw==1)&&(Normal==0)){Tiempo_Semaforo();}
if(Sw==2){Tiempo_Reloj();}
if (Inter==0){goto Semaforo;}if(Sw==0){Sw=0;B2=0; goto Secuencia_1;}
output_bit(Amarillo_1,0);output_bit(Rojo_2,0);
if((Sw==1)&&(Normal==0)){Tiempo_Semaforo();}
if(Sw==2){Tiempo_Reloj();}
if (Inter==0){goto Semaforo;}if(Sw==0){Sw=0;B2=0; goto Secuencia_1;}
}
} // Fin While
//****************************************************************************

void Boton_Inicio(){
if (input(Boton_3)==0){B3 = 1;Sw=0;delay_ms(200);}}
void Waitms_1_Segundo(){ // Inicio de la subrutina
Reloj();
for(j=0; j<=30 ;j++){
Horas_Minutos();
Boton_inicio();
Botones_Modo0();
Botones_Modo0();
Botones_Modo1();
Horas_Minutos_Segundos();
delay_ms(10);
}
}
void Botones_Modo0(){
// Preguntar Por el modo

if (Sw==0){

// // Inicio Del if Principal / Indica el Modo 0

if (input(Boton_1)==0){Sw = 1;delay_ms(200); }
} // Fin Del If Principal
// Preguntar por la secuencia
if (input(Boton_2)==0){
delay_ms(200);
B2 ++;
//B3 = B2;
if (B2==4){
B2=0;
}
// Preguntar por el inicio de secuencia
Boton_Inicio();
} // Fin de La rutina
}
void Botones_Modo1(){
// Preguntar Por el modo
if (Sw==1){

// // Inicio Del if Principal / Indica el Modo 0

if (input(Boton_1)==0){Sw = 0;delay_ms(200);
} // Fin Del If Principal
}
} // Fin de La rutina
void Tiempo_Semaforo(){
Reloj();
for(j=0;j<=30;j++){
Horas_Minutos_Segundos();
Horas_Minutos();
if (Sw==1){

// // Inicio Del if Principal / Indica el Modo 0

if (input(Boton_1)==0){delay_ms(200);Sw=2;

} // Fin Del If Principal


}

if (Inter==0){ // Inicio Del if Principal


if (input(Boton_3)==0){Inter = 1;Normal=0;delay_ms(100);}}
if (Inter==1){
if (input(Boton_3)==0){Inter = 0;Normal=1;delay_ms(100);
} // Modo Normal Desactivado
} //Fin Del iF principal
// Preguntar por el Modo Normal
if (Normal==0){ // Inicio Del if Principal
if (input(Boton_2)==0){Inter = 0;Normal = 1;delay_ms(100);}
} //Fin Del iF principal
if (Normal==1){ // Inicio Del if Principal
if (input(Boton_2)==0){Sw=1;Inter = 1; Normal = 0; delay_ms(100);}
} //Fin Del iF principal
delay_ms(10);}
} // Fin de La rutina
Void Reloj(){
Segundos_Unid ++;
if (Segundos_Unid>9){
Segundos_Unid = 0;
Segundos_Dec++;
if (Segundos_Dec>5){
Segundos_Dec=0;
Minutos_Unid++;

if(Minutos_Unid >9){
Minutos_Unid=0;

Minutos_Dec++;
if (Minutos_Dec>5){
Minutos_Dec=0;
Horas_0_9++;
if (Horas_0_9>9){
Horas_0_9=0;
Horas_12++;
if (Horas_12>1){
Horas_12=0;
}
}
}
}
}
}
}

Void Horas_Minutos(){
if (HMS==0){
Output_d(Minutos_Unid);
output_bit(Display_4,1);
delay_ms(5);
output_bit(Display_4,0);
Output_d(Minutos_Dec);
output_bit(Display_3,1);
delay_ms(5);
output_bit(Display_3,0);
Output_d(Horas_0_9);
output_bit(Display_2,1);

delay_ms(5);
output_bit(Display_2,0);
Output_d(Horas_12);
output_bit(Display_1,1);
delay_ms(5);
output_bit(Display_1,0);
//output_bit(Display_4,1);
}
if (HMS==1){
Output_d(Segundos_Unid);
output_bit(Display_4,1);
delay_ms(5);
output_bit(Display_4,0);
Output_d(Segundos_Dec);
output_bit(Display_3,1);
delay_ms(5);
output_bit(Display_3,0);
Output_d(Minutos_Unid);
output_bit(Display_2,1);
delay_ms(5);
output_bit(Display_2,0);
Output_d(Minutos_Dec);
output_bit(Display_1,1);
delay_ms(5);
output_bit(Display_1,0);}
}
Void Horas_Minutos_Segundos(){
if (input(Boton_4)==0){
delay_ms(200);

if (HMS == 0){
HMS=1;}
else
HMS=0;
}
}
Void Tiempo_Reloj(){
output_bit(pin_c0,0);
output_bit(pin_c1,0);
output_bit(pin_c2,1);
if (Sw==2){
//Segundos=0;
Segundos_Unid ++;
if (Segundos_Unid>9){
Segundos_Unid = 0;
Segundos_Dec++;
if (Segundos_Dec>5){
Segundos_Dec=0;}
}
Horas_Minutos();
for(k=0;k<=9;k++){
Horas_Minutos();
if (input(Boton_1)==0){
Sw=0;
delay_ms(200);}
if (input(Boton_2)==0){
delay_ms(200);
if ((Horas_12>=1)&&(Horas_0_9==2)){
Horas_12=0;Horas_0_9=0;}

//Horas_Minutos()
Horas_0_9++;
Horas_Minutos();
if (Horas_0_9>9){
Horas_0_9=0;
Horas_12++;
Horas_Minutos();}}
if (input(Boton_3)==0){
delay_ms(200);
Minutos_Unid++;
if(Minutos_Unid >9){
Minutos_Unid=0;
Minutos_Dec++;
Horas_Minutos();}
if (Minutos_Dec>5){
Minutos_Dec=0;}
Horas_Minutos();}
if (input(Boton_4)==0){
Sw=1;delay_ms(100);}
delay_ms(50);
Horas_Minutos();
}
}
}

U
N
E
X
P
O

UNIVERSIDAD NACIONAL EXPERIMENTAL POLITCNICA


ANTONIO JOS DE SUCRE
VICE-RECTORADO LUS CABALLERO MEJAS
NCLEO CHARALLAVE
INGENIERA MECATRNICA
MICROCONTROLADORES

LABORATORIO 2

PROFESOR:

ALUMNOS:

Osmar Funes

PITA, Franklin
VIELMA, Mario

Charallave; Febrero del 2013