STC15W408AS CCP中断1MS设置

#include 
#define FOSC    12000000L
#define Foot  (FOSC / 12 / 1000)	   //1ms


bit dog_flag=0;
unsigned int value;	


void ConfigIoWdt();
void ConfigCCP();
//sbit LED=P2^3;


void main()
{	
//       unsigned int j;
	ConfigIoWdt();
	ConfigCCP();
	EA=1;           // 打开总中断


//	P2=0X70;		//	  测试指示灯
//	P3=0X3F;		//
	
	while(1)
	{
/*		 j++;
		 if(j>=1000)
		 {
		 	j=0;
			LED=~LED;
		 }
*/


		
		//---------------------
		while(!dog_flag);			   	// 在此等待dog_flag=1,控制CPU指针不能跳出循环
		dog_flag=0;
		WDT_CONTR=WDT_CONTR | 0x10;    	// 喂狗,等同于CLRWDT指令
	}	
}


void ConfigIoWdt()		
{
	//端口模式:
	P1M1 =0xff;	     	// 1111 1111
	P1M0 =0;	        // 0000 0000 P1高阻输入(M1=1,M0=0 高阻)


	P2M1 =0;			// 0000 0000
	P2M0 =0xff;         // 1111 1111 P2口推挽输出	(M1=0,M0=1 推挽)


	P3M1 =0x04;			// 0000 0100
	P3M0 =0xfb;		   	// 1111 1011 


	P5M1 =0;         	// 0000 0000
	P5M0 =0xff; 		// 1111 1111 P5口推挽输出
	//看门狗设置 
	WDT_CONTR=0x3f;	  	// 开门狗软件启动,分频比为256,空闲也计数,看门狗溢出时间8.4秒	
}


void ConfigCCP()
{
	CCON = 0;                       //初始化PCA控制寄存器//PCA定时器停止//清除CF标志 //清除模块中断标志
                                                                    
	CL=0;							//复位PCA寄存器
	CH=0;


	CMOD = 0x00;                    //空闲模式下PCA计数器继续工作//设置PCA时钟源//禁止PCA定时器溢出中断
    
	value = Foot;                   //设计步长          
        CCAP0L = value;
        CCAP0H = value >> 8;            //初始化PCA模块
        CCAPM0 = 0x49;                  //PCA模块0为16位定时器模式


	//CCP1上升沿捕获模式,同步信号
	//CCAP1L = 0;	
	//CCAP1H = 0;
	//CCAPM1 = 0x21;			 //上升沿捕获,产生中断
    
	CR = 1;                         //PCA定时器开始工作
    
}


void PCA_isr() interrupt 7 using 1
{


    if(CCF0)
	{
		CCF0 = 0;                       //清中断标志
		value += Foot;
    	        CCAP0L = value;
    	        CCAP0H = value >> 8;
		dog_flag = 1;		
	}
	




}

你可能感兴趣的:(STC15W408AS CCP中断1MS设置)