|
定時(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ù)類(lèi)型定義
struct Times
{//定時(shí)器結(jié)構(gòu)數(shù)據(jù)類(lèi)型
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;
//開(kāi)始定時(shí)
ET0=1; //開(kāi)定時(shí)器0中斷
TR0=1; //定時(shí)器0開(kāi)始運(yùn)行
EA=1; //開(kāi)總中斷
}
//中斷函數(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事件做出處理=========================
//==================================================================
}
}
|
|