|
6#
發(fā)表于 2023-9-13 09:31:07
|
只看該作者
程序可以這樣寫,用中斷計(jì)數(shù)要準(zhǔn)一點(diǎn),
/****************PCA定時(shí)器定義*********************/
code unsigned long FOSC=11059200; //系統(tǒng)運(yùn)行頻率
#define T25Hz FOSC / 12 / 25
//中斷子程序 使用中斷1,寄存器組0 ,計(jì)數(shù)器模式
void count0() interrupt 1
{
T0count++;
}
//-----------------------------------------------
//PCA定時(shí)中斷程序 接收頻率=頻率分頻/8 25HZ周期為1/25*2=0.08秒
void PCA_isr() interrupt 7
{
static Count1=0; //靜態(tài)變量計(jì)數(shù)器1
Count1++; //每次中斷計(jì)數(shù)器加1
CCF0 = 0; //清中斷標(biāo)志
CCAP0L = value;
CCAP0H = value >> 8; //更新比較值
value += T25Hz;
if(Count1>=2) //如果計(jì)數(shù)器超過25/2=12.5HZ 0.08S
{
ET0=0; //計(jì)數(shù)器0關(guān)閉
dispcount=T0count; //更新頻率值
Count1=0; //計(jì)數(shù)器清零
T0count=0;
ET0=1; //計(jì)數(shù)器0允許
}
}
void main(void)
{
IT0 = 1; //設(shè)置INT0的中斷類型 (1:僅下降沿 0:上升沿和下降沿)
TMOD &= 0xf0; //設(shè)置定時(shí)器為模式0(16位自動重裝載)
TMOD |= 0x04; //定時(shí)器0工作于模式1-16位計(jì)數(shù)模式
TH0=0Xff;
TL0=0Xff;
TR0=1; //計(jì)數(shù)器0開始工作
ET0=1; //計(jì)數(shù)器0允許
ACC = P_SW1;
ACC &= ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=0
P_SW1 = ACC; //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
CCON = 0; //初始化PCA控制寄存器
CL = 0; //復(fù)位PCA寄存器
CH = 0;
CMOD = 0x00; //設(shè)置PCA時(shí)鐘源
value = T25Hz;
CCAP0L = value;
CCAP0H = value >> 8; //初始化PCA模塊0
value += T25Hz;
CCAPM0 = 0x49; //PCA模塊0為16位定時(shí)器模式
CR = 1; //PCA定時(shí)器開始工作
EA = 1;
} |
|