//用PCA实现定时器
#include "STC12C5A.H"
#include "intrins.h"
#define FOSC 24000000L
#define T100Hz (FOSC/12/100) //100Hz,10ms
typedef unsigned char BYTE;
typedef unsigned int WORD;
sbit PCA_LED = P0^0;
BYTE count=0;
WORD value;
//PCA中断服务程序
void PCA_ISR() interrupt 7 using 1
{
CCF0 = 0; //清中断标志
CCAP0L = value;
CCAP0H = value>>8; //更新比较值
value += T100Hz;
if(count++ == 100) //定时1S
{
count = 0;
PCA_LED = !PCA_LED; //取反LED
}
}
//主函数
void main(void)
{
CCON = 0; //初始化PCA控制寄存器,PCA定时器关闭,清CF标志,清中断标志
CL = 0; //复位 PCA base timer
CH = 0;
CMOD = 0x00; //PCA时钟源: FOSC/12,关闭PCA定时器溢出中断
value = T100Hz;
CCAP0L = value; //初始化PCA模块0
CCAP0H = value>>8;
value += T100Hz;
CCAPM0 = 0x49; //16位定时器模式,使能PCA中断
CR = 1; //使能PCA定时器
EA = 1; //开总中断
while(1);
}