|
#include "STC12C2052AD.H"
#include "intrins.h"
sbit LED = P2^1; //測試LED
sbit LED2= P2^2; //接LED觀察
unsigned int t0=1000; //定義16位變量t,定時1ms
unsigned int t1=3000; //定義16位變量t,定時3ms
unsigned int value0;
unsigned int value1;
void PCA_isr() interrupt 6
{
if(CCF0)
{
CCF0 = 0; //清中斷,因PCA計數溢出中斷已禁止,所以這里不必再清CF
CCAP0L = value0; //更新比較值
CCAP0H = value0>>8;
value0 += t0; //累加定時間隔值
LED =! LED; //LED取反
}
if (CCF1)
{
CCF1 = 0; //清中斷,因PCA計數溢出中斷已禁止,所以這里不必再清CF
CCAP1L = value1; //更新比較值
CCAP1H = value1>>8;
value1 += t1; //累加定時間隔值
LED2 =! LED2; //LED2取反
}
}
void main()
{
CCON=0;
CL=0;
CH=0;
value0 = t0;
CCAP0L = t0; //更新比較值
CCAP0H = t0>>8;
value0 += t0; //累加定時間隔值
value1 = t1; //如改成value1=3500,進中斷后還是按照value1=3000,則可讓波形2延時0.5ms,如下頁波形圖
CCAP1L = t1; //更新比較值
CCAP1H = t1>>8;
value1 += t1; //累加定時間隔值
CMOD = 0x00; //模式:FSOC/12、關ECF允許PCA中斷
EPCA_LVD = 1; //打開PCA總中斷
CCAPM0 = 0x49; //模塊0設置16位定時器,并產生模塊0的中斷信息CCF0
CCAPM1 = 0x49; //模塊1相同設置
EA=1;
CR=1;
while(1);
}
|
|