Autor Tema: Semaforo con el pic 16f876a  (Leído 8752 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PIC_16F877A

  • PIC10
  • *
  • Mensajes: 33
Semaforo con el pic 16f876a
« en: 23 de Junio de 2011, 22:54:36 »
#include <16f876a.h>
#fuses xt,nowdt,put,nolvp
#use delay (clock=4000000)
#use fast_io(b)

void led_rojo();
void led_amarillo();
void led_verde();

void main(){
set_tris_b(0x00);
while(true){
led_rojo();
led_amarillo();
led_verde();
led_amarillo();
}
}
void led_rojo(){
output_b(0b00000001);
delay_ms(10000);
output_b(0x00);
}
void led_amarillo(){
output_b(0b00000010);
delay_ms(2000);
output_b(0x00);
}
void led_verde(){
output_b(0b0000100);
delay_ms(10000);
output_b(0x00);
}

hola amigos del foro del todo pic, les quiero pedir un favor es que si me pueden hacer el favor de  corregirme este programa que esta en  C usando el compilador CCS,  este programa no genera error cuando lo compilo y me genera el hex,
 este programa  lo que hace es hacer la funcion de un semaforo
 mi programa hace lo siguiente.
enciende el led rojo y desoues enciende el led amarillo, estos leds  debe estar encendido los 2 al tiempo,  y luego se apagan osea led rojo y led amarillo, mas tarde se enciende el led verde, cuando  termine este siclo anterior,  el led verde  permance y luego me enciende el led rojo, y el amarillo al tiempo,  ahi le dejo  mi programa  pra que lo simulenm y vean  la secuencia que esta haciendo.

gracias jose luis
bogota colombia


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Semaforo con el pic 16f876a
« Respuesta #1 en: 23 de Junio de 2011, 23:56:24 »
Hola.

? pues como esta el programa, no va a hacer lo que quieres ... tal como lo tienes, enciende secuencialmente uno detrás de otro .. habría que adicionar la parte en la que encienden los dos LEDs

Saludos
El papel lo aguanta todo

Desconectado martino84

  • PIC10
  • *
  • Mensajes: 32
Re: Semaforo con el pic 16f876a
« Respuesta #2 en: 24 de Junio de 2011, 13:04:20 »
#include <16f876a.h>
#fuses xt,nowdt,put,nolvp
#use delay (clock=4000000)
#use fast_io(b)

void led_rojo();
void rojo_amarillo();
void led_amarillo();
void amarillo_verde();
void led_verde();

void main(){
set_tris_b(0x00);
while(true){
led_rojo();
led_amarillo();
led_verde();
led_amarillo();
}
}
void led_rojo(){
output_b(0b00000001);
delay_ms(10000);
output_b(0x00);
}


void rojo_amarillo(){
output_b(0b00000011);
delay_ms(10000);
output_b(0x00);
}

void led_amarillo(){
output_b(0b00000010);
delay_ms(2000);
output_b(0x00);
}


void amarillo_verde(){
output_b(0b00000110);
delay_ms(10000);
output_b(0x00);
}

void led_verde(){
output_b(0b0000100);
delay_ms(10000);
output_b(0x00);
}

no es la mejor opcion pero veo que estas medio verde con lo de pics, ademas esto lo va a hacer solo una vez.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Semaforo con el pic 16f876a
« Respuesta #3 en: 24 de Junio de 2011, 18:10:36 »
Hola.

Se repite indefinidamente, porque esta el while(true)

saludos
El papel lo aguanta todo

Desconectado martino84

  • PIC10
  • *
  • Mensajes: 32
Re: Semaforo con el pic 16f876a
« Respuesta #4 en: 25 de Junio de 2011, 05:12:34 »
Ahi esta, lo simule y probe esta tarde lo hice al manchanchi nomas. Cambiale los tiempos para que las transiciones sean como te guste.


#include <16f876a.h>
#fuses xt,nowdt,put,nolvp
#use delay (clock=4000000)
#use fast_io(b)

void led_rojo(){
output_b(0b00000001);
delay_ms(10000);
output_b(0x00);
}

void led_rojo_amarillo(){
output_b(0b00000011);
delay_ms(1000);
output_b(0x00);
}

void led_amarillo(){
output_b(0b00000010);
delay_ms(2000);
output_b(0x00);
}

void led_verde_amarillo(){
output_b(0b00000110);
delay_ms(1000);
output_b(0x00);
}

void led_verde(){
output_b(0b0000100);
delay_ms(10000);
output_b(0x00);
}

void main(){
set_tris_b(0x00);

while(true){
led_rojo();
led_rojo_amarillo();
led_amarillo();
led_verde_amarillo();
led_verde();
led_verde_amarillo();
led_amarillo();
led_rojo_amarillo();
}

}

Desconectado PIC_16F877A

  • PIC10
  • *
  • Mensajes: 33
Re: Semaforo con el pic 16f876a
« Respuesta #5 en: 25 de Junio de 2011, 16:00:04 »
hola amigo antes todo gracias por ayudarme, compile tu programa y me lo simula correctamente, pero no esta haciendo la secuencia  que deseo hacer.
es decir.
 cuando el programa empiesa enciende el led rojo tiene su tiempo de espera, luego enciende el led amarillo, pero cuando llega al amarillo, el led rojo se apaga, el led rojo y el amarillo deben quedar encendido y luego apagarse para encender el led verde, cuando cuando esta el led verde encendio, los led rojo y amarillo deben estar apagado,   cuando el led verde termine su tiempo de espera de encendido debe apagarse para encender led amarillo, y luego el led rojo.

Desconectado martino84

  • PIC10
  • *
  • Mensajes: 32
Re: Semaforo con el pic 16f876a
« Respuesta #6 en: 28 de Junio de 2011, 01:19:20 »
dentro del while acomoda la secuencia como quieras

while(true){
led_rojo();
led_rojo_amarillo();
led_amarillo();
led_verde_amarillo();
led_verde();
led_verde_amarillo();
led_amarillo();
led_rojo_amarillo();
}