发布网友 发布时间:2022-04-22 04:22
共2个回答
热心网友 时间:2023-10-24 08:28
可编程计数器阵列(PCA)
PCA(可编程计数器阵列Programmable Counter Array)由高字节(PCA0H)和低字节(PCA0L)组成。在读PCA0L 的同时自动锁存PCA0H 的值,先读PCA0L 寄存器将使PCA0H 的值得到保持(在读PCA0L 的同时),直到用户读PCA0H 寄存器为止。读PCA0H 或PCA0L 不影响计数器工作。PCA0MD 寄存器中的CPS2-CPS0 位用于选择PCA 计数器/定时器的时基信号。 CPS2 CPS1 CPS0 时间基准 0 0 0 系统时钟的12 分频 0 0 1 系统时钟的4 分频 0 1 0 定时器0 溢出 0 1 1 ECI 负跳变(最大速率 = 系统时钟频率/4) 1 0 0 系统时钟 1 0 1 外部振荡源8 分频(与系统时钟同步) 1.工作原理:当计数/定时器溢出时,PCA0MD中的计数器溢出标志(CF)被置为1,并产生中断请求(如果CF 中断被允许)。将PCA0MD 中ECF 位设置为逻辑1 即可允许CF 标志产生中断请求。当CPU 转向中断服务程序时,CF 位不能被硬件自动清除,必须用软件清0。(注意:要使CF 中断得到响应,必须先总体允许PCA0 中断。通过将EA 位(IE.7 )和EPCA0 (EIE1.3 )设置为逻辑1 来总体允许PCA0 中断。清除PCA0MD寄存器中的CIDL 位将允许PCA 在微控制器内核处于等待方式时继续正常工作。 位7: CF: PCA 计数器/定时器溢出标志 当PCA0 计数器/定时器从0xFFFF 到0x0000 溢出时由硬件置位。在计数器/ 定时器溢出(CF) 中断被允许时,该位置1 将导致CPU 转向CF 中断服务 程序。该位不能由硬件自动清0, 必须用软件清0 位6: CR: PCA0 计数器/定时器运行控制 该位允许禁止PCA0 计数器定时器 0: 禁止PCA0 计数器定时器 1: 允许PCA0 计数器定时器 位5: 未用读=0b 写=忽略 位4: CCF4 PCA0 模块4 捕捉/比较标志 在发生一次匹配或捕捉时该位由硬件置位。当CCF 中断被允许时,该位置1 将导致CPU 转向CCF 中断服务程序。该位不能由硬件自动清0 必须用软件 清0 位3: CCF3: PCA0 模块3 捕捉/比较标志 在发生一次匹配或捕捉时该位由硬件置位。当CCF 中断被允许时该位置1 将导致CPU 转向CCF 中断服务程序。该位不能由硬件自动清0 ,必须用软件 清0 位2: CCF2: PCA0 模块2 捕捉/比较标志 在发生一次匹配或捕捉时该位由硬件置位。当CCF 中断被允许时该位置1 将导致CPU 转向CCF 中断服务程序。该位不能由硬件自动清0 ,必须用软件 清0 位1: CCF1: PCA0 模块1 捕捉/比较标志 在发生一次匹配或捕捉时该位由硬件置位。当CCF 中断被允许时该位置1 将导致CPU 转向CCF 中断服务程序。该位不能由硬件自动清0 ,必须用软件 清0 位0: CCF0: PCA0 模块0 捕捉/比较标志 在发生一次匹配或捕捉时该位由硬件置位。当CCF 中断被允许时该位置1 将导致CPU 转向CCF 中断服务程序。该位不能由硬件自动清0 ,必须用软件 清0 PCA0MD:PCA发生选择寄存器 CIDL - - - CPS2 CPS1 CPS0 ECF 00000000 位7 位6 位5 位4 位3 位2 位1 位0 SFR地址 0xD9 位7: CIDL: PCA0 计数器/定时器等待控制 规定CPU 等待方式下的PCA0 工作方式 0: 当系统控制器处于等待方式时,PCA0 继续正常工作 1: 当系统控制器处于等待方式时,PCA0 停止工作 位6-4 :未用读=000b 写=忽略 位3-1: CPS2-CPS0 PCA0 计数器/定时器脉冲选择 位0: ECF: PCA 计数器/定时器溢出中断允许 该位是PCA0 计数器/定时器溢出CF 中断的屏蔽位 0: 禁止CF 中断 1: 当CF(PCA0CN.7) 置位时允许PCA0 计数器/定时器溢出中断请求 PCA0CPMn 地址 PCA0CPM0 0xDA(n=0) PCA0CPM1 0xDB(n=1) PCA0CPM2 0xDC(n=2) PCA0CPM3 0xDD(n=3) PCA0CPM4 0xDE(n=4) 位7: PWM16n: 16 位脉冲宽度调制允许 当脉冲宽度调制方式被允许时(PWMn = 1), 该位选择16 位方式 0: 选择8 位PWM 1: 选择16 位PWM 位6: ECOMn: 比较器功能允许 该位允许禁止PCA0 模块n 的比较器功能 0: 禁止 1: 允许 位5: CAPPn: 正沿捕捉功能允许 该位允许禁止PCA0 模块n 的正边沿捕捉 0: 禁止 1: 允许 位4: CAPNn 负沿捕捉功能允许 该位允许禁止PCA0 模块n 的负边沿捕捉 0: 禁止 1: 允许 位3: MATn 匹配功能允许 该位允许/禁止PCA0 模块n 的匹配功能.如果被允许,当PCA0 计数器与一 个模块的捕捉比较寄存器匹配时,PCA0MD 寄存器中的CCFn 位置位 0 :禁止 1: 允许 位2: TOGn 电平切换功能允许 该位允许/禁止PCA0 模块n 的电平切换功能.如果被允许,当PCA0 计数器 与一个模块的捕捉/比较寄存器匹配时,CEXn 引脚的逻辑电平切换.如果 PWMn 位也被置为逻辑1, 则模块工作在频率输出方式 0: 禁止 1: 允许 位1: PWMn 脉宽调制方式允许 该位允许/禁止PCA0 模块的PWM 功能.如果被允许,CEXn 引脚输出脉冲 宽度调制信号.如果PWM16n 为逻辑0, 使用8 位PWM 方式;如果PWM16n 为逻辑1, 使用16 位方式;如果TOGn 位也被置为逻辑1 ,则模块工作 在频率输出方式 0: 禁止 1: 允许 位0: ECCFn 捕捉比较标志中断允许 该位设置捕捉比较标志CCFn 的中断屏蔽 0: 禁止CCFn 中断 1: 当CCFn 位被置1 时允许捕捉比较标志的中断请求 3.捕捉/比较模块的工作方式: 边沿触发捕捉、软件定时器、高速输出、频率输出、8位脉宽调制器和16位脉宽调制器
热心网友 时间:2023-10-24 08:29
PCA 含有一个特殊的 16 位定时器,有 5 个 16 位的捕获/比较模块与之相连。每个模块
可编程工作在 4 种模式下:上升/下降沿捕获、软件定时器、高速输出或脉宽调节器。每个
模块都与 P1口向连。模块 0 连接到 P1.3(CEX0) ,模块 1 连接到 P1.4(CEX1) ,依此类推。
寄存器 CH和 CL 的内容是正在自由递增计数的 16 位 PCA定时器的当前值。 PCA定时器是
5 个模块的公共时间基准,可通过编程工作在:1/6 振荡频率、1/2 振荡频率、定时器 0溢出
或 ECI脚的输入(P1.2) 。定时器的计数源由 CMOD SFR 的 CPS1 和 CPS0位来确定(见表
37 和表 38) 。
表 37 CMOD-PCA计数器方式寄存器的位分配(地址:D9H)
不可位寻址;复位值:00H
位 7 6 5 4 3 2 1 0
符号 CIDL WDTE - - - CPS1 CPS0 ECF
表 38 CMOD-PCA计数器方式寄存器的位描述(地址:D9H)
位 符号 描述
7 CIDL
计数器空闲控制:CIDL=0时,空闲模式下PCA计数器继续工作。CIDL=1时,空
闲模式下PCA 计数器禁能。
6 WDTE
看门狗定时器使能:WDTE=0 时,禁止模块 4 的看门狗定时器功能。WDTE=1 时使
能看门狗定时器。
5~3 - 保留为将来之用。通过用户程序将其清零。
2~1 CPS1,CPS0 PCA计数脉冲选择(见下面的表39) 。
0 ECF
PCA使能计数溢出中断:ECF=1时,使能寄存器CCON CF位的中断。ECF=0时,禁
止该功能。
初始化代码
void PCACap(void)
{
CMOD = 0x00;
CL = 0;
CH = 0;
//CCAPM1 = 0x11; //CEX0用作捕获功能
CCAPM0 = 0x42; //CEX1用作PWM
//CCAPM1 &= ~ECCF;
CCAP0L = 0x00;
CCAP0H = 0X80;
CCON = 0x40; //启动PCA计数器
EC = 1; //使能PCA中断
EA = 1;
}