51单片机PCA模块配置

发布者:legend8最新更新时间:2022-09-21 来源: csdn关键字:51单片机  PCA模块  配置 手机看文章 扫描二维码
随时随地手机看文章

PCA模块是“可编程计数器阵列”的缩写,英文名称是“Programmable Counter Array”,以下的说明均以SILICON LAB生产的C8051系列微型控制器为例。


PCA包括1个16位“定时器/计数器”和5个“捕获/比较模块”。16位定时器/计数器包括1个高8位寄存器(PCA0H)和1个低8位寄存器(PCA0L),每个捕获/比较模块还有各自的16位“捕获/比较寄存器”。


PCA的定时器/计数器在运行时必须基于某个“基准时钟频率”,通过设置相应的寄存器,可以选择以下几种:


系统时钟频率

系统时钟频率的12分之一:f_osc/12

系统时钟频率的4分之一:f_osc/4

外部晶振时钟源频率的8分之一:external f_osc/8

由定时器/计数器0的溢出率所决定的频率

通过ECI输入管脚设定的外部时钟信号的频率

第一. 通过PCA的模式选择寄存器(PCA0MD)选择基准时钟频率,模式选择寄存器如下图

CIDL:设置PCA在CPU空闲模式下的模式

CIDL=0:PCA在CPU空闲模式下继续工作

CIDL=1:PCA在CPU空闲模式下停止工作

WDTE:设置看门狗模式

WDTE=0:看门狗模式关闭

WDTE=1:启动捕获/比较模块4作为看门狗定时器

WDLCK:看门狗锁定模式

WDLCK=0:看门狗解除锁定

WDLCK=1:看门狗被锁定,即看门狗有可能在下一次系统重置前不能屏蔽

CPS2、CPS1、CPS0:设置时钟基准频率

ECF:PCA定时器/计数器溢出中断使能标志

ECF=0:PCA定时器/计数器溢出时不产生中断

ECF=1:PCA定时器/计数器溢出标志位CF置1时产生中断

CPS2、CPS1、CPS0标志位配置表


第二. 通过PCA的控制寄存器(PCA0CN)可以对PCA的动作进行控制

CF:PCA定时器/计数器溢出标志位

当PCA定时器/计数器溢出时,CF自定被硬件置1,此时如果PCA0MD中的ECF设置为1时,CPU执行中断处理。注意:中断处理结束后CF不能由硬件置0,必须由软件置0

CR:定时器/计数器启停标志位

CR=0:定时器/计数器停止

CR=1:定时器/计数器启动

CCF4:捕获/比较模块4计数器中断标志位

当捕获/比较模块4执行匹配或者捕获指令成功时,此标志位被硬件自动置1,如果CCF4被允许中断时,CPU执行中断处理。注意:中断处理结束后CCF4不能由硬件置0,必须由软件置0

CCF3:捕获/比较模块3计数器中断标志位

功能同CCF4

CCF2:捕获/比较模块2计数器中断标志位

功能同CCF4

CCF1:捕获/比较模块1计数器中断标志位

功能同CCF4

CCF0:捕获/比较模块0计数器中断标志位

功能同CCF4

第三. 捕获/比较模块模式寄存器(PCA0CPMn)

n=0、1、2、3、4代表不同的模块


PWM16n:PWM位宽模式选择

PWM16n=0:8位PWM

PWM16n=1:16位PWM

ECOMn:比较器功能选择

ECOMn=0:比较器关闭

ECOMn=1:比较器启动

CAPPn:上升沿捕获功能选择

CAPPn=0:上升沿捕获功能关闭

CAPPn=1:上升沿捕获功能启动

CAPNn:下降沿捕获功能选择

CAPNn=0:下降沿捕获功能关闭

CAPNn=1:下降沿捕获功能启动

MATn:匹配功能选择,如果PCA计数器与捕获/比较寄存器的值匹配时,将PCA0CN中的CCFn置1

MATn=0:匹配功能关闭

MATn=1:匹配功能启动

TOGn:“翻转”功能选择,如果PCA计数器与捕获/比较寄存器的值匹配时,将管脚CEXn中逻辑电平翻转,当PWMn位同时设定为1时,模块将工作在“频率输出”模式下

TOGn=0:“翻转”功能关闭

TOGn=1:“翻转”功能启动

PWMn:脉宽模式选择,当PWM16n置0时,将输出8位脉宽信号,当PWM16n置1时,将输出16位脉宽信号

PWMn=0:脉宽模式关闭

PWMn=1:脉宽模式启动,在CEXn管脚输出PWM信号

ECCFn:捕获/比较中断标志位CFFn使能选择

ECCFn=0:CFFn中断功能关闭

ECCFn=1:CFFn中断功能启动

捕获/比较模块控制位功能表




第四. 捕获/比较模块 功能介绍


捕获功能:


信号由CEXn输入,通过设置CAPPn或者CAPNn可以实现在哪种信号状态(上升沿,下降沿,翻转)下触发捕获动作,当触发捕获动作时,PCA计数器的高8位(PCA0H)、低8位(PCA0L)值分别加载至相应模块的高8位(PCA0CPHn)、低8位(PCA0CPLn)寄存器当中,当捕获成功后,如果允许捕获中断(ECCFn设置为1),则PCA的控制寄存器(PCA0CN)中的CCF将置1从而触发中断程序。注意,捕获溢出标志位CCFn不会自动置零,需要软件置零

 

软件计时器功能:


使用PCA的计时器中的数值与捕获/比较模块寄存器中的数值比较,当匹配时,触发CCFn置1,如果允许捕获中断(ECCFn设置为1),则触发中断程序。注意1:捕获溢出标志位CCFn不会自动置零,需要软件置零。注意2:当向捕获/比较寄存器中写入数值时,需要先写入寄存器的低8位,然后在写入高8位,因为写入低8位后ECOMn置0,写入高8位后ECOMn置1

 

高速输出模式:


使用PCA的计时器中的数值与捕获/比较模块寄存器中的数值比较,当匹配时触发管脚CEXn电平进行翻转

 

频率输出模式:


使用PCA的计时器中的低8位与捕获/比较模块寄存器中的低8位进行比较,当匹配时,管脚CEXn电平进行翻转,同时将捕获/比较模块寄存器中的高8位与低8位数值相加,将结果存储在低8位中。


CEXn管脚可以输出指定频率的方波,频率为 F_pca/(2*PCA0CPHn) F_pca为模式选择寄存器PCA0MD中设置的基准频率;PCA0CPHn为捕获/比较模块寄存器中的高8位数值

 

PWM(脉宽调制)模式(8位)


PWM的频率与PCA定时器/计数器的频率相同,通过PCA的模式选择寄存器(PCA0MD)设定的频率可以实现固定频率(基于震荡频率)或者可调频率(基于定时器T0溢出或者ECI的输入频率)


PWM的“占空比(duty cycle)”与捕获/比较模块寄存器中高8位的设置有关。当PCA定时器/计数器的低8位(PCA0L)计数值与捕获/比较模块寄存器中低8位(PCA0CPLn)存储的数值相等时,CEXn管脚电平置1,当PCA定时器/计数器的低8位(PCA0L)溢出时,CEXn管脚电平置0,同时,将捕获/比较模块寄存器中高8位(PCA0CPHn)数值加载至捕获/比较模块寄存器中的低8位(PCA0CPLn)。


占空比 = (256-PCA0CPHn)/256

PWM(脉宽调制)模式(16位)


PWM的频率与PCA定时器/计数器的频率相同,通过PCA的模式选择寄存器(PCA0MD)设定的频率可以实现固定频率(基于震荡频率)或者可调频率(基于定时器T0溢出或者ECI的输入频率)


PWM的“占空比(duty cycle)”与捕获/比较模块寄存器中的数值设置有关。当PCA定时器/计数器的16位计数值与捕获/比较模块寄存器中的16位数值匹配时,CEXn管脚电平置1,当PCA定时器/计数器的16位计数值溢出时,CEXn管脚电平置0,同时,由于匹配执行中断程序,需要重新写入捕获/比较模块16位寄存器,注意2:当向捕获/比较寄存器中写入数值时,需要先写入寄存器的低8位,然后在写入高8位,因为写入低8位后ECOMn置0,写入高8位后ECOMn置1


占空比 = (65536-PCA0CPn)/65536

看门狗(Watch Dog)设置


看门狗的原理有些博主已经描述得很详细了,大家可以参考。引入看门狗的目的其实就是采用一种机制防止“程序陷入不可控制的‘疯狂’状态”,因此设定了一个定时器,也可以说是一个计数器,当计数器达到最大值发生“溢出”时,启动中断程序,在看门狗的应用中,这个中断程序就是“将程序复位”。


所以“看门狗”功能其实就是定时器/计数器与中断配合使用以实现某种功能的一种具体应用。


这款芯片的看门狗设置是这样的:当PCA的模式选择寄存器(PCA0MD)中的WDTE和WDLCK两个位置“1”时,启动看门狗功能。此时,PCA计数器启动,捕获/比较模块4进入“看门狗”模式,而对PCA计数器和捕获/比较模块4的模式寄存器(PCA0CPMn)的写入操作都被禁止,比较器用来比较PCA计数器高8位(PCA0H)中的数值与捕获/比较模块4计数器中的高8位(PCA0CPH4)数值以确定是否匹配,当PCA计数器低8位(PCA0L)溢出并且PCA计数器高8位(PCA0H)与捕获/比较模块4计数器的高8位(PCA0CPH4)

数值匹配时,看门狗重置程序,同时将PCA计数器高8位(PCA0H)中的数值与捕获/比较模块4计数器的低8位(PCA0CPL4)中的数值相加后再加载到捕获/比较模块4计数器的

高8位(PCA0CPH4)中。


这里解释一下为什么还要将两个计数器的值相加,其实PCA计数器和捕获/比较模块4计数器的高8位和低8位在“看门狗”模式中可以被看成是两个“独立”的单元,高8位(PCA0CPH4)是用来和PCA计数器高8位(PCA0H)进行比较用以判断是否溢出,低8位(PCA0CPL4)是用来设置一个溢出的数值,当溢出时将其加载到高8位(PCA0CPH4)中,其实可以理解为捕获/比较模块4计数器的高8位(PCA0CPH4)中的数值就等于低8位(PCA0CPL4)的数值。在实际操作中,应该根据想要设定的时间将低8位(PCA0CPL4)的数值设置好。


那么为什么要相加呢?原因就是PCA计数器高8位(PCA0H)中的数值不一定是0,所以如果PCA计数器高8位(PCA0H)中有数值,就一定要将其加上才能作为在捕获/比较模块4

计数器的高8位(PCA0CPH4)中的最终基准值,在实际使用中,PCA计数器高8位(PCA0H)中的数值默认为0,所以在捕获/比较模块4计数器的低8位(PCA0CPL4)中设定的值就是其高8位(PCA0CPH4)中的数值了。


在看门狗功能的使用时,计数器累加的是数字,可我们需要设定程序重置的时间,如何把两个单位进行统一呢?其实,计数器每计一个数就经过了一个机器时间,机器时间可以通过定时器/计数器模式寄存器进行设定,例如使用外部晶振频率为12M,那么可以设定一个机器时间频率为12分之一的晶振频率,那么一个机器时间就为1微秒,也就是计数器一次计数的时间就是1微秒。那么计数的次数和捕获/比较模块4计数器的低8位(PCA0CPL4)的设定值是什么关系呢,可以使用公式:


从开始计数到溢出时总共计数的次数 =  (256 X PCA0CPL4) + (256 - PCA0L)


以上公式计算的次数也就是从程序运行到重置(看门狗起作用)所设置的时间


如果程序正常运行,就必须阻值看门狗起作用,所以在计数器溢出前需要“重新写入”捕获/比较模块4计数器的高8位(PCA0CPH4)数值,例如程序执行的总时间为30毫秒,

计数器溢出导致程序开始运行到重置的时间为65毫秒,那么需要在30毫秒至65毫秒之间重新写入PCA0CPH4中的数值,写入后看门狗更新使得PCA计数器重新计数。


计算看门狗重置程序的最大时间和程序设置的基准时间有关,可以参考下图

System Clock为系统频率,例如使用12兆赫兹的外部晶振,其系统频率就是12兆赫兹,如果设置了PCA0CPL4位255,当PCA计数器中的高8位PCA0H和低8位PCA0L均为0时,

根据公式,程序从开始计数到溢出时总共计数的次数 = (256 X 255) + (256 - 0) = 65536 次,因为计数器计一次数为一个机器时间即1微秒(由12兆赫兹决定),所以总共时间

即为65536微秒,就约等于65.5毫秒

 

以上就是关于51单片机PCA模块设置的一些介绍,可能有理解不全面甚至错误的地方,希望各位同道指正。如果需要转发或者引用,还请注明出处。

关键字:51单片机  PCA模块  配置 引用地址:51单片机PCA模块配置

上一篇:51单片机串口中断功能的设置
下一篇:1602 液晶显示模块 + HD44780 控制芯片 使用指北

推荐阅读最新更新时间:2024-11-13 22:16

51单片机快速入门指南】4.1: I2C 与 AT24C02 (EEPROM) 的跨页连续读写
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《普中 51 单片机开发攻略》、《24C02/24C04/24C08/24C16/24C32/24C64芯片手册》 AT24Cxx 介绍 AT24C01/02/04/08/16…是一个1K/2K/4K/8K/16K 位串行 CMOS,内部含有 128/256/512/1024/2048 个 8 位字节,AT24C01 有一个 8 字节页写缓冲器, AT24C02/04/08/16 有一个 16 字节页写缓冲器。该器件通过 I2C
[单片机]
【<font color='red'>51单片机</font>快速入门指南】4.1: I2C 与 AT24C02 (EEPROM) 的跨页连续读写
51单片机总线编址电路
  带总线扩展接口的单片机系统,包括外部32kRAM扩展、LCDl602接口、输入输出口。带编址扩展的单片机最小系统电路如下图所示。使用74HC573锁存低8位地址;74138实现8个地址扩展,74138的A、B、C接A8~A9,E1接Al5,E2、E3接地常有效,得到OF8FFH到OFFFFH8个地址或者8000H到8700H(无关位用0表示)。      32k接口如下图所示。DO~D7接数据总线p0口,地址线AO~Al4接单片机地址总线低15位,单片机地址线Al5接片选信号,低 电平 有效,这样地址分配从OOOOH到7FFFH,与74138译码地址不冲突。      LCD1602接口电路如下图所示。      
[单片机]
<font color='red'>51单片机</font>总线编址电路
腾达分布式路由nova MW6配置教程
分布式路由nova MW6套装由3个魔方路由组成,3个路由无主次之分,当其中一个路由器联网成功后自动成为主路由。另外,nova MW6仅支持APP安装,在安装之前请先下载Tenda WiFi APP,在各大应用商店搜索即可下载。 第一步 线路连接 如下图所示,先接通其中一个nova路由器(将它命名为:第1个nova)的电源,然后将从猫(modem)的LAN口出来的网线/入户网线连接到路由器的WAN口。 第二步 配置联网 使用“Tenda WiFi”APP就可以轻松完成联网设置。 1.手机连接到第1个nova路由器的WiFi,无线名称和密码请见路由器底部贴纸。 2.打开“Tenda WiFi”APP,按照页面
[网络通信]
51单片机之上拉与下拉电阻
1 基础知识 1.1 三极管 三极管的类型有两种:PNP与NPN 三极管的简化理解: 基极(B)是一个开关, 当开关打开时,集电极(C)与发射极(E)就导通了; 当开关闭合时,集电极(C)与发射极(E)就断开了。 导通方向的判定: (NPN管)箭头是C指向E,电流就从C流向E; (PNP管)箭头是E指向C,电流就从E流向C,要注意控制端电流的方向。 1.2 场效应晶体管 场效应管的电流方向: N型沟道场效应管漏极电流是从D流向S的; P型沟道场效应管漏极电流是从S流向D的; G上没有电流,场效应管是通过电压控制导通与关断的。 2 输出模式 2.1 开集输出 单片机 在输出模式下,集电极直
[单片机]
<font color='red'>51单片机</font>之上拉与下拉电阻
mcs51单片机有什么组成 分别有什么功能作用
  MCS51是指由美国INTEL公司生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。   mcs51单片机组成   运算器   运算器以完成二进制的算术/逻辑运算部件ALU为核心,再加上暂存器TMP、累加器ACC、寄存器B、程序状态标志寄存器PSW及布尔处理器。累加器ACC是一个八位寄存器,它是CPU中工作最频繁的寄存器。在进行算术、逻
[单片机]
mcs<font color='red'>51单片机</font>有什么组成 分别有什么功能作用
如何正确配置AVR熔丝位
(1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态,“Unprogrammed”表示熔丝状态为“1”(禁止);“Programmed”表示熔丝状态为“0”(允许)。因此,配置熔丝位的过程实际上是“配置熔丝位成为未编程状态“1”或成为已编程状态“0””。熔丝位状态显示框,显示芯片的各个熔丝位的详细状况,AVR的熔丝位打勾表示0,表示启用该选项;取消表示1,表示不启用该选项,需要注意。 (2)在使用通过选择打钩“√”方式确定熔丝位状态值的编程工具软件时,请首先仔细阅读软件的使用说明,弄清楚“√”表示设置熔丝位状态为“还是为“。 (3)使用CVAVR中的编程
[单片机]
STM32 Cubemax(一)——PWM配置及控制SG90舵机
前言 这是一篇基于STM32F429的保姆级入门的用CubeMAX配置生成并编写的控制舵机SG90的教程 一、SG90舵机 常见的SG90舵机 SG90引出三条线,分别是控制线(橙色),VCC(红色),GND(黑色),用杜邦线依次连接在开发板上即可 SG90舵机要求工作在频率为50HZ——周期为20ms的PWM波,且对应信号的高低电平在0.5ms - 2.5ms之间,对应的舵机转动角度如下表所示(当然也可以按照这个线性的对应关系去达到转动自己想要的角度,如想要转动60°,则高电平脉宽为大概为1.2ms,具体能不能转到特定的角度还和舵机的精度有关) 二、CubeMax配置 1.选型(这里用实验的开发板为正点原子的F4
[单片机]
STM32 Cubemax(一)——PWM<font color='red'>配置</font>及控制SG90舵机
80C51单片机的引脚功能基础详解
MCS-51是标准的40引脚双列直插式集成电路芯片,引脚排列请参见图 P0.0 ~ P0.7: P0口8位双向口线。 P1.0 ~ P1.7 :P1口8位双向口线。 P2.0 ~ P2.7 :P2口8位双向口线。 P3.0 ~ P3.7 :P3口8位双向口线。 ALE:地址锁存控制信号。在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。 PSEN:外部程序存储器读选通信号。在读外部ROM时,PSEN有效(低电平),以实现外部ROM单元的读操
[单片机]
80C<font color='red'>51单片机</font>的引脚功能基础详解
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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