11.STC15W408AS单片机CCP/PCA/PWM应用

发布者:DelightfulGaze最新更新时间:2022-08-03 来源: csdn关键字:STC15W408AS  单片机  CCP  PCA  PWM 手机看文章 扫描二维码
随时随地手机看文章

STC15W408AS单片机集成了3路可编程计数器阵列(CCP/PCA)模块可用于软件定时器、外部脉冲的捕捉、高速脉冲输出以及脉宽调制(PWM)输出。


一、与CCP/PWM/PCA应用有关的特殊功能寄存器

STC15系列 1T 8051单片机 CCP/PCA/PWM特殊功能寄存器表 CCP/PCA/PWM SFRs

1.1PCA工作模式寄存器CMOD

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


CMOD : PCA工作模式寄存器

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


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


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


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

例如,CPS2/CPS1/CPS0 = 1/0/0时,CCP/PCA/PWM的时钟源是SYSclk,不用定时器0


PWM的频率为SYSclk/256。


如果要用系统时钟/3来作为PCA的时钟源, 应选择T0的益处作为CCP/PCA/PWM的时钟源,此时应让T0工作在1T模式,计 3个脉冲即产生溢出 用T0的溢出可对系统时钟进行1 ~ 65536级分频(T0工作在16位重装载模式)。


ECF:PCA计数溢出中断使能 。


当ECF = 0时,禁止寄存器CCON中CF位的中断;


当ECF = 1时,允许寄存器CCON中CF位的中断。


1.2 PCA控制寄存器CCON

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


CCON : PCA控制控制寄存器

CF:PCA计数器阵列溢出标志位。当PCA计数器溢出时 CF由硬件置位。如果CMOD寄存器


的ECF位置位, CF标志可用来产生中断。CF位可通过硬件或软件置位, 但只可通过软 件清零。


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


通过软件清零, 用来关闭PCA计数器。


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


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


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


1.3 PCA比较/捕获寄存器CCAPM0、CCAPM1和CCAPM2

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


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


B7:保留为将来之用。


ECOM0:允许比较器功能控制位


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


CAPP0: 正捕获控制位


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


CAPN0:负捕获控制位


当CAPN0=1时,允许下降捕获


MAT0: 匹配控制位


当MAT0=1时,PCA计数值与模块的比较/捕获寄存器的值的匹配将置位CCON寄存


器的中断标志位CCF0。


TOG0: 翻转控制位


当TOG0=1时,工作在PCA高速脉冲输出 PCA计数器的值与模块的比较/捕获


寄存器的值的匹配将使CCP0脚翻转。


(CCP0/PCA0/PWM0/P1.1或CCP0_2/PCA0/PWM0/P3.5或CCP0_3/PCA0/PWM0/P2.5)


PWM0: 脉宽调节模式。


当PWM0=1时, CCP0脚用作脉宽调节输出。


(CCP0/PCA0/PWM0/P1.1或CCP0_2/PCA0/PWM0/P3.5或CCP0_3/PCA0/PWM0/P2.5)


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


CCAPM1和CCAPM2分别是PCA1和PCA2模块的比较/捕获寄存器,功能了CCAPM0一样,这里不做说明了。


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

CL和CH地址分别为E9H和F9H,复位值均为00H,用于保存PCA的装载值。


1.5 PCA捕捉/比较寄存器 — CCAPnL(低位字节)和CCAPnH(高位字节)

当PCA模块用于捕获或比较时,它们用于保存各个模块的16位捕捉计数值;当PCA模块用


于PWM模式时,它们用来控制输出的占空比。其中,n=0、1、2,分别对应模块0、模块1和模块2。复位值均为00H。它们对应的地址分别为:


CCAP0L — EAH、CCAP0H — FAH:模块0的捕捉/比较寄存器。


CCAP1L — EBH、CCAP1H — FBH:模块1的捕捉/比较寄存器。


CCAP2L — ECH、CCAP2H — FCH:模块2的捕捉/比较寄存器。


1.6 PCA模块PWM寄存器PCA_PWM0、PCA_PWM1和PCA_PWM2

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


PCA_PWM0 : PCA模块0的PWM寄存器


EBS0_1 , EBS0_0:当PCA模块0工作于PWM模式时的功能选择位。


0 , 0 : PCA模块0工作于8位PWM功能;


0 , 1 : PCA模块0工作于7位PWM功能;


1 , 0 :PCA模块0工作于6位PWM功能;


1 , 1 :无效,PCA模块0仍工作于8位PWM模式.


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


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


PCA_PWM1和PCA_PWM2分别是PCA1和PCA2模块的PWM寄存器,功能了PCA_PWM0一样,这里不做说明了。


PCA模块的工作模式设定表入下表所示:


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


二、CCP/PCA模块的工作模式

2.1 捕获模式

PCA 模块工作于捕获模式的结构图如下图所示。要使一个PCA模块工作在捕获模式,寄存器CCAPMn的两位(CAPNn和 CAPPn)或其中任何一位必须置1。 PCA模块工作于捕获模式时,对模块的外部CCPn CCP0/P1.1,CCP1/P1.0, CCP2/P3.7)的跳变进行采样。当采样到有效跳变时,PCA硬件就将PCA计数器阵列列寄存器(CH和CL)的值装载到模块的捕获寄存器中(CCAPnL和CCAPnH)。

PCA 捕获模式图


如果CCON特殊寄存器中的位CCFn和CCAPMn特殊功能寄存器的ECCFn位被置位,将产生中断。可在中断服务程序中判断哪一个模块产生了中断,并注意中断标志位的软件清零问题。


2.2 捕获模式测试程序

// PCA0 工作为 捕获模式

// 这个模式有点类似 外部中断或者计数器

#include "stc15.h"

int count = 0;

void PCAInit();

void main()

{

PCAInit();

EA = 1;    // CPU开放中断

while (1);

}

// 捕获模式 初始化

void PCAInit()

{

CMOD = 0x05;    // PCA 计数器时钟位 系统时钟  允许CCON中的CF位中断

CCON = 0x00;    // 初始化 寄存器

CCAPM0 = 0x11;  // 下降沿捕获  使能CCF0 中断

CL = 0;

CH = 0;         // 初始化  计数器

CR = 1;         // 允许PCA 模块运行

}

// 中断服务程序

void PCA_isr() interrupt 7 

{

CCF0 = 0;     // 清除中断标志位

count ++;

if(count == 100)

{

count = 0;

P10 = !P10;   // P10 取反

}

}

这里我采取的做法是,单片机的外部捕获引脚CCP0(P1.1)外接到示波器的校准输出端上面,在中断服务程序中计数100次,就把P1.0引脚输出取反,这样就把外部捕获到的信号缩小了200倍输出显示了。


2.3 高速脉冲输出模式

该模式中(下图),当PCA计数器的计数值与模块捕获寄存器的值相匹配时,PCA模块的CCPn输


出将发生翻转。要激活高速脉冲输出模式,CCAPMn寄存器的TOGn,MATn和ECOMn位必须都置位。


PCA 高速脉冲输出模式


CCAPnL的值决定了PCA模块n的输出脉冲频率。当PCA时钟源是SYSclk时,输出脉冲的频率F位:


f = SYSclk / ([CPS2,CPS0] *2 * CCAPnL)


其中,SYSclk为系统时钟频率。由此,可以得到CCAPnL的值CCAPnL = SYSclk / ( 2×f ).


如果计算出的结果不是整数,则进行四舍五入取整,即


CCAPnL = INT (SYSclk / ( 2×f ) + 0.5 )


其中,INT( )为取整运算,直接去掉小数。


2.4 高速脉冲输出模式测试程序

#include "stc15.h"

#define uint unsigned int

#define T1KHz 5530;  // SYSclk / ([CPS2,CPS0] *2 * CCAPnL)

uint value = 0;

void PCAInit();

void main()

{

PCAInit();

EA = 1;    // CPU开放中断

while (1);

}

// 初始化PCA模块

void PCAInit()

{

CMOD = 0x08;    // PCA 计数器时钟位 系统时钟  

CCON = 0x00;    // 初始化 寄存器

CL = 0;         //复位PCA计数器

CH = 0;

value = T1KHz;

CCAP0L = value;  // 捕获比较寄存器

CCAP0H = value >> 8;

value += T1KHz;

CCAPM0 = 0x4D;  // 允许比较器功能 

CR = 1;         // 允许PCA 模块运行

}

// 中断服务程序

void PCA_isr() interrupt 7 

{

CCF0 = 0; //清中断标志

CCAP0L = value;  // 捕获比较寄存器

CCAP0H = value >> 8;

value += T1KHz;

}


在CCP0引脚通过示波器,测得如上图所示波形。


这里的PCA模块的频率为单片机时钟频率11.0592MHz,所以对外输出频率是:


11.0592MHz ÷ (2 * 5530) = 1KHz。


2.5 脉宽调节模式(PWM)

脉宽调制(PWM,Pulse Width Modulation)是一种使用程序来控制波形占空比、周期、相位波形的技术,在三相电机驱动、D/A转换等场合有广泛的应用。


STC15系列单片机的PCA模块可以通过设定各自的寄存器PCA_PWMn (n=0,1,2.下同)中的位EBSn_1/PCA_PWMn.7及EBSn_0/PCA_PWMn.6,使其工作于8位PWM或7位PWM或6位PWM模式。


8位脉宽调节模式(PWM)

PCA PWM mode / 可调制脉冲宽度输出模式结构图(PCA模块工作于8位PWM模式)


当PCA模块工作于8位PWM模式时, 由于所有模块公用仅有PCA定时器,所有它们的输出频率相同。各个模块的输出占空比是独立变化的,与使用的捕获寄存{EPCnL,CCAPnL[7:0]}


有关。当{0,CL[7:0]}的值小于{EPCnL,CCAPnL[7:0]}时,输出为低; {0,CL[7:0]}的值等于或大于{EPCnL,CCAPnL[7:0]}时,输出为高。当CL的值由FF变为00溢出时{EPCnH,CCAPnH[7:0]}的内容装载到{EPCnL,CCAPnL[7:0]}中。这样就可实现无干扰地更新PWM。要使能PWM模式,模块CCAPMn寄存器的PWMn和ECOMn位必须置位。


当PWM是8位的时: PWM的频率=PCA时钟输入源频率/256。


2.6 脉宽调节模式(PWM)测试程序

// PCA 工作为 PWM模式

 

#include "stc15.h"

void PCAInit();

void main()

{

PCAInit();

EA = 1;    // CPU开放中断

while (1);

}

// 初始化

void PCAInit()

{

CMOD = 0x00;    // PCA 计数器时钟 系统时钟/12 

CCON = 0x00;    // 初始化 寄存器

CCAPM0 = 0x42;          //PCA模块0 PWM模式

PCA_PWM0 = 0x00;        //PCA模块0 工作于8位PWM

CCAP0H = CCAP0L = 0x20; //PWM0的占空比为87.5% ((100H-20H)/100H)

CR = 1;                 // 允许PCA 模块运行

}

在CCP0引脚通过示波器,测得如上图所示波形。


PWM频率 = 11.0592MHz ÷ 12 ÷ 256 = 3.61KHz


PWM占空比 = (256 - [CCAP0H = CCAP0L]) ÷ 256


代码中注释的 100H = 256。


关乎16位软件定时器模式这里不做测试,其实就是高速脉冲输出的变种程序。

关键字:STC15W408AS  单片机  CCP  PCA  PWM 引用地址:11.STC15W408AS单片机CCP/PCA/PWM应用

上一篇:12.STC15W408AS单片机比较器
下一篇:10.STC15W408AS单片机A/D转换器

推荐阅读最新更新时间:2024-11-20 00:11

51单片机控制LCD12864显示汉字
程序: #include reg52.h #define DATA_PORT P0 sbit LCD12864_EN = P1^2; sbit LCD12864_RSET = P1^3; sbit LCD12864_RS = P1^0; sbit LCD12864_RW = P1^1; sbit LCD12864_PSB = P1^6; void delay(unsigned int xms) //延时// { unsigned char i,j; for(j = 0; j xms; j++) { for(i = 0;i 110;i++); } } bit LcdBus
[单片机]
51<font color='red'>单片机</font>控制LCD12864显示汉字
如何快速提升单片机编程水平?
“如何快速提升单片机编程水平?” 今天有个兄弟问我,我也不怎么好直接回答他,我就给他简单讲了一下我的一个成长经历。 我是在2018年参加学校电子大赛的时候,开始接触并学习单片机的,在学校学习了2年。 2010刚毕业找工作的时候,虽然在电子大赛中获过奖,但想找一份比较合适的工作,还是非常有压力。 刚毕业,没有实战经验,那个公司会要我呢? 当初比较理想的工作就是单片机工程师助理,但找了将近一个月,大多数面试完之后都让我去做维修,让我从维修做起。 有几个比较大的公司,给的工资也还可以,但是我毅然拒绝了。 随着时间的流逝,1个月过去了,想起又感到后悔,因为没有更好的选择了,自己又似乎放弃了最好的选择。 最终我还是找到了一个比较理想的工
[单片机]
基于AT89C51单片机的智能计步器设计
1 引言 当今社会,随着经济的发展,人们生活水平的提高,肥胖的人越来越多,也就导致了越来越多的疾病产生,因此,人们越来越关注健康问题,而锻炼身体是让自己健康的最有效的方法。因此计步器应运而生,就成了时下流行的趋势。步行时,通过伸缩肌肉,血液在流动时的抵抗值下降,血压下降且稳定。经常步行的人很少患高血压或低血压病。坚持步行能减少血管内附着的脂肪性物质,使体重减轻,也逐渐减少心脏的负荷。而基于单片机为核心控制的计步器有着精确,可靠,稳定,方便等优点,已被大多数人所接受。通过计步器人们可以知道自己跑了多少步,实时掌握自己的锻炼情况。 2 总体设计方案 计步器由振荡电路、复位电路、显示电路以及按键电路几个部分组成,由电池进行供电。系统
[单片机]
基于AT89C51<font color='red'>单片机</font>的智能计步器设计
MCS-51单片机与无线调制器的综合应用
GPS是目前技术上最成熟且已实用的一种定位系统,但是在GPS定位系统中,由于其是一个单向导航系统,他是把星历数据等传给地面接收机,可在许多具体应用时,例如在车辆调度系统中,一般都需要把利用GPS测得的信息数据传到调度中心,由于其系统由一个基准站和多个用户台组成,基准站与用户台之间的联系,即由基准站计算出的各种校正值发送到用户台,上边这一切都需要用到数据链来完成数据的传输。其中,数据链由调制解调器和电台组成。在无线数据传输系统中,调制解调器足一个关键部分,调制解调器(Modem)是将数据进行编码和调制,然后输入到电台发射出去,用户台将其接收下来,并将数据解调后,送入GPS接收机进行改正。本文介绍了单片机控制Modem的原理和方法。
[单片机]
基于STM32单片机采集数据&数据上云
前言 以往采集数据均是采用Arduino开发板、esp32wifi模块等,本次实验采用的是STM32单片机,STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核,功能非常强大,为本次实验提供了无限可能。 参考博客:https://blog.csdn.net/weixin_43271542/article/details/117384011?spm=1001.2014.3001.5502 1.实验原理 本项目采用ARM结构中最为代表的Cortex-M4系列的芯片,选用STM32F407ZGT6开发板进行项目开发,选用的传感器为常见通用的DHT11温湿度传感器。传感器将采
[单片机]
基于STM32<font color='red'>单片机</font>采集数据&数据上云
研究32位Cortex-M3 MCU开发技术
本文介绍了LM3S9B96 MCU Cortex-M3处理器方框图以及Stellaris? LM3S9B96开发板主要特性,方框图,电路图和扩展板电路图。   德州仪器(TI)公司Stellaris?所提供一系列的微控制器是首款基于ARM? CortexTM-M3的控制器,它们为对成本尤其敏感的嵌入式微控制器应用方案带来了高性能的32位运算能力。这些具备领先技术的芯片使用户能够以传统的8位和16位器件的价位来享受32位的性能,而且所有型号都是以小占位面积的封装形式提供。   LM3S9B96微控制器的优势还在于能够方便的运用多种ARM的开发工具和片上系统(SoC)的底层IP应用方案,以及广大的用户群体。另外,该微控制器使用了兼容A
[工业控制]
研究32位Cortex-M3 <font color='red'>MCU</font>开发技术
stm8笔记2-定时3更新中断+pwm输出(IDE为IAR)
一:IAR编译器中断函数说明 下面说一下在IAR下,在IAR下必须要添加iostm8s105s6.h文件,在文件的最后有如下内容: /*------------------------------------------------------------------------- * Interrupt vector numbers *-----------------------------------------------------------------------*/ #define AWU_vector 0x03 #define SPI_TXE_vector
[单片机]
stm8笔记2-定时3更新中断+<font color='red'>pwm</font>输出(IDE为IAR)
德州仪器推出新款实时微控制器系统 可在汽车与工业应用中实现更智能的处理流程
据外媒报道,当地时间11月11日,德州仪器(Texas Instruments,TI)宣布推出两款全新的实时微控制器系列——TMS320F28P55x系列和F29H85x系列,旨在帮助工程师在汽车和工业应用中,实现更智能、更安全的处理流程。TI的TMS320F28P55x系列MCU是业内首款集成了神经处理单元(NPU)的实时微控制器,可实现高精度、低延迟的故检测功能。F29H85x系列则基于TI的新型64位C29数字信号处理内核打造,具有集成了功能安全和网络安全性能的先进架构。 德州仪器推出新款实时微控制器系统(图片来源:德州仪器) 通过边缘AI赋能的MCU实现更智能、更高效的系统 如今,工程师们面临的挑战是设计出
[汽车电子]
德州仪器推出新款实时<font color='red'>微控制器</font>系统 可在汽车与工业应用中实现更智能的处理流程
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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