Bien aquí esta el ejerció en cuestión .en cuanto al código esta echo un desastre solamente estaba jugando para hacer unas prueba con una melodía completa esta pésimamente optimizado y hay mucho que esta demás o se podría hacer mejor aquí lo interesante es que reproduzcan la melodía y juzguen por ustedes mismos si merece la pena continuar con esto
#org 0x1eaf, 0x1FFF void loader16F877A(void) {} //protect bootloader code for the 8k 16F876/7
#include <tones.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
int cont=1;
int pulsos;
int i=1;
#define SIZE 54
const struct note
{
long tone;
long length;
}noche_de_paz[SIZE] = {
Fb_note[1],750, Gb_note[1],250,Fb_note[1],500, Db_note[1],500, P_note[1],500,
P_note[1],250, Fb_note[1],750, Gb_note[1],250, Fb_note[1],500, Db_note[1],500,
P_note[1],500, P_note[1],250, Cb_note[2],500, Ab_note[1],750, P_note[1],500,
P_note[1],250, B_note[1],1000, B_note[1],500, Fb_note[1],750, P_note[1],500,
P_note[1],250, Gb_note[1],1000, Gb_note[1],500, B_note[1],750, Ab_note[1],250,
gb_note[1],500, Fb_note[1],750, Gb_note[1],250, Fb_note[1],500, Db_note[1],750,
P_note[1],500, P_note[1],250, Gb_note[1],1000, Gb_note[1],500, B_note[1],750,
A_note[1],250, Gb_note[1],500, Fb_note[1],750, Gb_note[1],250, FB_note[1],500,
D_note[1],750, P_note[1],500, P_note[1],250, Cb_note[2],1000, Cb_note[2],500,
E_note[2],750, Cb_note[2],250, Ab_note[1],500, B_note[1],998, Db_note[2],1000,
P_note[1],500, P_note[1],250, B_note[1],500};
#define SIZE2 25
const struct note2
{
long tone2;
long length2;
}jingle_bell[SIZE2] = {
B_note[1],500, B_note[1],500,B_note[1],500, P_note[1],125, B_note[1],500,
B_note[1],500, B_note[1],500, P_note[1],125, B_note[1],250,D_note[2],250
G_note[1],250, A_note[1],250, B_note[1],500, C_note[2],250, C_note[2],250,
C_note[2],500, B_note[1],250, B_note[1],250, B_note[1],500, B_note[1],250,
A_note[1],250, A_note[1],250, B_note[1],250, A_note[1],500, D_note[2],250};
#define SIZE3 42
const struct note3
{
long tone3;
long length3;
}litte_dankey[SIZE3] = {
E_note[1],250, E_note[1],250,G_note[1],1000, E_note[1],500, F_note[1],250,
F_note[1],250, A_note[1],1000,F_note[1],500, E_note[1],250, E_note[1],250,
G_note[1],1000, E_note[1],500,D_note[1],1000, P_note[1],1000, E_note[1],250,
E_note[1],250, G_note[1],1000,E_note[1],500, F_note[1],250, F_note[1],250,
A_note[1],1000, F_note[1],500,G_note[1],250, G_note[1],250, B_note[1],1000,
G_note[1],500, C_note[2],1000,P_note[1],1000, C_note[2],1000, C_note[2],500,
C_note[1],500, B_note[1],750,A_note[1],250, G_note[1],1000, A_note[1],500,
B_note[1],250, A_note[1],250,G_note[1],1000, A_note[1],500, B_note[1],250,
A_note[1],250, G_note[1],1000};
#define SIZE4 58
const struct note4
{
long tone4;
long length4;
}merri_chistmas[SIZE4] = {
c_note[1],500, f_note[1],500,f_note[1],250, g_note[1],250, f_note[1],250,
e_note[1],250, d_note[1],500,ab_note[0],500, d_note[1],500, g_note[1],500,
g_note[1],250, a_note[1],250,g_note[1],250, f_note[1],250, e_note[1],500,
c_note[1],500, e_note[1],500,a_note[1],500, a_note[1],250, ab_note[1],250,
a_note[1],250, g_note[1],250,f_note[1],500, d_note[1],500, c_note[1],250,
c_note[1],250, d_note[1],500,g_note[1],500, e_note[1],500, f_note[1],750,
p_note[1],250, c_note[1],500,f_note[1],500, f_note[1],500, f_note[1],500,
e_note[1],750, p_note[1],250,e_note[1],500, f_note[1],500, e_note[1],500,
d_note[1],500, c_note[1],750,p_note[1],250, c_note[1],500, a_note[1],500,
g_note[1],250, g_note[1],250,g_note[1],250, f_note[1],250, c_note[2],500,
c_note[1],500, c_note[1],250,c_note[1],250, d_note[1],500, g_note[1],500,
e_note[1],500, f_note[1],500,p_note[1],1000};
#define SIZE5 50
const struct note5
{
long tone5;
long length5;
}tamboriler[SIZE5] = {
p_note[1],2000, f_note[1],1000,p_note[1],125, g_note[1],500, p_note[1],62,
a_note[1],1000, p_note[1],125,a_note[1],500, p_note[1],62, a_note[1],500,
p_note[1],62, ab_note[1],250,p_note[1],62, a_note[1],250, p_note[1],62,
ab_note[1],500, p_note[1],62,a_note[1],2000, p_note[1],1000, f_note[1],500,
p_note[1],62, f_note[1],500,p_note[1],62, g_note[1],500, p_note[1],62,
a_note[1],500, p_note[1],62,a_note[1],500, p_note[1],62, a_note[1],500,
p_note[1],62, a_note[1],500,p_note[1],62, ab_note[1],250, p_note[1],62,
a_note[1],250, p_note[1],62,ab_note[1],500, p_note[1],62, a_note[1],2000,
p_note[1],1000, g_note[1],500,p_note[1],62, a_note[1],500, p_note[1],62,
ab_note[1],500, p_note[1],62,c_note[2],500, p_note[1],62, c_note[2],500};
#define SIZE6 50
const struct note6
{
long tone6;
long length6;
}tamboriler2[SIZE6] = {
p_note[1],62, c_note[2],500,p_note[2],62, d_note[2],500, p_note[2],62,
c_note[2],250, p_note[2],62,ab_note[1],250, p_note[1],250, a_note[1],500,
p_note[1],62, g_note[1],2000,p_note[1],200, g_note[1],500, p_note[2],62,
a_note[1],500, p_note[2],62,ab_note[1],500, p_note[2],62, c_note[2],500,
p_note[1],62, c_note[2],500,p_note[2],62, c_note[2],500, p_note[2],62,
d_note[2],500, p_note[2],62,db_note[2],250, p_note[2],62, d_note[2],250,
p_note[1],62, c_note[2],500,p_note[2],62, ab_note[1],1000, p_note[2],125,
d_note[2],250, p_note[2],62,c_note[2],250, p_note[2],62, ab_note[1],500,
p_note[1],62, a_note[1],1000,p_note[1],125, c_note[2],250, p_note[2],62,
ab_note[1],250, p_note[1],500,a_note[1],500, p_note[1],65, g_note[1],2000};
#define SIZE7 50
const struct note7
{
long tone7;
long length7;
}tamboriler3[SIZE7] = {
p_note[1],500, f_note[1],1000,p_note[2],125, g_note[1],500, p_note[2],62,
a_note[1],500, p_note[1],65,a_note[1],500, p_note[1],65, a_note[1],500,
p_note[1],65, a_note[1],500,p_note[2],62, ab_note[1],250, p_note[2],500,
a_note[1],250, p_note[1],500,ab_note[1],500, p_note[1],65, a_note[1],2000,
p_note[1],1000, g_note[1],250,f_note[1],250, p_note[1],500, g_note[1],500,
p_note[1],62, f_note[1],2000,p_note[2],2000, f_note[1],1000, p_note[2],125,
g_note[1],500, p_note[1],62,a_note[1],1000, p_note[1],125, a_note[1],500,
p_note[1],65, a_note[1],500,p_note[2],65, ab_note[1],250, p_note[2],500,
a_note[1],250, p_note[1],500,ab_note[1],500, p_note[1],65, a_note[1],2000,
p_note[1],1000, f_note[1],500,p_note[2],62, f_note[1],500, p_note[2],62};
#define SIZE8 50
const struct note8
{
long tone8;
long length8;
}tamboriler4[SIZE8] = {
g_note[1],500, p_note[1],65,a_note[1],500, p_note[1],65, a_note[1],500,
p_note[1],65, a_note[1],500,p_note[1],62, a_note[1],500, p_note[1],62,
a_note[1],500, p_note[1],65,ab_note[1],250, p_note[1],65, a_note[1],250,
p_note[1],500, ab_note[1],500,p_note[1],65, a_note[1],2000, p_note[1],1000,
g_note[1],500, p_note[1],65,a_note[1],500, p_note[1],65, ab_note[1],500,
p_note[1],65, c_note[2],500,p_note[1],65, c_note[2],500, p_note[1],65,
c_note[2],500, p_note[1],65,c_note[2],500, p_note[2],65, d_note[2],500,
p_note[2],65, c_note[2],250,p_note[1],500, ab_note[1],250, p_note[1],500,
a_note[1],500, p_note[1],65,g_note[1],2000, p_note[1],1000, g_note[1],500,
p_note[1],65, a_note[1],500,p_note[1],65, ab_note[1],500, p_note[1],65,};
#define SIZE9 50
const struct note9
{
long tone9;
long length9;
}tamboriler5[SIZE9] = {
c_note[2],500, p_note[1],65,c_note[2],500, p_note[1],65, c_note[2],500,
d_note[2],500, p_note[1],65,db_note[2],250, p_note[1],500, d_note[2],500,
p_note[2],500, c_note[2],500,p_note[2],65, ab_note[1],1000, p_note[2],125,
d_note[2],500, p_note[1],500,c_note[2],250, p_note[1],500, ab_note[1],500,
p_note[2],65, a_note[1],1000,p_note[2],125, c_note[2],500, c_note[2],250,
p_note[2],500, ab_note[1],250,p_note[2],500, a_note[1],500, p_note[2],62,
g_note[1],2000, p_note[1],500,f_note[1],1000, p_note[1],125, g_note[1],500,
p_note[1],62, a_note[1],500,p_note[2],62, a_note[1],500, p_note[2],62,
a_note[1],500, p_note[1],65,a_note[1],500, ab_note[1],250, p_note[2],500,
a_note[1],250, p_note[1],500,ab_note[1],500, p_note[1],65, a_note[1],2000,};
#define SIZE10 8
const struct note10
{
long tone10;
long length10;
}tamboriler6[SIZE10] = {
a_note[1],2000, p_note[1],500,g_note[1],250, f_note[1],250, p_note[2],500,
g_note[1],500, p_note[1],65,f_note[1],2000};
void main()
{ int i;
INT J;
INT K;
INT L;
int m;
int n;
int O;
int p;
int q;
int r;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
//SET_TIMER0(130);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_B(0b00010000);
output_b(0b00000000);
set_tris_c(0b00000000);
output_c(0b00000000);
enable_interrupts(int_ext); //activar interrupcion externa
ext_int_edge(H_TO_L); //config. de int. por flando de bajada
enable_interrupts(GLOBAL); //todas las interrupciones desactivadas
// TODO: USER CODE!!
while(TRUE)
{
for(i=0; i<SIZE; ++i)
{
generate_tone(noche_de_paz[i].tone,noche_de_paz[i].length);
delay_ms(75);
}
delay_ms(2000);
for(j=0; j<SIZE2; ++j)
{
generate_tone(jingle_bell[j].tone2,jingle_bell[j].length2);
delay_ms(20);
}
delay_ms(2000);
for(K=0; K<SIZE3; ++K)
{
generate_tone(litte_dankey[K].tone3,litte_dankey[K].length3);
delay_ms(75);
}
delay_ms(2000);
for(L=0; L<SIZE4; ++L)
{
generate_tone(merri_chistmas[L].tone4,merri_chistmas[L].length4);
delay_ms(20);
}
delay_ms(2000);
for(m=0; m<SIZE5; ++m)
{
generate_tone(tamboriler[m].tone5,tamboriler[m].length5);
delay_ms(30);
}
for(n=0; n<SIZE6; ++n)
{
generate_tone(tamboriler2[n].tone6,tamboriler2[n].length6);
delay_ms(30);
}
for(o=0; o<SIZE7; ++o)
{
generate_tone(tamboriler3[o].tone7,tamboriler3[o].length7);
delay_ms(30);
}
for(p=0; p<SIZE8; ++p)
{
generate_tone(tamboriler4[p].tone8,tamboriler4[p].length8);
delay_ms(30);
}
for(q=0; q<SIZE9; ++q)
{
generate_tone(tamboriler5[q].tone9,tamboriler5[q].length9);
delay_ms(30);
}
for(r=0; r<SIZE10; ++r)
{
generate_tone(tamboriler6[r].tone10,tamboriler6[r].length10);
delay_ms(30);
}
delay_ms(2000);
}
}