標(biāo)題: 51單片機(jī)定時(shí)器0演示程序-與PCA計(jì)數(shù)的區(qū)別 [打印本頁(yè)]

作者: hujia    時(shí)間: 2015-2-18 01:09
標(biāo)題: 51單片機(jī)定時(shí)器0演示程序-與PCA計(jì)數(shù)的區(qū)別
定時(shí)器與PCA計(jì)數(shù)的區(qū)別:
定時(shí)計(jì)數(shù)器從零或指定值自加到溢出后產(chǎn)生中斷,后自動(dòng)或程序加載指定值到計(jì)數(shù)器,PCA有和定時(shí)器
相同的溢出中斷,但在多數(shù)情況下使用比較裝載值相等的方式產(chǎn)生中斷,比較產(chǎn)生中斷能根據(jù)設(shè)定狀態(tài)
,由硬件自動(dòng)執(zhí)行特定位翻轉(zhuǎn)或PWM
//數(shù)據(jù)類型定義
struct Times
{//定時(shí)器結(jié)構(gòu)數(shù)據(jù)類型
unsigned int    Match;    //重裝值容器
unsigned int    Dou;      //擴(kuò)展精度自加容器
unsigned int    Doub;     //擴(kuò)展精度終點(diǎn)容器
}Times0;                  //結(jié)構(gòu)變量名
==========================================================================================*/
void Times0_Setup()
{
//設(shè)定計(jì)數(shù)脈沖模式================
    //AUXR|= 0x80;   //定時(shí)器0工作在1T模式
    AUXR&= 0x7F;   //定時(shí)器0工作在12T模式
//設(shè)定工作方式====================
    TMOD&=0xF0;    //清除定時(shí)器0的所有狀態(tài),隱含13位計(jì)數(shù)器
    //TMOD|=0x0C;    //使用外部中斷INT0做計(jì)數(shù)脈沖
    TMOD|=0x01;    //16位定時(shí)
    //TMOD|=0x02;    //8位自動(dòng)重裝模式
    //TMOD|=0x03;    //雙8位定時(shí)
//裝入重裝值======================
//13位定時(shí)器
    //TL0 = Times0.Match;         //低8位裝載
    //TH0 = Times0.Match >> 5;    //高5位裝載
//16位軟件重裝定時(shí)器
    TL0 = Times0.Match;         //低8位裝載
    TH0 = Times0.Match >> 8;    //高8位裝載
//8位重裝定時(shí)器
    //TH0 = TL0 = Times0.Match;
//開始定時(shí)
    ET0=1;         //開定時(shí)器0中斷
    TR0=1;         //定時(shí)器0開始運(yùn)行
    EA=1;          //開總中斷
}

//中斷函數(shù)()
void tm0_isr() interrupt 1 using 1
{
//16位模式需要軟件重裝
      TL0 = Times0.Match;
      TH0 = Times0.Match >> 8;
//Times0.Match是ms級(jí),加入判斷Times0.Dou變量自減或自加可以達(dá)到秒或分鐘級(jí)
      if (Times0.Dou-- == 0)
      {//Dou自減,直到等于0
          Times0.Dou = Times0.Doub;    //Doub重裝
//=======================Times0事件做出處理=========================
//==================================================================
      }
}



作者: 123@diper    時(shí)間: 2015-9-24 22:40
先看看




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1