Beruflich Dokumente
Kultur Dokumente
PUERTOS DIGITALES
1.- La siguiente aplicacin utiliza un C PIC16F877A para implementar un semforo con
temporizador, implementando los siguientes modos de operacin:
a) Explicar que hacen, como funcionan, que parmetros requieren y que valores devuelven
las funciones: output_X(), input_X Y delay_ms().
OUTPUT=Sacar Datos
INPUT = Meter Datos
Para escribir (sacar) datos en un puerto.
Output_X(valor)
Ejm: encender led 0 y led 1
Output_A(0x03)
Para leer (meter) datos de un puerto.
Int x;
X=input_A()
Delay_ms()
Detiene la ejecucin del programa la cantidad de tiempo en ms que se indica en la propia
instruccin. De tal manera que 1000 equivale a 1seg.
b) Explicar para que se utiliza la directiva define
Se utiliza para definir los pines de salida para poder facilitar la realizacin de la
programacin asignando otro tipo de cdigos como ENT1.
c) Definir un propio cuadro de tiempos e implementar el mismo modificando el programa.
Modo
Descripcin
Rojo
Amarillo
Verde
00
Modo normal
4 seg
1 seg
4 seg
01
Modo vehicular
10 seg
5 seg
30 seg
10
Modo peatn
15 seg
3 seg
10 seg
11
Modo nocturno
----
200 ms
CODIFICACION,#include<16f877a.h>
#fuses XT,NOWDT
#use delay (clock=4M)
#use standard_io(B)
#use standard_io(C) void main()
{
int modo,dec,unid,i,temp; do{
modo=input_A(); modo=modo&0x03; switch(modo){
case 0: output_B(0x01); for(i=10;i>0;i--){ dec=i/10; unid=i%10;
temp = dec<<4 | unid; output_C(temp); delay_ms(1000);
}
output_B(0x02); for(i=2;i>0;i--){ dec=i/10; unid=i%10;
temp=dec<<4 | unid;
output_C(temp); delay_ms(1000);
}
output_B(0x04); for(i=10;i>0;i--){ dec=i/10; unid=i%10; temp=dec<<4 | unid; output_C(temp);
delay_ms(1000);
}
break; case 1:
output_B(0x01); for(i=10;i>0;i--){ dec=i/10; unid=i%10;
temp = dec<<4 | unid; output_C(temp); delay_ms(1000);
}
output_B(0x02); for(i=10;i>0;i--){ dec=i/10; unid=i%10;
temp=dec<<4 | unid;
output_C(temp); delay_ms(1000);
}
output_B(0x04); for(i=20;i>0;i--){ dec=i/10; unid=i%10; temp=dec<<4 | unid; output_C(temp);
delay_ms(1000);
}
break; case 2:
output_B(0x01); for(i=20;i>0;i--){ dec=i/10; unid=i%10;
temp = dec<<4 | unid; output_C(temp); delay_ms(1000);
}
output_B(0x02); for(i=5;i>0;i--){ dec=i/10; unid=i%10;
temp=dec<<4 | unid;
output_C(temp); delay_ms(1000);
}
output_B(0x04); for(i=10;i>0;i--){ dec=i/10; unid=i%10; temp=dec<<4 | unid; output_C(temp);
delay_ms(1000);
}
break; case 3:
output_B(0x02); delay_ms(200); output_B(0x00); delay_ms(200); break;
}
}while(true);
}
----
a) Explicar que hacen, como funcionan, que parmetros requieren y que valores
devuelven las funciones : digitalWrite(), digitalRead(), pinMode() y delay().
R.- Son funciones digitales orientadas a revisar el estado y la configuracin de las entradas y
salidas digitales
Las funciones y parmetros de cada digital
digitalWrite() = Nos permite escribir un pin digital con 1 0
digitalRead() = Nos permite Leer un pin digital (0 1).
pinMode() = Nos permite configurar un pin.
delay() = Detiene la ejecucin del programa la cantidad de tiempo en ms que se indica en la propia
instruccin. De tal manera que 1000 equivale a 1seg.
b) Explicar cmo operan las funciones setup() y loop() en el entorno de programacin
ARDUINO.
funcin setup() = se invoca una sola vez cuando el programa empieza. Se utiliza para inicializar
los modos de trabajo de los pins, o el puerto serie. Debe ser incluido en un programa aunque no
haya declaracin que ejecutar.
funcin loop() = Despus de llamar a setup(), la funcin loop() hace precisamente lo que sugiere
su nombre, se ejecuta de forma cclica, lo que posibilita que el programa este respondiendo
continuamente ante los eventos que se produzcan en la tarjeta
Descripcin
Rojo
Amarillo
Verde
00
Modo normal
15 seg
4 seg
15 seg
01
Modo vehicular
8 seg
3 seg
15 seg
10
Modo peatn
15 seg
4 seg
10 seg
11
Modo nocturno
----
300 ms
----
1) Codificacin
#define A1 0
#define B1 1
void setup() {
#define C1 2
#define D1 3
#define A2 4
#define B2 5
#define C2 6
#define D2 7
#define ROJO 8
#define AMARILLO 9
#define VERDE 10
#define ENT0 12
#define ENT1 13
void loop() {
b0 = digitalRead(ENT0);
b1 = digitalRead(ENT1);
dec = i / 10;
unid = i % 10;
muestraDigitoD1(unid);
modo = 0;
muestraDigitoD2(dec);
delay(1000);
}
break;
case 1:
digitalWrite(ROJO, HIGH);
digitalWrite(AMARILLO, LOW);
digitalWrite(VERDE, LOW);
switch (modo) {
case 0:
dec = i / 10;
digitalWrite(ROJO, HIGH);
unid = i % 10;
digitalWrite(AMARILLO, LOW);
muestraDigitoD1(unid);
digitalWrite(VERDE, LOW);
muestraDigitoD2(dec);
delay(1000);
dec = i / 10;
unid = i % 10;
digitalWrite(ROJO, LOW);
muestraDigitoD1(unid);
digitalWrite(AMARILLO, HIGH);
muestraDigitoD2(dec);
digitalWrite(VERDE, LOW);
delay(1000);
dec = i / 10;
digitalWrite(ROJO, LOW);
unid = i % 10;
digitalWrite(AMARILLO, HIGH);
muestraDigitoD1(unid);
digitalWrite(VERDE, LOW);
muestraDigitoD2(dec);
delay(1000);
dec = i / 10;
unid = i % 10;
digitalWrite(ROJO, LOW);
muestraDigitoD1(unid);
digitalWrite(AMARILLO, LOW);
muestraDigitoD2(dec);
digitalWrite(VERDE, HIGH);
delay(1000);
dec = i / 10;
digitalWrite(ROJO, LOW);
unid = i % 10;
digitalWrite(AMARILLO, LOW);
muestraDigitoD1(unid);
digitalWrite(VERDE, HIGH);
muestraDigitoD2(dec);
delay(1000);
digitalWrite(AMARILLO, HIGH);
digitalWrite(VERDE, LOW);
break;
delay(300);
case 2:
digitalWrite(AMARILLO, LOW);
digitalWrite(ROJO, HIGH);
delay(300);
digitalWrite(AMARILLO, LOW);
break;
digitalWrite(VERDE, LOW);
for (i = 15; i > 0; i--) {
}
}
dec = i / 10;
unid = i % 10;
void muestraDigitoD1(int n) {
muestraDigitoD1(unid);
switch (n) {
muestraDigitoD2(dec);
case 0:
delay(1000);
digitalWrite(A1, LOW);
digitalWrite(B1, LOW);
digitalWrite(ROJO, LOW);
digitalWrite(C1, LOW);
digitalWrite(AMARILLO, HIGH);
digitalWrite(D1, LOW);
digitalWrite(VERDE, LOW);
break;
case 1:
dec = i / 10;
digitalWrite(A1, HIGH);
unid = i % 10;
digitalWrite(B1, LOW);
muestraDigitoD1(unid);
digitalWrite(C1, LOW);
muestraDigitoD2(dec);
digitalWrite(D1, LOW);
delay(1000);
break;
case 2:
digitalWrite(ROJO, LOW);
digitalWrite(A1, LOW);
digitalWrite(AMARILLO, LOW);
digitalWrite(B1, HIGH);
digitalWrite(VERDE, HIGH);
digitalWrite(C1, LOW);
digitalWrite(D1, LOW);
dec = i / 10;
unid = i % 10;
break;
case 3:
muestraDigitoD1(unid);
digitalWrite(A1, HIGH);
muestraDigitoD2(dec);
digitalWrite(B1, HIGH);
delay(1000);
digitalWrite(C1, LOW);
digitalWrite(D1, LOW);
break;
break;
case 3:
case 4:
digitalWrite(ROJO, LOW);
digitalWrite(A1, LOW);
digitalWrite(B1, LOW);
switch (n) {
digitalWrite(C1, HIGH);
case 0:
digitalWrite(D1, LOW);
digitalWrite(A2, LOW);
break;
digitalWrite(B2, LOW);
case 5:
digitalWrite(C2, LOW);
digitalWrite(A1, HIGH);
digitalWrite(D2, LOW);
digitalWrite(B1, LOW);
break;
digitalWrite(C1, HIGH);
case 1:
digitalWrite(D1, LOW);
digitalWrite(A2, HIGH);
break;
digitalWrite(B2, LOW);
case 6:
digitalWrite(C2, LOW);
digitalWrite(A1, LOW);
digitalWrite(D2, LOW);
digitalWrite(B1, HIGH);
break;
digitalWrite(C1, HIGH);
case 2:
digitalWrite(D1, LOW);
digitalWrite(A2, LOW);
break;
digitalWrite(B2, HIGH);
case 7:
digitalWrite(C2, LOW);
digitalWrite(A1, HIGH);
digitalWrite(D2, LOW);
digitalWrite(B1, HIGH);
break;
digitalWrite(C1, HIGH);
case 3:
digitalWrite(D1, LOW);
digitalWrite(A2, HIGH);
break;
digitalWrite(B2, HIGH);
case 8:
digitalWrite(C2, LOW);
digitalWrite(A1, LOW);
digitalWrite(D2, LOW);
digitalWrite(B1, LOW);
break;
digitalWrite(C1, LOW);
case 4:
digitalWrite(D1, HIGH);
digitalWrite(A2, LOW);
break;
digitalWrite(B2, LOW);
case 9:
digitalWrite(C2, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(D2, LOW);
digitalWrite(B1, LOW);
break;
digitalWrite(C1, LOW);
case 5:
digitalWrite(D1, HIGH);
digitalWrite(A2, HIGH);
break;
digitalWrite(B2, LOW);
digitalWrite(C2, HIGH);
digitalWrite(D2, LOW);
void muestraDigitoD2(int n) {
break;
case 6:
digitalWrite(B2, LOW);
digitalWrite(A2, LOW);
digitalWrite(C2, LOW);
digitalWrite(B2, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(C2, HIGH);
break;
digitalWrite(D2, LOW);
case 9:
break;
digitalWrite(A2, HIGH);
case 7:
digitalWrite(B2, LOW);
digitalWrite(A2, HIGH);
digitalWrite(C2, LOW);
digitalWrite(B2, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(C2, HIGH);
break;
digitalWrite(D2, LOW);
break;
case 8:
digitalWrite(A2, LOW);
}
}
CONCLUCIONES.En Este laboratorio optamos por utilizar ARDUINO donde primeramente hicimos la
simulacion del circuito de un semaforo con temporizador en el programa ISIS , luego
realizamos la codificacion e implementando tiempos para luego compilar al
simulador y asi confirmar que el circuito funciona correctamente.
Luego se procedio a grabar al controlador ARDUINO para acoplar luego a nuestro
circuito semaforo en el protoboad, y asi se concluyo con exito el proyecto.