久久久国产精品视频袁燕,99re久久精品国产,亚洲欧美日韩国产综合v,天天躁夜夜躁狠狠久久,激情五月婷婷激情五月婷婷

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

HolTek單片機的問題?

我的程序怎么不能用啊,好像沒有任何反應?
/*=======================================
* Project Name:     Power_Display
* Program Name:     PowDly
* Author:           Tao Shan Biao 
* Copyright:        Tao Shan Biao 
* CPU:              ht46r064
* Virsion:          1.0
* Project           Start Time: 2011-07-24
* Modify Comment:   Non
=======================================*/

#include "HT46R064.h"

#define S1                  _pb5
#define S2                  _pa6
#define S3                  _pb4
#define DCUP                _pa1
#define ExtPowConnect       _pa3
#define iPadConnect         _pa2

unsigned  long int  P_count0;
unsigned char P_count1;
unsigned char P_count2;

unsigned  long int halt_count0;
unsigned char halt_count1;

unsigned char LED_DisplayBuffer;
unsigned char Pow_grade;
unsigned char charge_count1;
unsigned char charge_count2;
//-------------------------------------------------------------------------
#pragma vector isr_4 @ 0x04     //外部中斷
#pragma vector isr_8 @ 0x08     //定時/計數(shù)器0溢出中斷
#pragma vector isr_c @ 0x0c     //A/D轉(zhuǎn)換完成中斷
#pragma vector isr_10 @ 0x10     //時基溢出中斷

void isr_4()
{
}
void isr_8(){}
void isr_c(){}
void isr_10(){}   
//-------------------------------------------------------------------------

void init_MCU(void)
{   
    _ctrl1 = 0xCA;      //INT外部中斷觸發(fā)方式:雙邊沿,時基最小,WDT關閉
    _wdts = 0x07;      //設置定時器最大周期
    _clkmod = 0;      //振蕩器低功耗模
    _qosc = 1;         //使用HIRC作為系統(tǒng)時
    _pbc = 0;         //設置B端口為輸
    _pac = 0xBF;      //設置除PA6為輸出的其他A端口為輸
    _papu = 0xBF;      //設置除PA6端口其他A端口若上
    _pawk = 0x1C;      //設置PA.4,3,2為下降沿喚
   
    _adcr = 0x21;      //設置PA.0為AD通
    _acsr = 0x44;      //開啟AD模塊電源,選擇AD時鐘源為系統(tǒng)時
    _start = 0;
    _start = 1;
_start = 0;
   
    _intc0 = 0x07;      //定時器,外部中斷使能   
}

void init_Device(void)
{
   S1 = 0;
   S2 = 1;
   DCUP = 1;
   S3 = 1;
   
   P_count0 = 0;
   P_count1 = 0;
   P_count2 = 0;
   
   Pow_grade = 0;
   charge_count1 = 0;
   charge_count2 = 0;
   
   halt_count0 = 0;
   halt_count1 = 0;
      
   LED_DisplayBuffer = 0;   
}

void Updata_Powgrade(void)
{
_adcr = 0x21;       //設置PA.0為AD通道
_acsr = 0x44;       //開啟AD模塊電源,選擇AD時鐘源為系統(tǒng)時鐘
_start = 0;
_start = 1;
while(_eocb);
Pow_grade = _adrh / 0x30;   
}
    
void Updata_ledbuff(void)
{
    unsigned char i;
    for(i = 0; i < Pow_grade; i++)
    {
        LED_DisplayBuffer |= (1 << i);
    }    
}
 
void warn_Display(void)
{

}

void Pow_Display(void)
{
   Updata_ledbuff();
   _pb |= 0x0F & LED_DisplayBuffer;
}

void charge_Display(void)
{
   if(charge_count1 >= (5 - Pow_grade))
   {
      charge_count1 = 0;
      Updata_ledbuff();
   }
   LED_DisplayBuffer |= (1 <
   charge_count1++;
   _pb |= 0x0F & LED_DisplayBuffer; 
}


void poll_count(void)
{
   if(!P_count0)
   {
      P_count0 = 0x0F51; 
      P_count1--;
   }
   if(!P_count1)
   {
      P_count1 = 0xFF; 
      P_count2--;
       if(S3)
       {
          Pow_Display();        //顯示電量
       }
       else
       {
          charge_Display();     //顯示充電
       }       
   }
   if(!P_count2)
   {
      P_count2 = 0x12;
      Updata_Powgrade();
   }      
   P_count0--;   
}

void Core_proc(void)
{
   if(ExtPowConnect)
   {
      if(iPadConnect)
      {
         S1 = 0;      //給電池充電
         S2 = 1;
         DCUP = 0;   //此地是開還是不開?
         S3 = 1;
      }
      else
      {
         S2 = 1;      //連入外部電源
         DCUP = 1;
         S3 = 1;
         S1 = 1;
      }
      halt_count0 = 0;
      halt_count1 = 0;      
   }
   else
   {
      if(iPadConnect)
      {
 
         if(halt_count0 == 0x4C97) {halt_count0 = 0; halt_count1++;}
         if(halt_count0 == 250)
         {
          halt_count0 = 0;
          _halt();   //休眠
         }
      }
      else
      {
         if(1)
         {
            S1 = 0;      //用電池供電
            S2 = 1;
            DCUP = 1;
            S3 = 0;
         }
         else
         {
            //顯示缺電警告
         }
         halt_count0 = 0;
         halt_count1 = 0;
      }
   }
}
//-------------------------------------------------------------------------
void main()
{
   init_MCU();
   init_Device();
   do
   {
      poll_count();
      Core_proc();
   }
   while(1);
}
全部回復(4)
正序查看
倒序查看
2011-08-09 19:30

沒用過這顆芯片,代碼也一下子看不出問題。

建議結(jié)合硬件,設置斷點慢慢調(diào)試。

0
回復
sohappy
LV.3
3
2011-08-10 13:59
@on_the_way_li
沒用過這顆芯片,代碼也一下子看不出問題。建議結(jié)合硬件,設置斷點慢慢調(diào)試。
知道原因了,編譯器問題啊,我沒有仿真器啊,只能試一次燒一次
0
回復
2011-08-10 14:08
@sohappy
知道原因了,編譯器問題啊,我沒有仿真器啊,只能試一次燒一次

祝賀。。

0
回復
sohappy
LV.3
5
2011-08-11 09:15
@on_the_way_li
祝賀。。

可是新的問題又來了

/*=======================================

* Project Name:     Power_Display

* Program Name:     PowDly

* Author:           Tao Shan Biao 

* Copyright:        Tao Shan Biao 

* CPU:              ht46r064

* Virsion:          1.0

* Project           Start Time: 2011-07-24

* Modify Comment:   Non

=======================================*/


#include "HT46R064.h"


#define S1                  _pb5

#define S2                  _pa6

#define S3                  _pb4

#define DCUP                _pa1

#define ExtPowConnect       _pa3

#define iPadConnect         _pa2


#define Open_AN0            _adcr = 0x20

#define Open_AN1            _adcr = 0x21

#define Open_AN2            _adcr = 0x22

#define Open_AN3            _adcr = 0x23


#define UseTimerPoll        1                       //1:使用定時器輪詢  0:使用變量查詢輪詢


#define P_count0Value       0x0F51 

#define P_count1Value       0xFF 

#define P_count2Value       0x12 

#define halt_count0Value    0x4000

#define halt_count1Value    0x05

#define charge_count0Value  0           

#define charge_count1Value  0



#define LowPowS_Mode        _adonb = 1; _halt()     //低功耗模式

#define Nor_Mode            _adonb = 0              //正常模式


#define Full_Pow            0x0FF0                  //>4.2V 滿電

#define Nor_Pow             0x0D05                  //>3.6V 正常

#define Low_Pow             0x0D05                  //<3.6V 嚴重缺電


unsigned char P_count0;

unsigned char P_count1;

unsigned char P_count2;


unsigned int  halt_count0;

unsigned char halt_count1;


unsigned char LED_DisplayBuffer;

unsigned char Pow_grade;

unsigned char charge_count1;

unsigned char charge_count2;


unsigned int  AD_Temp;

unsigned int  AD_result0;

unsigned int  AD_result1;


unsigned char Temp0;

//-------------------------------------------------------------------------

#pragma vector INT @    0x04     //外部中斷

#pragma vector Timer @  0x08     //定時/計數(shù)器0溢出中斷

#pragma vector ADIT @   0x0c     //A/D轉(zhuǎn)換完成中斷

#pragma vector OverF @  0x10    //時基溢出中斷


void INT()

{

    

}

void Timer()

{

    if(++P_count0 > 30) {P_count0 = 0; P_count1++;}

}

void ADIT(){}

void OverF(){}   

//-------------------------------------------------------------------------


void init_MCU(void)

{   

    _ctrl1 = 0xCA;      //INT外部中斷觸發(fā)方式:雙邊沿,時基最小,WDT關閉

    _wdts = 0x07;       //設置定時器最大周期

    _clkmod = 0;        //振蕩器低功耗模

    _qosc = 1;          //使用HIRC作為系統(tǒng)時

    _pbc = 0;           //設置B端口為輸

    _pac = 0xBF;        //設置除PA6為輸出的其他A端口為輸

    _papu = 0xBF;       //設置除PA6端口其他A端口若上

    _pawk = 0x1C;       //設置PA.4,3,2為下降沿喚

   

    Open_AN0;           //設置PA.0為AD通

    _acsr = 0x01;       //開啟AD模塊電源,選擇AD時鐘源為系統(tǒng)時

    _start = 0;         //啟動AD

    _start = 1;

    _start = 0;

//----------------------------------------------------------------------    

#if UseTimerPoll        //使用了定時器作為輪詢

    _tmr0c = 0x97;    

    _intc0 = 0x07;      //定時器,外部中斷使能 

#else                   //

    _intc0 = 0x03;      //外部中斷使能 

#endif

}

//----------------------------------------------------------------------

void init_Device(void)

{

    S1 = 0;

    S2 = 1;

    DCUP = 1;

    S3 = 1;

    

    

    Pow_grade = 0;

    charge_count1 = 0;

    charge_count2 = 0;

    

    halt_count0 = 0;

    halt_count1 = 0;

        

    LED_DisplayBuffer = 0;   

}



void Updata_Powgrade(void)

{

    AD_result0 = 0;

    Open_AN0;

    _acsr = 0x01;       //開啟AD模塊電源,選擇AD時鐘源為系統(tǒng)時

    _start = 0;

    _start = 1;

    while(_eocb);

    AD_result0 = (unsigned int)_adrh*0x10 + (unsigned int)_adrl/0x10;

    Pow_grade = (char)(AD_result0 / 0x0333);

    _adcr = 0;     

}


void ExtPow_Detect(void)

{

    unsigned char i = 5;

    AD_result1 = 0;

    Open_AN3;

    _acsr = 0x01;       //開啟AD模塊電源,選擇AD時鐘源為系統(tǒng)時

    _start = 0;

    _start = 1;

    while(_eocb);

    AD_result1 = (unsigned int)_adrh*0x10 + (unsigned int)_adrl/0x10;

    Pow_grade = (char)(AD_result1 / 0x0333);

    _adcr = 0; 

}

    

void Updata_ledbuff(void)

{

    LED_DisplayBuffer = 0xFF << Pow_grade;   

}

 

void warn_Display(void)

{


}


void Pow_Display(void)

{

    Updata_ledbuff();

    _pb = (LED_DisplayBuffer & 0x0F) | (_pb & 0xF0);;

}


void charge_Display(void)

{

    if(charge_count1 >= (5 - Pow_grade))

    {

        charge_count1 = 0;

        Updata_ledbuff();

    }

    else

    {

        LED_DisplayBuffer <<= 1;   

        charge_count1++;

    }

    _pb = (LED_DisplayBuffer & 0x0F) | (_pb & 0xF0);; 

}

//----------------------------------------------------------------------

#if UseTimerPoll                //使用了定時器作為輪詢

void poll_count(void)

{

    if(P_count1 > 2)        

    {

        if(P_count2 > 18)

        {

            if(!S2){S2 = 1; Temp0 = 1;}    //如果在充電,關閉充電一段時間再開啟AD

        }

        if(P_count2 > 20)

        {

            P_count2 = 0;

            Updata_Powgrade();

            if(Temp0){S2 = 0;}      //如果在充電,在AD轉(zhuǎn)化過后開啟充電

        }


        if(S2)

        {

            Pow_Display();        //顯示電量

        }

        else

        {

            charge_Display();     //顯示充電

        }

        P_count1 = 0;

        P_count2++;

    }    

}

#else

void poll_count(void)

{

    if(P_count0 > P_count0Value)

    {

        if(P_count1 > P_count1Value)

        {

            if(P_count2 > P_count2Value-3)

            {

                if(!S2) {S2 = 1; Temp0 = 1;}    //如果在充電,關閉充電一段時間再開啟AD

            }        

            if(P_count2 > P_count2Value)

            {

                P_count2 = 0;

                Updata_Powgrade();

                if(Temp0){S2 = 0;}   //如果在充電,在AD轉(zhuǎn)化過后開啟充電

            }

            P_count1 = 0; 

            P_count2++;

            

            if(S2)

            {

                Pow_Display();        //顯示電量

            }

            else

            {

                charge_Display();     //顯示充電

            }       

        }   

        P_count0 = 0; 

        P_count1++;

    }    

    P_count0++;   

}

#endif

//----------------------------------------------------------------------

void Core_proc(void)

{

    ExtPow_Detect();        //獲得AD_result1值

    if(AD_result1 > 0x0FFF)

    {

        if(iPadConnect)

        {

            S1 = 0;      //給電池充電

            S2 = 1;

            DCUP = 0;    //此地是開還是不開?

            S3 = 1;

        }

        else

        {

            S2 = 1;      //連入外部電源

            DCUP = 1;

            S3 = 1;

            S1 = 1;

        }

        halt_count0 = 0;

        halt_count1 = 0;      

    }

    else

    {

        if(iPadConnect)

        {


            if(halt_count0 > halt_count0Value)

            {

                halt_count0 = 0;

                if(halt_count1 > halt_count1Value)      

                {

                    halt_count1 = 0;

                    LowPowS_Mode;   //休眠

                    Nor_Mode;

                }

                halt_count1++;            

            }


            halt_count0++;

        }

        else

        {

            if(AD_result0 > Nor_Pow)

            {

                S1 = 0;      //用電池供電

                S2 = 1;

                DCUP = 1;

                S3 = 0;

            }

            else

            {

                //顯示缺電警告

            }

            halt_count0 = 0;

            halt_count1 = 0;

        }

   }

}

//-------------------------------------------------------------------------

void main()

{

    init_MCU();

    init_Device();

    do

    {

        poll_count();

        Core_proc();

    }

    while(1);

}

發(fā)現(xiàn)程序進入不了
poll_count()函數(shù)

0
回復
發(fā)