STC8H的比较器比PWM好懂多了;
/*********比较器初始化函数****************/ Void CMPint(Void) { CMPCR2 = OX00;//清零 CMPCR2 &=0xBF; //1011 1111, 开启0.1us滤波 CMPCR2 |= 0x3F;//0001 1111, 比较器结果经过63个去抖时钟后输出 CMPCR1 = 0x00; //清零 CMPCR1 |= 0x10; //0001 0000,开启比较器下降沿中断(根据需要修改) CMPCR1 &= 0XF7; //1111 0111,P3.7为CMP+输入脚 CMPCR1 &= 0xFB; //1111 1011,内部1.19V为CMP-输入脚 CMPCR1 &= 0xFD; //1111 1101,禁止比较器输出(根据需要是否输出) CMPCR1 |= 0x80; //开启比较器模块 } 此函数在main主函数中作初始化函数,去抖可根据自己需要修改。 需要执行的任务放在比较器中断函数内 /******比较器中断函数,级别在初始化中设置为最高级3*********/ void CMP_Isr() interrupt 21 { CMPCR1 &= 0xBF;//1011 1111,使CMPIF=0,清中断标志 想要执行的任务;//要简洁明了,不要占用过多步骤,如多可执行一个标志位,由标志位触发执行相关复杂任务。 }
|