数控振荡器(NCO)是一个20位的定时器。它与普通的定时器工作原理不同。-普通的定时器每次加1,当累加值达到预设门限的时候,输出变化。
-NCO每次加一个固定值(预设值),当累加值达到最大值并产生溢出时,
输出变化
使用NCO来进行分频,输出信号频率值可以线性的改变。在MCC里面配置NCO,界面如下:
NCO的原理简图如下:
NCO输入时钟源多种时钟源,可供选择。
NCO工作模式
固定占空比模式:每次累加器溢出,产生一次电平翻转(图中D触发器构成的二分频电路)。输出信号频率为翻转频率的1/2,占空比固定为50%。
脉冲频率模式:输出脉冲宽度可选择,宽度为(1/2/4…/128)个输入时钟周期。输出信号周期为累加器溢出两次溢出的间隔周期。NCO输出方式:PIN脚输出产生中断驱动其他外设输出状态bit位MCC生成代码:代码在nco1.c文件中。
初始化NCO1CON,NCO1CLK,NCO1ACC和NCO1INC寄存器,使能NCO。voidNCO1_Initialize(void){
//SettheNCOtotheoptionsselectedintheGUI//ENdisabled;POLactive_hi;PFMPFM_mode;NCO1CON=0x01;
//CKSMFINTOSC_500KHz;PWS1_clk;NCO1CLK=0x03;//
NCO1ACCU=0x00;//
NCO1ACCH=0x00;//
NCO1ACCL=0x00;//
NCO1INCU=0x00;//
NCO1INCH=0x08;//
NCO1INCL=0x31;
//EnabletheNCOmoduleNCO1CONbits.EN=1;
//ClearingIFflagbeforeenablingtheinterrupt.PIR7bits.NCO1IF=0;
//EnablingNCO1interrupt.PIE7bits.NCO1IE=1;
}
查询输出状态
boolNCO1_GetOutputStatus(void){
//Returnoutputstatusonaccumulatoroverflowreturn(NCO1CONbits.OUT);}
当NCO累加器溢出时产生中断voidNCO1_ISR(void){
//CleartheNCO1interruptflagPIR7bits.NCO1IF=0;}
使用MCC学习PIC单片机 – NCO 数控振荡器



