欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PIC16F1829 比较器初始化设置及应用

程序员文章站 2023-10-22 09:33:45
//===比较器2设置=========== //比较器2 反向输入端 通道选择 #define cmp2_c2nch(x) cm2con1 = (cm2con1&0xfc)|x...
//===比较器2设置===========

//比较器2 反向输入端 通道选择
#define	cmp2_c2nch(x)	cm2con1 = (cm2con1&0xfc)|x  


#define	cmp2_ie_enb		c2ie = 1
#define	cmp2_ie_dis		c2ie = 0

#define	cmp2_intp_enb	c2intp = 1 //允许产生正边沿中断标志
#define	cmp2_intp_dis	c2intp = 0 //不允许产生正边沿中断标志
#define	cmp2_intn_enb	c2intn = 1 //允许产生负边沿中断标志
#define	cmp2_intn_dis	c2intn = 0 //不允许产生负边沿中断标志

#define	cmp2_out 		c2out //比较器2输出位

//*************************************
// 函数名称:init_cmp1bc
// 函数功能:初始化比较器1设置
// 入口参数:
// 出口参数:无
// 
//***************************************
void init_cmp2bc(void)
{
	cm2con0 = 0x84|(1<<4) ; //开启比较器 快速模式	比较器输出极性反相
//	c2hys = 1 ;//比较器滞后
	cm2con1 = 0x00 ; //
	c2oe = 1 ;//输出使能
//	c2intp = 1 ;//允许正向边沿
//	c2intn = 1 ;//允许负向边沿
}

//*************************************
// 函数名称:setcmpparam
// 函数功能:设置比较器参数
// 入口参数:当前步1-6 
// 出口参数:
// 血液 : 此设置为bldc 无感检测反电动势设置
//***************************************
void setcmpparam(uint8 invalue)
{	
	if(f_direction == zen)
	{
		switch(invalue)//取步 正转
		{
			case 1 : //ab 	
				cmp2_c2nch(cplc_chanal) ;//检测c点电势
				cmp2_intp_dis ;
				cmp2_intn_enb ;		//检测下降沿
				break ;
			case 2 ://ac			
				cmp2_c2nch(cplb_chanal) ;//检测b点电势
				cmp2_intn_dis ;
				cmp2_intp_enb ;		//检测上降沿
				break ;
			case 3 : //bc		
				cmp2_c2nch(cpla_chanal) ;//检测a点电势	
				cmp2_intp_dis ;
				cmp2_intn_enb ;		//检测下降沿		
				break ;
			case 4 ://ba	
				cmp2_c2nch(cplc_chanal) ;//检测c点电势
				cmp2_intn_dis ;
				cmp2_intp_enb ;		//检测上降沿		
				break ;
			case 5 ://ca	
				cmp2_c2nch(cplb_chanal) ;//检测b点电势
				cmp2_intp_dis ;
				cmp2_intn_enb ;		//检测下降沿
				break ;
			case 6 ://cb	
				cmp2_c2nch(cpla_chanal) ;//检测a点电势
				cmp2_intn_dis ;
				cmp2_intp_enb ;		//检测上降沿
				break ;		
			default : 	
				return ; //霍尔信号不正确 直接退出
				//break ;
		}
	}
	else	//反转
	{   
		switch(invalue)//取步 反转
		{
			case 1 : //ab 	
				cmp2_c2nch(cplc_chanal) ;//检测c点电势
				cmp2_intn_dis ;
				cmp2_intp_enb ;		//检测上降沿
				break ;
			case 2 ://ac			
				cmp2_c2nch(cplb_chanal) ;//检测c点电势	
				cmp2_intp_dis ;
				cmp2_intn_enb ;		//检测下降沿	
				break ;
			case 3 : //bc		
				cmp2_c2nch(cpla_chanal) ;//检测c点电势	
				cmp2_intn_dis ;
				cmp2_intp_enb ;		//检测上降沿				
				break ;
			case 4 ://ba	
				cmp2_c2nch(cplc_chanal) ;//检测c点电势	
				cmp2_intp_dis ;
				cmp2_intn_enb ;		//检测下降沿			
				break ;
			case 5 ://ca	
				cmp2_c2nch(cplb_chanal) ;//检测c点电势	
				cmp2_intn_dis ;
				cmp2_intp_enb ;		//检测上降沿
				break ;
			case 6 ://cb	
				cmp2_c2nch(cpla_chanal) ;//检测c点电势
				cmp2_intp_dis ;
				cmp2_intn_enb ;		//检测下降沿
				break ;		
			default : 	
				return ; //霍尔信号不正确 直接退出
				//break ;
		}
	}	
}	

	
//---应用实例----
	//cmp2 初始化
	init_cmp2bc() ; //初始化比较器2 
	
	//设置比较器参数
	setcmpparam(1) ;//