#include<pic.h>
unsigned int g_Period=3;//方波周期,单位为us
unsigned int g_DutyWidth=8;//这样定义提高程序的灵活性
void InitCCP1()
{
CCP1IF=0;//比较相等标志位清零
CCP1IE=1;//CCP1中断使能
PEIE=1;//外围中断使能
GIE=1;//总中断使能
T1CKPS1=0;//预分频比为1:1
T1CKPS0=0;
T1OSCEN=0;//关闭独立时钟振荡器
TMR1CS=0;//时钟来源于Fosc/4
TMR1ON=1;//使能定时器计数
CCPR1L=(g_DutyWidth>>1) & 0x00FF;//获得半周期低8位
CCPR1H=((g_DutyWidth>>1)>>8) & 0x00FF;//把半周期高8位移位到低8位
CCP1M3=1;//1010:比较模式,触发特殊事件:复位TMR1计数值
CCP1M2=0;
CCP1M1=1;
CCP1M0=0;
COUT=0;//COUT作为输出引脚
COUT=1;//初始值为低电平
}
void interrupt CCP1INT(void)
{
if(CCP1IF)//是CCP1中断
{
CCP1IF=0;//CCP1标志位清零
COUT=!COUT;//COUT取反后输出
}
}
void main()
{
InitCCP1();//初始化CCP1模块
while(1);
{;}
} |