STC15F2K60S2的脉冲捕获应用

发布者:未来画家最新更新时间:2022-08-16 来源: csdn关键字:STC15F2K60S2  脉冲捕获  寄存器 手机看文章 扫描二维码
随时随地手机看文章

STC15F2K60S2的脉冲捕获应用


1.PCA工作模式寄存器CMOD


PCA工作模式寄存器的格式如下:


CMOD:PCA工作模式寄存器

image.png

CIDL:空闲模式下是否停止PCA计数的控制位。


当CIDL=0时,空闲模式下PCA计数器继续工作;


当CIDL=1时,空闲模式下PCA计数器停止工作。


CPS2、CPS1、CPS0:PCA计数脉冲源选择控制位。PCA计数脉冲选择如下表所示。

image.png

例如,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控制寄存器CCON


PCA控制寄存器的格式如下:


CCON:PCA控制控制寄存器

image.png

CF:PCA计数器阵列溢出标志位。当PCA计数器溢出时,CF由硬件置位。如果CMOD寄存器的ECF位置位,则CF标志可用来产生中断。CF位可通过硬件或软件置位,但只可通过软件清零。


CR:PCA计数器阵列运行控制位。该位通过软件置位,用来起动PCA计数器阵列计数。该位通过软件清零,用来关闭PCA计数器。


CCF1:PCA模块1中断标志。当出现匹配或捕获时该位有硬件置位。该位必须通过软件清零.


CCF0:PCA模块0中断标志。当出现匹配或捕获时改为由硬件置位。该位必须通过软件清零。


3.PCA比较/捕获寄存器CCAPM0和CCAPM1


PCA模块0的比较/捕获寄存器的格式如下:


CCAPM0:PCA模块0的比较、捕获寄存器

image.png

B7 :保留为将来之用。


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/PWM 0 / 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的比较 / 捕获寄存器

image.png

B7:保留为将来之用。


ECOM1:允许比较器功能控制位。


当ECOM1=1时,允许比较器功能。


CAPP1:正捕获控制位。


当CAPP1 = 1时,允许上升沿捕获。


CAPN1:负捕获控制位。


当CAPN1= 1,允许下降沿捕获。


MAT1:匹配控制位。


当MAT1=1,PCA计数值与模块的比较 / 捕获寄存器的值得匹配将置位CCON寄存器的中断标志位CCF1。


TOG1翻转控制位。


当TOG1= 1时。工作在PCA高速输出模式,PCA计数器的值与模块的比较/捕获寄存器的值得匹配将使CEX1翻转。


(CEX1/ PCA1/ PWM1 P1.4或EX1 /CA1/WM 1/ P4.3


PWM1脉宽调节模式。


当PWM1= 1时,允许CEX1脚作脉宽调节输出。


(CEX1/ PCA1/PWM1/ P1.4或EX1/CA1/WM1/ P4.3


ECCF1:使能CCF0 中断。使能寄存器CCON的比较 / 捕获标志CCF1,用来产生中断。


PCA模块的工作模式设定表如下表所列:


PCA模块工作模式设定(CCAPMn寄存器,n=0,1)

image.png

PCA的16位计数器——低8位CL和8位CH


CL和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_PWM1


PCA模块0的PWM寄存器的格式如下:


PCA_PWM0:PCA模块0的PWM寄存器

image.png

EPC0H:在PWM模式下,与CCAP0H组成9位数。


EPC0L:在PWM模式下,与CCAP0L组成9位数。


PCA模块1的PWM寄存器的格式如下:


PCA_PWM1:PCA模块1的PWM寄存器

image.png

EPC1H:在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]增加到等于[CCAP nH,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, Pulse Width  Modulation)是一种使用程序来控制波形占空比、周期、相位波形的技术,在三相电机驱动、D/A转换等场合有广泛的应用。STC12C5A60S2系列单片机的PCA模块可以通过程序设定,使其工作于8位PWM模式。PWM模式的结构如下图所示。

所有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时钟输入源频率 / 256


PCA时钟输入源可以从以下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 = 38000 x256 x 1=9728000


如果要实现可调频率的PWM输出,可选择定时器0的溢出率或者ECI脚的脚入作为PCA/PWM的时钟输入源


当EPCnL = 0及ECCAPnL= 00H时,PWM固定输出高


当EPCnL = 1及ECCAPnL = 0FFH时,PWM固定输出低


当某个I/O口作为PWM使用时,该口的状态:

image.png


4.程序:


#include


sfr CCON = 0xd8;    


sfr CMOD = 0xd9; //PCA工作模式寄存器


sfr CCAPMO = 0xda;


sfr CCAPM1 = 0xdb;


sfr CCAPM2 = 0xdc;


 


sfr CL = 0xe9;


sfr CH = 0xF9;


 


sfr CCAP0L = 0xea;


sfr CCAP0H = 0xfa;


sfr CCAP1L = 0xeb;


sfr CCAP1H = 0xfb;


sfr CCAP2L = 0xec;


sfr CCAP2H = 0xfc;


 


code unsigned char seven_seg[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};


 


unsigned int cp;


unsigned int a,b,k;


 


sbit P3_4 = P3^4;            //数码管位选


sbit P3_5 = P3^5;


sbit P3_6 = P3^6;


 


sbit P3_2 = P3^2;            //PWM输出


bit P3_2_s;                            //状态变量


 


unsigned char i = 30,j;


 


void timer0_init(void)


{


       TMOD= 0x01;     


       TH0= (65536 - 1000) / 256;


       TL0= (65536 - 1000) % 256;


       EA= 1;


       ET0= 1; //设置中断优先次序寄存器IP中的PT0位,Timer0中断优先      


       TR0= 1;


}


void timer0_isr() interrupt 1


{


       TH0= (65536 - 1000) / 256;


       TL0= (65536 - 1000) % 256;


       cp++;


       if(cp>= 500)  // 半秒


       {


              cp= 0;


              k++;


       }


 


       if(P3_2== 0 && P3_2_s == 0)P3_2_s = 1;        //记脉冲


       if(P3_2== 1 && P3_2_s == 1)


       {


              P3_2_s= 0;


              b++;


       }


 


       if(k>= 2)         //1秒


       {


              k=  0;


              a= b;


              b= 0;


       }  


       P2= 0xff;


       P3= 0xff;     


        


       switch(j)


       {


              case0: P2 = seven_seg[a % 10]; P3_6 = 0;break;


              case1: P2 = seven_seg[a / 10 %10]; P3_5 = 0;break;


              case2: P2 = seven_seg[a / 100 % 10]; P3_4 = 0;break;            


       }


       j++;


       if(j>= 3) j = 0;


 


}


pwm_inti(void)


{


       CCAPMO= 0x42;  // PCA比较/捕获寄存器,允许比较器功能控制位,脉冲调节


       CCAPM1= 0x42;  //允许比较器功能,脉冲调节模式


       CCAPM2= 0x42;


       CL= 0;              //reset PCA base timer


       CH= 0;


       CMOD= 0x0a;      //PWM时钟源输入,系统时钟/4


       CCON= 0X40;      //通过软件置位,启动PCA计数器阵列计数


}


 


main(void)


{    


       pwm_inti();


       timer0_init();


 


       while(1)


       {


              if(CL== 0xff)


              {


                     CCAP0L= 256 - i;


                     CCAP0H= 256 - i;


                     CCAP1L= 256 - i;


                     CCAP1H= 256 - i;


                     CCAP2L= 256 - i;


                     CCAP2H= 256 - i;                           


               }


       }


}

关键字:STC15F2K60S2  脉冲捕获  寄存器 引用地址:STC15F2K60S2的脉冲捕获应用

上一篇:STC15单片机利用外部中断测频率
下一篇:51单片机内部E2ROM

推荐阅读最新更新时间:2024-11-10 04:52

ARM9_S3C2440学习(二)ARM状态下的寄存器组织
ARM状态下的寄存器组织见图2.3。ARM有37个32位长的寄存器,包括31个通用寄存器、1个当前程序状态寄存器CPSR(current program status register)、5个备份的程序状态寄存器SPSR(saved program status register)。这37个寄存器并不都是同时可见的。在任意时刻,只有16个通用寄存器(R0~R15)和一个或者两个状态寄存器(CPSR和SPSR)对处理器来讲是可见的。 1. 通用寄存器 31个通用寄存器用R0~R15表示,可以分为三类: ●未分组寄存器R0~R7。 ●分组寄存器R8~R14。 ●程序计数器PC(R15)。 (1)未分组寄存器R0~R7   在所有的
[单片机]
AVR--I/O端口寄存器
ATmega16的4个8位的端口都有各自对应的3个I/O端口寄存器,它们占用了I/O空间的12个地址 下面是PA口寄存器—PORTA、DDRA、PINA各个位的具体定义,以及其是否可以通过指令读写操作和RESET复位后的初始值。其它3个口的寄存器的情况与PA口相同,只是地址不一样。 1 ) 正确使用AVR的I/O口要注意:先正确设置DDRx方向寄存器,再进行I/O口的读写操作。 2) AVR的I/O口复位后的初始状态全部为输入工作方式,内部上拉电阻无效。所以,外部引脚呈现三态高阻输入状态。 3) 因此,用户程序需要首先对要使用的I/O口进行初始化设置,根据实际需要设定使用I/O口的工作方式(输出还是输入),当设定为
[单片机]
AVR--I/O端口<font color='red'>寄存器</font>
汇编入门学习笔记 (十)—— 标志寄存器、串传送指令
疯狂的暑假学习之 汇编入门学习笔记 (十) 标志寄存器 参考: 《汇编语言》 王爽 第11章 CPU内部有一种特殊的寄存器叫标志寄存器(flag),它与ax,bx,cx等其他寄存器不同,它不是用来存放数据的,而是用来存放状态的。flag寄存器是按位器作用的,即只有0和1。 flag寄存器的结构: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF SF ZF AF PF CF 在debug中标志位的表示: 标志 1
[单片机]
STM32寄存器列表 RCC时钟相关寄存器
RCC_CR(时钟控制寄存器) 25位:PLLRDY-PLL时钟就绪标志(PLL锁定后由硬件置1)定义:0(未锁定),1(锁定) 24位:PLLON-PLL使能(手动)定义:0(PLL关闭),1(PLL使能)。进入待机或停机模式时,该位由硬件清零当PLL用作系统始终时,该位不能被清零。 19位:CSSON时钟安全系统使能(由软件置1或清零)定义:0(时钟监测器关闭),1(如果外部4-16M振荡器就绪,时钟监测器开启) 18位:HSEBYP外部高速时钟旁路。定义:0(晶振4-16M),1(有源晶振25M)。调试模式下由软件控制。只有在4-16M振荡器关闭情况下,才能写入该位。 17位:HSERDY外部高速时钟就绪
[单片机]
DMA应用实例详解
闲来无事,学习了下DMA的相关知识和使用。平时看到的DMA都是简单的存储器到寄存器或者寄存器到存储器这样单类的传输。学习完DMA后,我想写个比较综合点的DMA学习实例,不仅能增加自己对DMA的深入应用,也同时发表于此给网友提供参考。之所以说多知识,实例涉及到存储器到寄存器和寄存器到存储器,以及DMA中断使用等相关知识。 实例内容:单片机采集AD值通过DMA传输给RAM存储器(就是定义的变量),同时又将存储器数据传输给串口输出,实现AD采集与串口输出的转换。 下面赋上一些主要的代码进行分析: 1.主函数部分 int main(void) { delay_init(); //延时初始化 RCCInit()
[单片机]
DMA应用实例详解
AVR I/O口使用方法
AVR单片机寄存器 DDRx PORTx PINx 与对应IO端口之间的关系(x代表某个端口,如A端口、B端口等) 下表以端口B的第2位PB2为例子加以说明,并且假设PB2为悬空状态 DDRB.2 PORTB.2 读取PINB.2的结果 引脚PB2的状态 1 1 1 PB2推挽输出 1 1 0 0 PB2推挽输出 0 0 1 1 PB2弱上拉,可作输入 0 0 × PB2高阻抗,可作输入 读取PINB.2时,就是读取PB2引脚的实际电平, 如果PB2直接接VCC,那么任何时候读取PINB.2的结果都是1 如果PB2直接接GND,那么任何时候读取PIN
[单片机]
ARM处理器寄存器介绍
ARM处理器模式 用户模式(User):ARM处理器正常的程序执行状态 快速中断模式(FIQ):用于高速数据传输或通道处理 外部中断模式(IRQ):用于通用的中断处理 管理模式(Supervisor):操作系统使用的保护模式 数据访问终止模式(Abort):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护 系统模式(System):运行具有特权的操作系统任务 未定义指令中止模式(Undifined):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真 ARM寄存器 ARM共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器.这些寄存器不能被同时访问,但在任何时候,通用寄存器R0~R14,程序计
[单片机]
ARM处理器<font color='red'>寄存器</font>介绍
FSMC驱动TFTLCD原理,时序和寄存器介绍
一,FSMC简介 FSMC:灵活的静态存储控制器 能够与同步或异步存储器和16位PC存储器卡连接 STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器 STM32 407和103是不支持SD RAM的,429,439支持SD RAM操作12345 二,FSMC驱动LCD原理 FSMC驱动外部SRAM(LCD被当做SRAM) SRAM控制包含: 地址线(如A0~A25) 数据线(如D0~D15) 写信号(WE,即WR) 读信号(OE,即RD) 片选信号(CS) 若SRAM支持字节控制,还有UB/LB信号。12345678 上一节提到的 TFTLCD信号
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved