hola amigos quisiera que me den una mano con este codigo cual sera el problema con el copilador:
codigo:
#include <16F876.H>
#fuses HS,XT,NOPUT,NOPROTECT,NOWDT
#use delay(clock=8M)
#include <Flex_lcd.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(c
///**** DEFINIMOS NOMBRES A PUERTOS ****///
#bit CENTENAS = 0x06.4
#bit UNIDADES = 0x06.5
#bit SPEEDUP = 0x06.6
#bit SPEEDDOWN = 0x06.7
///**** VARIABLES GLOBALES ***///
int contador,stop,Duty,FlagRamp,
mil,cen,dec,uni,
uni2,dec2,cen2,mil2;
void reset()
{
mil=0; dec=0; cen=0; uni=0;
uni2=0; dec2=0; cen2=0; mil2=0;
contador=0;
output_b(0x00);
output_c(0x00);
output_a(0x00);
Stop=0;
FlagRamp=0;
Duty=0;
set_pwm1_duty(0); //Borra la pantalla LCD
}
///**** FUNCIÓN PANTALLA DE ARRANQUE ****///
void inicial()
{
lcd_gotoxy(2,1); lcd_putc("BOBINADORA 3.0");
lcd_gotoxy(2,2); lcd_putc("INOXSTEEL 2009");
delay_ms(3000);
lcd_putc("\f");
}
///**** FUNCIÓN FIN DE BOBINADO ****///
void Fin()
{
int i;
for (i=0;i<5;i++)
{
lcd_putc("\f");
delay_ms(300);
lcd_gotoxy(5,1); lcd_putc("BOBINADO");
lcd_gotoxy(4,2); lcd_putc("FINALIZADO");
delay_ms(300);
}
lcd_putc("\f");
reset();
}
///**** INTERRUPCIÓN TIMER0 ****///
/// TIMER0 EN MODO CONTADOR ///
/// LLEVA EL CONTEO POR SENSOR EXTERNO ///
#int_TIMER0
Void TIMER0_isr(void)
{
contador=1;
set_timer0(255);
clear_interrupt(int_TIMER0);
}
///**** INTERRUPCIÓN RB0 ****///
/// PUESTA EN MARCHA SI HAY CANTIDAD INTRODUCIDA ///
#int_EXT
void Start_isr(void)
{
if (uni!=0 || cen!=0)
{lcd_putc("\f"); Stop=1;}
clear_interrupt(int_EXT);
}
///**** INTERRUPCIÓN RB4-RB7 ****///
/// TOMA LOS DATOS RECIBIDOS EN LOS PULSADORES ///
/// CENTENAS, UNIDADES, VELOCIDAD + Y - ///
#int_RB
Void Pulsadores_isr()
{
if (SPEEDUP==1) if (duty<82) Duty+=4;
if (SPEEDDOWN==1)if (duty>2) Duty-=4;
if (CENTENAS==1) cen++;
if (UNIDADES==1) uni++;
if (uni>9) {dec++; uni=0;}
if (dec>9) dec=0;
if (cen>9) {mil++; cen=0;}
if (mil>9) mil=0;
clear_interrupt(int_RB);
}
///**** INTERRUPCIÓN TIMER1 ****///
/// SE ENCARGA DEL ARRANQUE SUAVE DEL MOTOR ///
/// AL INICIAR EL BOBINADO - DE 0% A 50% VEL. ///
#int_TIMER1
Void SoftStart()
{
if (stop==1 && Duty<42 && FlagRamp==0)
{Duty+=2; set_timer1(50000);}
if (Duty==42) FlagRamp=1;
}
///****FUNCIÓN PRINCIPAL****///
Void Main(Void)
{
int16 speed;
speed=0;
set_tris_a(0b110000);
set_tris_b(0b11110001);
set_tris_c(0b00000000);
///**** HABILITACIÓN Y AJUSTE DE INTERRUPCIONES****///
enable_interrupts(int_EXT);
enable_interrupts(int_TIMER0);
enable_interrupts(int_TIMER1);
enable_interrupts(int_RB);
enable_interrupts(global);
ext_int_edge(L_TO_H);
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);
setup_timer_2(T2_DIV_BY_16,82,1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_ccp1(CCP_PWM);
clear_interrupt(int_RB);
clear_interrupt(int_EXT);
clear_interrupt(int_RTCC);
clear_interrupt(int_ccp1);
reset();
lcd_init();
inicial();
while (true)
{
///****BLOQUE PRINCIPAL DE PRESELECCIÓN****///
if (stop==0)
{
lcd_gotoxy(1,1); lcd_putc("INTRODUCE EL N");
lcd_gotoxy(15,1); lcd_putc(223);
lcd_gotoxy(1,2); lcd_putc("DE ESPIRAS");
lcd_gotoxy(12,2); printf(lcd_putc,"%u",mil);
lcd_gotoxy(13,2); printf(lcd_putc,"%u",cen);
lcd_gotoxy(14,2); printf(lcd_putc,"%u",dec);
lcd_gotoxy(15,2); printf(lcd_putc,"%u",uni);
}
///****BLOQUE EN FUNCIONAMIENTO****///
if (Stop==1)
{
lcd_gotoxy( 1,1); lcd_putc("BOBINANDO");
delay_ms(20);
lcd_gotoxy(11,1); printf(lcd_putc,"V.%03Lu",Speed);
lcd_gotoxy(16,1); lcd_putc("%");
lcd_gotoxy( 1,2); lcd_putc("ESPIRAS N");
lcd_gotoxy(10,2); lcd_putc(223);
lcd_gotoxy( 1,1); lcd_putc(" ");
delay_ms(20);
lcd_gotoxy(12,2); printf(lcd_putc,"%u",mil2);
lcd_gotoxy(13,2); printf(lcd_putc,"%u",cen2);
lcd_gotoxy(14,2); printf(lcd_putc,"%u",dec2);
lcd_gotoxy(15,2); printf(lcd_putc,"%u",uni2);
set_pwm1_duty(duty); //PWM para control de velocidad
Speed = Duty; //Variable de % de velocidad en pantalla
Speed = (( Speed * 100) / 82 );
if (contador==1)
{uni2++; contador=0;}
if (uni2>9) {dec2++; uni2=0;}
if (dec2>9) {cen2++; dec2=0;}
if (cen2>9) {mil2++; cen2=0;}
if (mil2==mil && dec2==dec &&
cen2==cen && uni2==uni)
{Stop=0; lcd_putc("\f"); fin();}
}
}
}
codigo:
#include <16F876.H>
#fuses HS,XT,NOPUT,NOPROTECT,NOWDT
#use delay(clock=8M)
#include <Flex_lcd.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(c
///**** DEFINIMOS NOMBRES A PUERTOS ****///
#bit CENTENAS = 0x06.4
#bit UNIDADES = 0x06.5
#bit SPEEDUP = 0x06.6
#bit SPEEDDOWN = 0x06.7
///**** VARIABLES GLOBALES ***///
int contador,stop,Duty,FlagRamp,
mil,cen,dec,uni,
uni2,dec2,cen2,mil2;
void reset()
{
mil=0; dec=0; cen=0; uni=0;
uni2=0; dec2=0; cen2=0; mil2=0;
contador=0;
output_b(0x00);
output_c(0x00);
output_a(0x00);
Stop=0;
FlagRamp=0;
Duty=0;
set_pwm1_duty(0); //Borra la pantalla LCD
}
///**** FUNCIÓN PANTALLA DE ARRANQUE ****///
void inicial()
{
lcd_gotoxy(2,1); lcd_putc("BOBINADORA 3.0");
lcd_gotoxy(2,2); lcd_putc("INOXSTEEL 2009");
delay_ms(3000);
lcd_putc("\f");
}
///**** FUNCIÓN FIN DE BOBINADO ****///
void Fin()
{
int i;
for (i=0;i<5;i++)
{
lcd_putc("\f");
delay_ms(300);
lcd_gotoxy(5,1); lcd_putc("BOBINADO");
lcd_gotoxy(4,2); lcd_putc("FINALIZADO");
delay_ms(300);
}
lcd_putc("\f");
reset();
}
///**** INTERRUPCIÓN TIMER0 ****///
/// TIMER0 EN MODO CONTADOR ///
/// LLEVA EL CONTEO POR SENSOR EXTERNO ///
#int_TIMER0
Void TIMER0_isr(void)
{
contador=1;
set_timer0(255);
clear_interrupt(int_TIMER0);
}
///**** INTERRUPCIÓN RB0 ****///
/// PUESTA EN MARCHA SI HAY CANTIDAD INTRODUCIDA ///
#int_EXT
void Start_isr(void)
{
if (uni!=0 || cen!=0)
{lcd_putc("\f"); Stop=1;}
clear_interrupt(int_EXT);
}
///**** INTERRUPCIÓN RB4-RB7 ****///
/// TOMA LOS DATOS RECIBIDOS EN LOS PULSADORES ///
/// CENTENAS, UNIDADES, VELOCIDAD + Y - ///
#int_RB
Void Pulsadores_isr()
{
if (SPEEDUP==1) if (duty<82) Duty+=4;
if (SPEEDDOWN==1)if (duty>2) Duty-=4;
if (CENTENAS==1) cen++;
if (UNIDADES==1) uni++;
if (uni>9) {dec++; uni=0;}
if (dec>9) dec=0;
if (cen>9) {mil++; cen=0;}
if (mil>9) mil=0;
clear_interrupt(int_RB);
}
///**** INTERRUPCIÓN TIMER1 ****///
/// SE ENCARGA DEL ARRANQUE SUAVE DEL MOTOR ///
/// AL INICIAR EL BOBINADO - DE 0% A 50% VEL. ///
#int_TIMER1
Void SoftStart()
{
if (stop==1 && Duty<42 && FlagRamp==0)
{Duty+=2; set_timer1(50000);}
if (Duty==42) FlagRamp=1;
}
///****FUNCIÓN PRINCIPAL****///
Void Main(Void)
{
int16 speed;
speed=0;
set_tris_a(0b110000);
set_tris_b(0b11110001);
set_tris_c(0b00000000);
///**** HABILITACIÓN Y AJUSTE DE INTERRUPCIONES****///
enable_interrupts(int_EXT);
enable_interrupts(int_TIMER0);
enable_interrupts(int_TIMER1);
enable_interrupts(int_RB);
enable_interrupts(global);
ext_int_edge(L_TO_H);
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);
setup_timer_2(T2_DIV_BY_16,82,1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_ccp1(CCP_PWM);
clear_interrupt(int_RB);
clear_interrupt(int_EXT);
clear_interrupt(int_RTCC);
clear_interrupt(int_ccp1);
reset();
lcd_init();
inicial();
while (true)
{
///****BLOQUE PRINCIPAL DE PRESELECCIÓN****///
if (stop==0)
{
lcd_gotoxy(1,1); lcd_putc("INTRODUCE EL N");
lcd_gotoxy(15,1); lcd_putc(223);
lcd_gotoxy(1,2); lcd_putc("DE ESPIRAS");
lcd_gotoxy(12,2); printf(lcd_putc,"%u",mil);
lcd_gotoxy(13,2); printf(lcd_putc,"%u",cen);
lcd_gotoxy(14,2); printf(lcd_putc,"%u",dec);
lcd_gotoxy(15,2); printf(lcd_putc,"%u",uni);
}
///****BLOQUE EN FUNCIONAMIENTO****///
if (Stop==1)
{
lcd_gotoxy( 1,1); lcd_putc("BOBINANDO");
delay_ms(20);
lcd_gotoxy(11,1); printf(lcd_putc,"V.%03Lu",Speed);
lcd_gotoxy(16,1); lcd_putc("%");
lcd_gotoxy( 1,2); lcd_putc("ESPIRAS N");
lcd_gotoxy(10,2); lcd_putc(223);
lcd_gotoxy( 1,1); lcd_putc(" ");
delay_ms(20);
lcd_gotoxy(12,2); printf(lcd_putc,"%u",mil2);
lcd_gotoxy(13,2); printf(lcd_putc,"%u",cen2);
lcd_gotoxy(14,2); printf(lcd_putc,"%u",dec2);
lcd_gotoxy(15,2); printf(lcd_putc,"%u",uni2);
set_pwm1_duty(duty); //PWM para control de velocidad
Speed = Duty; //Variable de % de velocidad en pantalla
Speed = (( Speed * 100) / 82 );
if (contador==1)
{uni2++; contador=0;}
if (uni2>9) {dec2++; uni2=0;}
if (dec2>9) {cen2++; dec2=0;}
if (cen2>9) {mil2++; cen2=0;}
if (mil2==mil && dec2==dec &&
cen2==cen && uni2==uni)
{Stop=0; lcd_putc("\f"); fin();}
}
}
}