TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: PIC_16F877A 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
-
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
-
#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.
-
Hola.
Se repite indefinidamente, porque esta el while(true)
saludos
-
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();
}
}
-
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.
-
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();
}