STC15F2K60S2的脉冲捕获应用1.PCA工作模式寄存器CMODPCA工作模式寄存器的格式如下:CMOD:PCA工作模式寄存器SFRnameAddressbitB7B6B5B4B3B2B1B0CCOND9HnameCIDL---CPS2CPS1CPS0ECFCIDL:空闲模式下是否停止PCA计数的控制位。当CIDL=0时,空闲模式下PCA计数器继续工作;当CIDL=1时,空闲模式下PCA计数器停止工作。CPS2、CPS1、CPS0:PCA计数脉冲源选择控制位。PCA计数脉冲选择如下表所示。CPS2CPS1CPS0选择PCA/PWM时钟源输入0000,系统时钟,SYSclk/120011,系统时钟,SYSclk/20102,定时器0的溢出脉冲。由于定时器0可以工作在T1模式,所以可以达到记一个时钟就溢出,从而达到最高频率CPU工作时钟SYSclk,通过改变定时器0的溢出率,可以实现可调频率的PWM输出0113,ECI/P1.2(或P4.1)脚输入的外部时钟(最大速率=SYSclk/2)1004,系统时钟,SYSclk1015,系统时钟/4,SYSclk/41106,系统时钟/6,SYSclk/61117,系统时钟/8,SYSclk/8例如,CPS2/CPS1/CPS0=1/0/0时,PCA/PWM的时钟源是SYSclk,不用定时器0,PWM的频率为SYSclk/256如果要用系统时钟/3来作为PCA的时钟源,应让T0工作在1T模式,计数3个脉冲即产生溢出。输出14K~19K频率的PWM。用T0的溢出可对系统时钟进行1~256级分频。ECF:PCA计数溢出中断使能位。当ECF=0时,禁止寄存器CCON中CF位的中断。当ECF=1时,允许寄存器CCON中CF位的中断。2.PCA控制寄存器CCONPCA控制寄存器的格式如下:CCON:PCA控制控制寄存器SFRnameAddressbitB7B6B5B4B3B2B1B0CCOND8HnameCFCR----CCF1CCF0CF:PCA计数器阵列溢出标志位。当PCA计数器溢出时,CF由硬件置位。如果CMOD寄存器的ECF位置位,则CF标志可用来产生中断。CF位可通过硬件或软件置位,但只可通过软件清零。CR:PCA计数器阵列运行控制位。该位通过软件置位,用来起动PCA计数器阵列计数。该位通过软件清零,用来关闭PCA计数器。CCF1:PCA模块1中断标志。当出现匹配或捕获时该位有硬件置位。该位必须通过软件清零.CCF0:PCA模块0中断标志。当出现匹配或捕获时改为由硬件置位。该位必须通过软件清零。3.PCA比较/捕获寄存器CCAPM0和CCAPM1PCA模块0的比较/捕获寄存器的格式如下:CCAPM0:PCA模块0的比较、捕获寄存器SFRnameAddressBitB7B6B5B4B3B2B1B0CCAPM0DAHname-ECOM0CAPP0CAPN0MAT0TOG0PWM0ECCF0B7:保留为将来之用。ECOM0:允许比较器功能控制位。当ECOM0=1时,允许比较器功能。CAPP0:正捕获控制位。当CAPP0=1时,允许上升沿捕获。CAPN0:负捕获控制位。当CAPN0=1时,允许下降沿捕获。MAT0:匹配控制位。当MAT0=1时,PCA计数值与模块的比较/捕获寄存器的值的匹配将置位CCON寄存器的中断段标志位CCF0.TOG0:翻转控制位。当TOG0=1时。工作在PCA高速输出模式,PCA计数器的值与模块的比较/捕获寄存器的值得匹配将使CEX0脚翻转。(CEX0/PCA0/PWM0/P1.3或CEX0/PCA0/PWM0/P4.2)PWM0:脉宽调节模式。当PWM0=1时,允许CEX0脚用作脉宽调节输出。(CEX0/PCA0/PWM0/P1.3或CEX0/PCA0/PWM0/P4.2)ECCF0:使能CCF0中断。使能寄存器CCON的比较/捕获标志CCF0,用来产生中断。PCA模块1的比较/捕获寄存器的格式如下:CCAPM1:PCA模块1的比较/捕获寄存器SFRnameAddressBitB7B6B5B4B3B2B1B0CCAPM1DBHname-ECOM1CAPP1CAPN1MAT1TOG1PWM1ECCF1B7:保留为将来之用。ECOM1:允许比较器功能控制位。当ECOM1=1时,允许比较器功能。CAPP1:正捕获控制位。当CAPP1=1时,允许上升沿捕获。CAPN1:负捕获控制位。当CAPN1=1,允许下降沿捕获。MAT1:匹配控制位。当MAT1=1,PCA计数值与模块的比较/捕获寄存器的值得匹配将置位CCON寄存器的中断标志位CCF1。TOG1翻转控制位。当TOG1=1时。工作在PCA高速输出模式,PCA计数器的值与模块的比较/捕获寄存器的值得匹配将使CEX1翻转。(CEX1/PCA1/PWM1P1.4或EX1/CA1/WM1/P4.3PWM1脉宽调节模式。当PWM1=1时,允许CEX1脚作脉宽调节输出。(CEX1/PCA1/PWM1/P1.4或EX1/CA1/WM1/P4.3ECCF1:使能CCF0中断。使能寄存器CCON的比较/捕获标志CCF1,用来产生中断。PCA模块的工作模式设定表如下表所列:PCA模块工作模式设定(CCAPMn寄存器,n=0,1)-ECOMnCAPPnCAPNnMATnTOGnPWMnECCFn模块功能0000000无此操作10000108位PWM,无中断11000118位PWM输出,由低变高产生中断10100118位PWM输出,由高变低产生中断11100118位PWM输出,由高变低或由低到高X10000X16位捕获模式,由CEXn/PCAn的上升沿触发X01000X16位捕获模式,由CEXn/PCAn的下降沿触发X11000X16位捕获模式,由CEXn/PCAn的跳变触发100100X16位软件定时器100110X16位高速输出PCA的16位计数器——低8位CL和8位CHCL和CH地址分别为E9H和F9H,复位值均为00H,用于保存PCA的装载值。PCA捕捉/比较寄存器——CCAPnL(低位字节)和CCAPnH(高位字节)当PCA模块用于捕获或比较时,它们用于保存各个模块的16位捕捉计数值;当PCA模块用于PWM模式时,它们用于控制输出的占空比。其中,n=0、1,分别对应模块0和模块1。复位值均为00H。它们对应的地址分别为:CCAP0L——EAH、CCAP0H——FAH:模块0的捕捉/比较寄存器。CCAP1L——EBH、CCAP1H——FBH:模块1的捕捉/比较寄存器。PCA模块PWM寄存器PCA_PWM0和PCA_PWM1PCA模块0的PWM寄存器的格式如下:PCA_PWM0:PCA模块0的PWM寄存器SFRnameAddressbitB7B6B5B4B3B2B1B0PCA_PWM0F2Hname------EPC0HEPC0LEPC0H:在PWM模式下,与CCAP0H组成9位数。EPC0L:在PWM模式下,与CCAP0L组成9位数。PCA模块1的PWM寄存器的格式如下:PCA_PWM1:PCA模块1的PWM寄存器SFRnameAddressbitB7B6B5B4B3B2B1B0PCA_PWM1F3Hname------EPC1HEPC1LEPC1H:在PWM模式下,与CCAP1H组成9位数。EPC1L:在PWM模式下,与CCAP1L组成9位数。PCA模块的工作模式捕获模式:要使一个PCA模块工作在捕获模式,寄存器CCAPMn的两位(CAPNn和CAPPn)或其中任何一位必须置1。PCA模块工作于捕获模式时,对模块的外部CCPn输入(CCP0/P1.3,CCP1/P1.4)的跳变进行采样。当采样到有效跳变时,PCA硬件就将PCA计数器阵列寄存器(CH和CL)的值装载到模块的捕获寄存器中(CCAPnL和CCAPnH)。如果CCON特殊功能寄存器的位CCFn和CCAPMn特殊功能寄存器中的位ECCFn位被置位,将产生中断。可在中断服务程序中判断哪一个模块产生了中断,并注意中断标志位的软件清零问题。位软件定时器模式通过置位CCAPMn寄存器的ECOM和MAT位,可使PCA模块用作软件定时器(上图)。PCA定时器的值与模块捕获寄存器的值相比较,当两者相等时,如果位CCFn(在CCON特殊功能寄存器中)和位ECCFn(在CCAPMn特殊功能寄存器中)都置位,将产生中断。[CH,CL]每隔一定的时间自动加1,时间间隔取决于选择的时钟源。例如,当选择的时钟源为SYSclk/12,每12个时钟周期[CH,CL]加1。当[CH,CL]增加到等于[CCAPnH,CCAPnL]时,CCFn=1,产生中断请求。如果每次PCA模块中断后,在中断服务程序中断给[CCAPnH,CCAPnL]增加一个相同的数值,那么下次中断来临的间隔时间T也是相同的,从而实现了定时功能。定时时间的长短取决于时钟源的选择以及PCA计数器数值的设置。下面举例说明PCA计数器计数值的计算方法。假设,系统时钟频率SYSclk=18.432MHz,选择的时钟源为SYSclk/12,定时时间T为5ms,则PCA计数器计数值为:PCA计数器的计数值=T/((1/SYSclk)*12)=0.005/(1/18432000)*12)=7680(10进制数)=1E00H(16进制数)也就是说,PCA计时器计数1E00H次,定时时间才是5ms,这也就是每次给[CCAPnH,CCAPnL]增加的数值(步长)。脉宽调节模式(PWM)脉宽调节模式(PWM,PulseWidthModulation)是一种使用程序来控制波形占空比、周期、相位波形的技术,在三相电机驱动、D/A转换等场合有广泛的应用。STC12C5A60S2系列单片机的PCA模块可以通过程序设定,使其工作于8位PWM模式。PWM模式的结构如下图所示。EPCnHCCAPnHEPCnLCCAPnL[7:0]0CL[7:0]9位比较器—CAPNnCAPPnPWMnECOMnECCFnTOGnMATn(0,CL[7:0])(EPCnL,CCPnL[7:0])(0,CL[7:0])=(EPCnL,CCPnL[7:0])CLoverflow1010000enable输出0输出1CCAPMn,n=0,1,2地址:Dah,DBh,DChPWMn所有PCA模块都可用作PWM输出。输出频率取决于PCA定时器的时钟源。由于所有模块共用仅有的PCA定时器,所有它们的输出频率相同。各个模块的输出占空比是独立变化的,与使用的捕获寄存器[EPCnL,CCAPn]有关。当寄存器CL的值小于{EPCNL,CCAPNL}时,输出为低;当寄存器CL的值等于或大于{EPCnL,CCAPnL}时,输出为高。当CL的值由FF变为00溢出时,[EPCnH,CCQAPnH]的内容装载到{EPCnL,CCAPnL}中。这样就可实现无干扰地更新PWM。要使能PWM模式,模块CCAPMn寄存器的PWMn和ECOMn位必须置位。由于PWM是8位的,所以:PWM的频率=PCA时钟输入源频率/256PCA时钟输入源可以从以下8种中选择一种:SYScLK,SYSclk/2,SYSclk/4,SYSclk/6,SYSclk/8,SYSclk/12,定时器0的溢出,ECI/P3.4输出入。举例:要求PWM输出频率为38KHZ,选SYSclk为PCA/PWM时钟输入源,求出SYSclk的值由计算公式38000=SYSclk/256,得到外部时钟频率SYSclk=38000x256x1=9728000如果要实现可调频率的PWM输出,可选择定时器0的溢出率或者ECI脚的脚入作为PCA/PWM的时钟输入源当EPCnL=0及ECCAPnL=00H时,PWM固定输出高当EPCnL=1及ECCAPnL=0FFH时,PWM固定输出低当某个I/O口作为PWM使用时,该口的状态:PWM之前口的状态PWM输出时的状态弱上拉/准双向强推挽输出/强上拉输出,要加输出限流电阻1K~10K强推挽输出/强上拉输出强推挽输出/强