PCA模块的应用方式1:捕获模式-----用于扩展外部中断
部分内容摘自《51单片机轻松入门---基于STC15W4K系列》---李友全 编著
CCP/PCA/PWM模块,其实是一个模块,通过软件不同的设置可以实现不同的功能。
1.外中断(PCA模块的捕获功能,也就是扩展外部中断)
2.定时器(扩展一个外部定时器)
3.高速时钟输出
4.PWM脉宽调制
功能1:捕获功能,用于扩展外部中断
对于15W4K58S4单片机,它的PCA模块有两个,输出管脚分别是:
CCP0---P1.1
CCP1---P1.0
对于15W4K60S4 还要多出一个通道:
CCP2---P3.7
PCA模块的电路如图所示:
电路图的解读:
其中,红色标示的部分就是PCA模块中与捕获功能相关的寄存器位。
是上升沿触发
是下降沿触发
是控制开关,也就是寄存器的控制位
上升沿和下降沿触发分别由两个开关控制,即寄存器中的控制位CAPPn和CAPNn。其中,CAPPn是正跳变(上升沿)捕获开关,CAPNn是负跳变(下降沿)捕获开关。
当开关闭合时,也就是寄存器的相应位设置为1时,如果管脚上有正跳变或是负跳变,则中断标志位被置位。此时,如果PCA中断开关闭合,即ECCFn=1(允许产生中断位置位),并且总中断EA=1,那么将产生捕获中断,程序将跳转到PCA中断服务子程序处,即interrupt 7处。
相关寄存器:
PCA比较/捕获寄存器CCAPMn
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
位 |
- |
ECOMn |
CAPPn |
CAPNn |
MATn |
TOGn |
PWMn |
ECCFn |
CAPPn:上升沿触发,即正跳变触发
0:禁止捕获正跳变
1:允许捕获正跳变
CAPNn:下降沿触发,即负跳变触发
0:禁止捕获负跳变
1:允许捕获负跳变
ECCFn:PCA中断允许位
0:禁止响应中断
1:允许响应中断
PCA控制寄存器CCON
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
位 |
CF |
CR |
- |
- |
- |
CCF2 |
CCF1 |
CCF0 |
CCF2:PCA模块2中断标志位
CCF1:PCA模块1中断标志位
CCF0:PCA模块0中断标志位
注意,当响应中断时,这些标志位不会被硬件自动清除,需要由软件清零。
例题:利用PCA模块扩展2路外部中断
将P1.0(PCA通道1的外部输入)作为上升沿/下降沿都可触发的外部中断。当中断产生时对P0.0取反。
将P1.1(PCA通道0的外部输入)作为下降沿触发的外部中断,当中断产生时,对P0.1取反,P0.0/P0.1连接LED灯指示状态。
#include "STC15W4K.H"
sbit LED_PCA0=P0^1;
sbit LED_PCA1=P0^0;
void main(void)
{
CCAPM0=0x11; //0001 0001 CAPNn=1即下降沿触发中断,ECCFn=1允许PCA中断
CCAPM1=0x31; //0011 0001 CAPPn= CAPNn= 即上升沿下降沿均可触发中断
EA=1;
while(1);
}
//中断服务程序
void PCA(void) interrupt 7
{
if(CCF0) //如果CCF0产生中断
{
LED_PCA0=!LED_PCA0; //LED灯取反
CCF0=0; //PCA模块的中断标志位不会由硬件自动清除,需要软件清除
}
else if(CCF1) //如果CCF1产生中断
{
LED_PCA1=!LED_PCA1;
CCF1=0;
}
}