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

📄 bat4fsc.c

📁 C中嵌入汇编
💻 C
📖 第 1 页 / 共 3 页
字号:
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     RET=ReadEC(DATA_H);
     if(RET==EC_TIMEOUT) return;

     /* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
     CHARGE_VOLTAGE=*DATA_H*pow(2,8)+*DATA_L;
     textcolor(9);
     cprintf("Current Battery I/O Voltage  : ",CHARGE_VOLTAGE);
     textcolor(10);
     cprintf("%.0f ",CHARGE_VOLTAGE);
     cprintf("mV \r\n");


     delay(10);
     *DATA_L=0;*DATA_H=0;
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x32);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     RET=ReadEC(DATA_L);
     if(RET==EC_TIMEOUT) return;

     
     delay(10);
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x33);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     RET=ReadEC(DATA_H);
     if(RET==EC_TIMEOUT) return;

     /* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
     CHARGE_State=*DATA_H*pow(2,8)+*DATA_L;
     textcolor(9);
     cprintf("Current Battery Charge State : ",CHARGE_State);
     textcolor(10);
     cprintf("0%.0f ",CHARGE_State);
     printf("[");
     if(CHARGE_State==1){textcolor(12+128);cprintf("%c",31);}
       else if(CHARGE_State==2){textcolor(10+128);cprintf("%c",30);}
         else if(CHARGE_State==0){textcolor(07);cprintf("Standing-By");}
     printf("]\r\n");
     textcolor(WHITE);


     delay(10);
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0xaf);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     RET=ReadEC(DATA_H);
     if(RET==EC_TIMEOUT) return;

     /* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
     h=*DATA_H;

     delay(10);
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0xae);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     RET=ReadEC(DATA_H);
     if(RET==EC_TIMEOUT) return;

     /* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
     m=*DATA_H;

     delay(10);
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0xad);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     RET=ReadEC(DATA_H);
     if(RET==EC_TIMEOUT) return;

     /* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
     s=*DATA_H;

     textcolor(9);
     cprintf("Battery Total Charge Time    : ");
     textcolor(10);
     cprintf("%02i:%02i:%02i\r\n",h,m,s);






     delay(10);
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0xa6);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     RET=ReadEC(DATA_L);
     if(RET==EC_TIMEOUT) return;

     /* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
     C1=*DATA_L;

     delay(10);
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0xa7);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     RET=ReadEC(DATA_H);
     if(RET==EC_TIMEOUT) return;

     /* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
     C2=*DATA_H;

     textcolor(9);
     cprintf("Battery Cycle Count Number   : ");
     textcolor(10);
     cprintf("%i\r\n",C2*0x100+C1);





     delay(10);
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x3c);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     RET=ReadEC(DATA_H);
     if(RET==EC_TIMEOUT) return;

     /* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
     s=*DATA_H;

     textcolor(9);
     cprintf("System Power Source          : ");
     textcolor(10);
     switch(s)
     {
      case 5:
       cprintf("AC On-Line with Battery\r\n");
       break;
      case 4:
       cprintf("AC Off-Line with Battery\r\n");
       break;
      case 1:
       cprintf("AC On-Line without Battery\r\n");
       break;
      default:
       cprintf("Unknow mode\r\n");
       break;
     }


     delay(10);
     *DATA_L=0;*DATA_H=0;
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0xc8);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x06);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     /*RET=ReadEC(DATA_L);*/
     RET=ReadEC(DATA_L);
     if(RET==EC_TIMEOUT) return;
     LCD_Brightness_AC=*DATA_L;

     delay(10);
     *DATA_L=0;*DATA_H=0;
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0xc9);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x06);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     /*RET=ReadEC(DATA_L);*/
     RET=ReadEC(DATA_L);
     if(RET==EC_TIMEOUT) return;
     LCD_Brightness_DC=*DATA_L;


     textcolor(9);
     cprintf("CURRENT Brightness Level (AC): ");
     textcolor(10);
     cprintf("%02X\r\n",(int)LCD_Brightness_AC&0x0f);

     textcolor(9);
     cprintf("CURRENT Brightness Level (DC): ");
     textcolor(10);
     cprintf("%02X\r\n",(int)LCD_Brightness_DC&0x0f);


     delay(10);
     *DATA_L=0;*DATA_H=0;
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x3e);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     /*RET=ReadEC(DATA_L);*/
     RET=ReadEC(DATA_L);
     if(RET==EC_TIMEOUT) return;
     SM_TEMP=*DATA_L;
     textcolor(9);
     cprintf("CURRENT CPU TEMPERATURE      : ",SM_TEMP);
     textcolor(10);
     cprintf("%.1f%cC\r\n",SM_TEMP,248);

     delay(10);
     *DATA_L=0;*DATA_H=0;
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x3f);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     /*RET=ReadEC(DATA_L);*/
     RET=ReadEC(DATA_L);
     if(RET==EC_TIMEOUT) return;
     CPU_TEMP=*DATA_L;
     textcolor(9);
     cprintf("CURRENT SYSTEM TEMPERATURE   : ",CPU_TEMP);
     textcolor(10);
     cprintf("%.1f%cC\r\n",CPU_TEMP,248);


     delay(10);
     *DATA_L=0;*DATA_H=0;
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     RET=ReadEC(DATA_L);
     if(RET==EC_TIMEOUT) return;

     
     delay(10);
     RET=WriteEC(0x66,0xa2);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa3);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x62,0x04);
     if(RET==EC_TIMEOUT) return;
     RET=WriteEC(0x66,0xa4);
     if(RET==EC_TIMEOUT) return;
     RET=ReadEC(DATA_H);
     if(RET==EC_TIMEOUT) return;

     /* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
     Bat_Temp=(*DATA_H*pow(2,8)+*DATA_L)*0.1-273;
     textcolor(9);
     cprintf("Current Battery TEMPERATURE  : ",Bat_Temp);
     textcolor(10);
     cprintf("%.1f%cC\r\n",Bat_Temp,248);

     outportb(0x60,0x00);

     /*0xAE enable keyboard (resets bit 4 of command byte)*/
     if(SendKBCCmd(0xAE)!=0)
      return 1;

     if(cycle==0)
     {
      textcolor(10);
      cprintf("Battery Cell Date is normal.\r\n");
     }else if(cycle==1)
      {
       textcolor(RED);
       cprintf("Warning : ");
       textcolor(YELLOW+128);
       cprintf("Cell Date is nearly out of date,please put label on t/r card !\r\n");
       sound(800);
       getch();
       getch();
       nosound();
      }else if(cycle==2)
       {
        textcolor(RED+128);
        cprintf("Battery Cell is out of date!\r\n");
        while(1);
          getch();
       }


     if(ERROR!=0)
     {
      textcolor(12);
      cprintf("Warning : Battery FCC is ullage , return %i",ERROR);
      return ERROR;
     }else
       printf("Return dos error code %i ",ERROR);

     return ERROR;
}









/*
*Title:     WaitECOBFReady
*Input:     None
*Output:
*       1   Time out
*       0   OK
*Function:  Wait EC OBF(output buffer full) is full.
*/
/* int WaitECOBFReady()              /* Voss(.01)b */ */
int WaitECOBFReady (void)   /* Voss(.01)m */
{

    int ret = EC_TIMEOUT;
    WORD    num;
    register BYTE   now, last;

    now = last = 0;
    asm pushf
    asm cli

    num=EC_TIMER;
    while(num)
    {
        if((inportb(ec_sc)&1) == 1)     /* When bit0 = 1, the OBF is full. */
        {
            ret = EC_OK;
            break;
        }

        now = inportb(PPI);     /* port 61H is 8255(PPI) */
        now = now & 0x10;       /* every 15us, the PB4 changes once. */
        if (now!=last)
        {
            num--;
            last = now;
        }
    }
    asm popf
    return  ret;
}


/*
*Title:     WaitECIBFReady
*Input:     None
*Output:
*       1   Time out
*       0   OK
*Function:  Wait EC IBF(input buffer full) is empty.
*/
/* int WaitECIBFReady()              /* Voss(.01)b */ */
int WaitECIBFReady (void)       /* Voss(.01)m */
{

    int ret = EC_TIMEOUT;
    WORD    num;
    register BYTE now, last;

    now = last = 0;

    asm pushf
    asm cli

    num=EC_TIMER;
    while(num)
    {
        if((inportb(ec_sc)&2) == 0)     /* When bit1 = 1, the IBF is empty */
        {
            ret = EC_OK;
            break;
        }

        now = inportb(PPI);
        now = now & 0x10;
/*       if (num!=last)                  /* Voss(.01)b */ */
        if (now!=last)                  /* Voss(.01)m */
        {
            num--;
            last = now;
        }
    }
    asm popf
    return  ret;
}


/*
*Title:     WriteEC
*Input:     ECPORT port, BYTE cmd
*Output:
        2   Parameter error(Only is 64H/60H)
        1   Time out
*       0   OK
*Function:  Send command to EC
*/
int WriteEC(ECIOPORT port, BYTE cmd)
{
    int ret = EC_TIMEOUT;

    asm pushf
    asm cli

    if((port==ec_sc)||(port==ec_data))
    {
       ret = WaitECIBFReady();
       if (ret==EC_OK)
         outportb(port, cmd);
    }
    else    ret = EC_INVALID_PORT;      /* Voss(.01):: If return this value, In caller side no handler to cover this... */
    asm popf
    return  ret;
}


/*
*Title:     ReadEC
*Input:     BYTE * const data
*Output:
*       1   Time out
*       0   OK
*Function:  Read data from EC
*/
int     ReadEC(BYTE * const data)
{
    WORD    ret = EC_TIMEOUT;
    asm pushf
    asm cli

    ret = WaitECOBFReady();
    if (ret==EC_OK)
        *data = inportb(ec_data);
    asm popf
    return  ret;
}

/* Voss(.01)++ */
/* ============================================== */
/*  clear system keyboard buffer by reset KBD queue pointer */
/* ============================================== */
void ClearKBDBuf (void)
 {
   asm  push ds
   asm  mov  ax,0000h
   asm  mov  ds,ax
   asm  mov  ax,ds:[041Ah]
   asm  mov  ds:[041Ch], ax
   asm  pop  ds
 }
/* Voss(.01)-- */



⌨️ 快捷键说明

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