STC15W408AS CCP中断1MS设置

#include <stc15w401as.h>
#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;		
	}
	




}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值