Estoy diseñando un programa en PIC C que me genere una melodia, con frecuencias por medio de un PIC, en especifico el 16F877A, soy novato y ya logre generar dos tonos segidos, pero mi problema es que no le puedo dar tiempo a estos tonos, me explico quiero que el primer tono dure 1 seg. y el otro 2 seg. pongo el codico que tengo hasta ahora y el montaje en proteus por si les interersa, ademas tengo PROHIBIDO usar la libreria TONES, si me pueden ayudar les agradesco.
Código:
#include <16F877A.h>
//#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=4000000)
#use fast_io(B)
#use fast_io(C)
#define Speaker PIN_B0 // Altavoz conectado a RB0
void main(){
set_tris_b(2); // RB<7:2> Salida RB1 entrada (Pulsador) RB0 Salida (Speaker)
do{ // Bucle infinito
while(!input(PIN_B1)){ // Mientras se presione el
// interruptor conectado a RB1.
int i; // contador
output_low(pin_B0); // inicializo la salida del puerto donde esta el speaker a "0"
for (i=0; i<255 ;i++) // ciclo de generacion de señal periodica de periodo descrito + adelante
{
output_high(pin_B0); //semiciclo en "1" logico
delay_us(500); // mantener el "1" por 500 microsegundos
output_low(pin_B0); //semiciclo en "0" logico
delay_us(500); // mantener el "0" por 500 microsegundos
} //Fin de UN periodo de la señal
delay_ms(300); //esperar unos 0,3 segundos antes de generar el otro tono
for (i=0;i<255;i++) // Otro tono, igual al anterior
{
output_high(pin_B0);
delay_us(500);
output_low(pin_B0);
delay_us(500);
}
delay_ms(200);
}
}while(true);
}