⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bc.i

📁 电池设计的充电器 Device : AT90S2333 File name : BC.c Ver nr. : 1.0 Description : Standalone Ba
💻 I
字号:
#line 1 "E:\新建文件夹\AVR450~1\2333_C\BC.c"

#line 20 "E:\新建文件夹\AVR450~1\2333_C\BC.c"

#line 1 "E:\新建文件夹\AVR450~1\2333_C/BC.H"

#line 18 "E:\新建文件夹\AVR450~1\2333_C/BC.H"

#line 1 "E:\新建文件夹\AVR450~1\2333_C/io2333.h"

#line 9 "E:\新建文件夹\AVR450~1\2333_C/io2333.h"

#pragma language=extended









#line 22 "E:\新建文件夹\AVR450~1\2333_C/io2333.h"







sfrb UBRRH     = 0x03;


sfrw ADC       = 0x04;
sfrb ADCL      = 0x04;
sfrb ADCH      = 0x05;


sfrb ADCSR     = 0x06;


sfrb ADMUX     = 0x07;


sfrb ACSR      = 0x08;


sfrb UBRR      = 0x09;
sfrb UBRRL     = 0x09;


sfrb UCR       = 0x0A;


sfrb USR       = 0x0B;


sfrb UDR       = 0x0C;


sfrb SPCR      = 0x0D;


sfrb SPSR      = 0x0E;


sfrb SPDR      = 0x0F;


sfrb PIND      = 0x10;


sfrb DDRD      = 0x11;


sfrb PORTD     = 0x12;


sfrb PINC      = 0x13;


sfrb DDRC      = 0x14;


sfrb PORTC     = 0x15;


sfrb PINB      = 0x16;


sfrb DDRB      = 0x17;


sfrb PORTB     = 0x18;


sfrb EECR      = 0x1C;


sfrb EEDR      = 0x1D;


sfrw EEAR      = 0x1E;
sfrb EEARL     = 0x1E;
sfrb EEARH     = 0x1F;


sfrb WDTCR     = 0x21;


sfrw ICR1      = 0x26;
sfrb ICR1L     = 0x26;
sfrb ICR1H     = 0x27;


sfrw OCR1      = 0x2A;
sfrb OCR1L     = 0x2A;
sfrb OCR1H     = 0x2B;


sfrw TCNT1     = 0x2C;
sfrb TCNT1L    = 0x2C;
sfrb TCNT1H    = 0x2D;


sfrb TCCR1B    = 0x2E;


sfrb TCCR1A    = 0x2F;


sfrb TCNT0     = 0x32;


sfrb TCCR0     = 0x33;


sfrb MCUSR     = 0x34;


sfrb MCUCR     = 0x35;


sfrb TIFR      = 0x38;


sfrb TIMSK     = 0x39;


sfrb GIFR      = 0x3A;


sfrb GIMSK     = 0x3B;


sfrb SP        = 0x3D;
sfrb SPL       = 0x3D;


sfrb SREG      = 0x3F;































#line 192 "E:\新建文件夹\AVR450~1\2333_C/io2333.h"



























































































































































































































#line 20 "E:\新建文件夹\AVR450~1\2333_C/BC.H"
#line 1 "C:/icc/include/ina90.h"

#line 1 "C:/icc/include/macros.h"






























#line 35 "C:/icc/include/macros.h"














void _StackCheck(void);
void _StackOverflowed(char);




#line 3 "C:/icc/include/ina90.h"
#line 21 "E:\新建文件夹\AVR450~1\2333_C/BC.H"
#line 1 "E:\新建文件夹\AVR450~1\2333_C/BC_debug.H"

#line 18 "E:\新建文件夹\AVR450~1\2333_C/BC_debug.H"

#line 1 "E:\新建文件夹\AVR450~1\2333_C/io2333.h"

#line 9 "E:\新建文件夹\AVR450~1\2333_C/io2333.h"

#pragma language=extended









#line 22 "E:\新建文件夹\AVR450~1\2333_C/io2333.h"







sfrb UBRRH     = 0x03;


sfrw ADC       = 0x04;
sfrb ADCL      = 0x04;
sfrb ADCH      = 0x05;


sfrb ADCSR     = 0x06;


sfrb ADMUX     = 0x07;


sfrb ACSR      = 0x08;


sfrb UBRR      = 0x09;
sfrb UBRRL     = 0x09;


sfrb UCR       = 0x0A;


sfrb USR       = 0x0B;


sfrb UDR       = 0x0C;


sfrb SPCR      = 0x0D;


sfrb SPSR      = 0x0E;


sfrb SPDR      = 0x0F;


sfrb PIND      = 0x10;


sfrb DDRD      = 0x11;


sfrb PORTD     = 0x12;


sfrb PINC      = 0x13;


sfrb DDRC      = 0x14;


sfrb PORTC     = 0x15;


sfrb PINB      = 0x16;


sfrb DDRB      = 0x17;


sfrb PORTB     = 0x18;


sfrb EECR      = 0x1C;


sfrb EEDR      = 0x1D;


sfrw EEAR      = 0x1E;
sfrb EEARL     = 0x1E;
sfrb EEARH     = 0x1F;


sfrb WDTCR     = 0x21;


sfrw ICR1      = 0x26;
sfrb ICR1L     = 0x26;
sfrb ICR1H     = 0x27;


sfrw OCR1      = 0x2A;
sfrb OCR1L     = 0x2A;
sfrb OCR1H     = 0x2B;


sfrw TCNT1     = 0x2C;
sfrb TCNT1L    = 0x2C;
sfrb TCNT1H    = 0x2D;


sfrb TCCR1B    = 0x2E;


sfrb TCCR1A    = 0x2F;


sfrb TCNT0     = 0x32;


sfrb TCCR0     = 0x33;


sfrb MCUSR     = 0x34;


sfrb MCUCR     = 0x35;


sfrb TIFR      = 0x38;


sfrb TIMSK     = 0x39;


sfrb GIFR      = 0x3A;


sfrb GIMSK     = 0x3B;


sfrb SP        = 0x3D;
sfrb SPL       = 0x3D;


sfrb SREG      = 0x3F;































#line 192 "E:\新建文件夹\AVR450~1\2333_C/io2333.h"



























































































































































































































#line 20 "E:\新建文件夹\AVR450~1\2333_C/BC_debug.H"
#line 1 "C:/icc/include/ina90.h"

#line 1 "C:/icc/include/macros.h"






























#line 35 "C:/icc/include/macros.h"




















#line 3 "C:/icc/include/ina90.h"
#line 21 "E:\新建文件夹\AVR450~1\2333_C/BC_debug.H"



void Inituart(unsigned char);
void Send_int(int);
void Send_char(char);
void Send_state_change(void);
void Send_charge_state(void);
void Send_CR_LF (void);



#line 22 "E:\新建文件夹\AVR450~1\2333_C/BC.H"



int  Battery(unsigned char);
void Setup(void);
void Stop_PWM(void);
void Stable_ADC(void);
void interrupt[(0x0A)] T1Ovf(void);



extern void FAST_charge(void);
extern void TRICKLE_charge(void);



typedef struct
{
    int t_count;
    char sec;
    char min;
    char hour;
}time_struct;



























































#line 105 "E:\新建文件夹\AVR450~1\2333_C/BC.H"





#line 22 "E:\新建文件夹\AVR450~1\2333_C\BC.c"

time_struct time;














void Setup(void)
{


  TCCR1A  = 0x81;
  TIFR    = 0x80;
  TIMSK   = 0x80;
  TCNT1   = 0x00;
  TCCR1B  = 0x00;

  PORTC   = 0x00;
  DDRC    = 0x00;

  PORTB   = 0xFF;
  DDRB    = 0xFF;

  PORTD   = 0xFF;

  ADCSR   = 0x96;






 EEAR = 0x00;

  time.sec = 0x00;
  time.min = 0x00;
  time.hour = 0x00;
  time.t_count = 0x3878;

 asm("sei");
}

void Stop_PWM(void)
{
  if ((EEDR == 0x00)&&(TCCR1B & (1<< 0))&&(OCR1 != 0))
  {
    if (OCR1 == 1)
    {
      while(TCNT1 > 2);
      while(TCNT1 < 2);
    }
    else
    {
      while(TCNT1 > OCR1);
      while(OCR1 > TCNT1);
    }
    TCCR1B = 0x00;
  }
}

void Stable_ADC(void)
{
  int V[4];
  char i;
  int Vmax, Vmin;


    for (Vmax=10,Vmin= 0;Vmax > (Vmin+1);)
    {
        V[3] = V[2];
        V[2] = V[1];
        V[1] = V[0];
        ADCSR |= 0x40;
        while (!(ADCSR & (1<< 4)))
            ;
        V[0] = ADC;
        Vmin = V[0];
        Vmax = V[0];

        for (i=0;i<=3;i++)
        {
            if (V[i] > Vmax)
                Vmax=V[i];
            if (V[i] < Vmin)
              Vmin=V[i];
        }
    }
}

int Battery(unsigned char value)
{
  char i;
  int av;

  switch (value)
  {
    case 33 :

#line 130 "E:\新建文件夹\AVR450~1\2333_C\BC.c"
        Stop_PWM();
        ADMUX = 5;
        Stable_ADC();
        break;
    case 5 :

#line 137 "E:\新建文件夹\AVR450~1\2333_C\BC.c"
        Stop_PWM();
        ADMUX = 3;
        Stable_ADC();
        break;
    case 3 :

#line 144 "E:\新建文件夹\AVR450~1\2333_C\BC.c"
        ADMUX = 5;
        break;
    case 1 :

#line 149 "E:\新建文件夹\AVR450~1\2333_C\BC.c"
        ADMUX = 4;
        break;
   }


    for(av=0,i=8;i;--i)
    {
        ADCSR |= 0x40;
        while (!(ADCSR & (1<< 4)))
            ;
        av = av+ADC;
    }
    av = av/8;

    TCCR1B = 0x01;
(ADCSR &= (~(4)));

  switch (value)
  {
    case 33 :

		if(av <= battery_volt_min)
	        battery_volt_min = av;
		if (av > battery_volt_max)
	        battery_volt_max = av;
        break;
    case 5 :

		if (av <= temperature_min)
		    temperature_min = av;
		if(av > temperature_max)
	      temperature_max = av;
        break;
    case 3 :

        if (av <= charge_volt_min)
		    charge_volt_min = av;
		if (av > charge_volt_max)
	        charge_volt_max = av;
        break;
    case 1 :

        break;
    }
    return(av);
}

void main(void)
{
    Setup();
	Send_CR_LF();
    for (;;)
    {

#line 204 "E:\新建文件夹\AVR450~1\2333_C\BC.c"
(EEAR |= (0x01));
 EEDR = 0x00;

(PORTB |= ((0x01 + 0x04 + 0x08 + 0x10)));
        while ((PIND & (1<< 4)));

        while (!((EEAR & (0x04))))
        {
            if (((EEAR & (0x01))) && (!((EEAR & (0x04)))))
            {

#line 218 "E:\新建文件夹\AVR450~1\2333_C\BC.c"
(PORTB |= ((0x01 + 0x04 + 0x08 + 0x10)));
(PORTB &= (~((0x01))));
 EEDR = 0x00;
 EEAR = 0x00;
                    FAST_charge();





            }
            if (((EEAR & (0x02))) && (!((EEAR & (0x04)))))
            {

#line 235 "E:\新建文件夹\AVR450~1\2333_C\BC.c"
(PORTB |= ((0x01 + 0x04 + 0x08 + 0x10)));
(PORTB &= (~((0x04))));
 EEDR = 0x00;
 EEAR = 0x00;
                TRICKLE_charge();
                FAST_charge();




            }
        }

        if ((EEAR & (0x04)))
        {

#line 253 "E:\新建文件夹\AVR450~1\2333_C\BC.c"
(PORTB |= ((0x01 + 0x04 + 0x08 + 0x10)));
(PORTB &= (~(0x10)));
            for(;;);
        }
    }
}

void interrupt[(0x0A)] T1Ovf(void)
{
  if (0x0000 == --time.t_count)
  {







    if ( 60 == ++time.sec )
    {
      if ( 60 == ++time.min )
      {
        if ( 24 == ++time.hour )
        {
            time.hour = 0x00;
        }
        time.min = 0x00;
        }
        time.sec = 0x00;
        if (((EEAR & (0x02))) && (!((EEAR & (0x04)))))
        {
		    if (time.sec % 2)
(PORTB &= (~((0x04))));
            else
(PORTB |= ((0x04)));
        }
    }

    time.t_count = 0x3878;
  }
}


#line 346 "E:\新建文件夹\AVR450~1\2333_C\BC.c"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -