標題:
51單片機定時器0演示程序-與PCA計數的區(qū)別
[打印本頁]
作者:
hujia
時間:
2015-2-18 01:09
標題:
51單片機定時器0演示程序-與PCA計數的區(qū)別
定時器與PCA計數的區(qū)別:
定時計數器從零或指定值自加到溢出后產生中斷,后自動或程序加載指定值到計數器,PCA有和定時器
相同的溢出中斷,但在多數情況下使用比較裝載值相等的方式產生中斷,比較產生中斷能根據設定狀態(tài)
,由硬件自動執(zhí)行特定位翻轉或PWM
//數據類型定義
struct Times
{//定時器結構數據類型
unsigned int Match; //重裝值容器
unsigned int Dou; //擴展精度自加容器
unsigned int Doub; //擴展精度終點容器
}Times0; //結構變量名
==========================================================================================*/
void Times0_Setup()
{
//設定計數脈沖模式================
//AUXR|= 0x80; //定時器0工作在1T模式
AUXR&= 0x7F; //定時器0工作在12T模式
//設定工作方式====================
TMOD&=0xF0; //清除定時器0的所有狀態(tài),隱含13位計數器
//TMOD|=0x0C; //使用外部中斷INT0做計數脈沖
TMOD|=0x01; //16位定時
//TMOD|=0x02; //8位自動重裝模式
//TMOD|=0x03; //雙8位定時
//裝入重裝值======================
//13位定時器
//TL0 = Times0.Match; //低8位裝載
//TH0 = Times0.Match >> 5; //高5位裝載
//16位軟件重裝定時器
TL0 = Times0.Match; //低8位裝載
TH0 = Times0.Match >> 8; //高8位裝載
//8位重裝定時器
//TH0 = TL0 = Times0.Match;
//開始定時
ET0=1; //開定時器0中斷
TR0=1; //定時器0開始運行
EA=1; //開總中斷
}
//中斷函數()
void tm0_isr() interrupt 1 using 1
{
//16位模式需要軟件重裝
TL0 = Times0.Match;
TH0 = Times0.Match >> 8;
//Times0.Match是ms級,加入判斷Times0.Dou變量自減或自加可以達到秒或分鐘級
if (Times0.Dou-- == 0)
{//Dou自減,直到等于0
Times0.Dou = Times0.Doub; //Doub重裝
//=======================Times0事件做出處理=========================
//==================================================================
}
}
作者:
123@diper
時間:
2015-9-24 22:40
先看看
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1