PIC16F1829 比较器初始化设置及应用
程序员文章站
2023-12-05 09:23:16
//===比较器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) ;//