Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - tercules

#1
Electrónica / problemas com 16f876a(CCS)
24 Junio 2010, 19:32 PM
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();} 
  }
}
}