历史上的今天
今天是:2025年01月26日(星期日)
2019年01月26日 | STC12C5410AD单片机PCA应用图文详解
2019-01-26 来源:eefocus
任务:
利用STC12C5410AD自带的4路PCA,扩展4路外部中断;利用4路外部中断来对输入的脉冲序列进行计数。
备注:
本文工程文件里还涉及到STC12C5410AD的UART、Time0等接口函数,请读者自行理解
一、PCA16位定时器计数器结构

从图中得知,要产生PCA溢出中断需要进行一下设置:
1、 选择PCA16计数器的时钟源。时钟源的选择由PCA的CMOD寄存器的CPS1和CPS0决定。

2、 IDLE跟CIDL必须有一位为0(常规的置CIDL为0)
3、 CR必须置1,允许计数器开始计数
4、 CMOD的ECF必须置1,以允许CCOD中的CF位在产生中断时:CF=1
5、 需要给PCA的16位计数器CH和CL赋初值
二、PCA捕获模式

PCA工作于捕获模式需要进行一下设置:(主要是配合CCON寄存器和CCAPMn寄存器)
1、 设置PCA捕获模块的对外部脉冲的捕获方式:主要是允许上升沿捕获或者下降沿捕获。由CCAPMn的CAPPn跟CAPNn决定:当CAPPn=1,允许上升沿捕获;当CAPNn=1,允许下降沿捕获
2、 使能CCFn中断。设置相应的ECCFn=1
具体的工作流程如下,以PCA0为例并设置为上升沿捕获:PCA0模块对P3^7(PCA0的输入管脚)进行跳变捕获,当采样到有效的上升沿时,PCA在硬件上会把PCA的计数器寄存器(CH/CL)的值转载到PCA0的捕获寄存器(CCAP0L和CCAPOH)中,置位中断标志位:CF =1,CCF0=1。使用者则只需要,在中断函数里进行相关的操作即可,记得要清零中断标志位。
三、IO口初始化函数、PCA初始化函数、PCA中断处理函数
/*******************************************************************************
* Function Name : IO_Init
* Description : IO初始化
* Input : None
* Output : None
* Return : None
* Others : 系统时钟20Mhz
*******************************************************************************/
void IO_Init(void)
{
P3M0 |= 0xA0;//初始化P3^7(PCA0),P3^5(PCA1)的IO状态为:仅为输入,
P3M1 |= 0x00;
P2M0 |= 0x10;//初始化P2^4(PCA3)的IO状态为:仅为输入
P2M1 |= 0x00;
}
/*******************************************************************************
* Function Name : PCA_Init
* Description : PCA初始化
* Input : None
* Output : None
* Return : None
* Others : 系统时钟20Mhz
*******************************************************************************/
void PCA_Init(void)
{
CMOD |= 0x01;//CMOD=00000011
//CIDL=0,空闲模式下允许PCA继续工作
//CPS1:CPS0=01,PCA的时钟系统为:sysclk/2
//ECF=1,允许寄存器CCON中CF位的中断
CCON |= 0x00;//CCON=01000000
//CF=0,PCA计数器阵列溢出标志位清零
//CR=0,关闭PCA计数器阵列
//CCF0-3=0,PCA模块0123中断标志位清零
CCAPM0 |= 0x21;//CCAPM0=00100001
//ECOM0=0,不允许比较器功能
//CAPP0=1,允许上升沿捕获
//MAT0=0,PCA计数值与模块的捕获值相匹配时,置位中断CCP0
//ECCF0=1,使能CCF0中断
CCAPM1 |= 0x21;//CCAPM1=00100001
//ECOM1=0,不允许比较器功能
//CAPP1=1,允许上升沿捕获
//MAT1=0,PCA计数值与模块的捕获值相匹配时,置位中断CCP1
//ECCF1=1,使能CCF1中断
CCAPM2 |= 0x21;//CCAPM2=00100001
//ECOM2=0,不允许比较器功能
//CAPP2=1,允许上升沿捕获
//MAT2=0,PCA计数值与模块的捕获值相匹配时,置位中断CCP2
//ECCF2=1,使能CCF2中断
CCAPM3 |= 0x21;//CCAPM3=00100001
//ECOM3=0,不允许比较器功能
//CAPP3=1,允许上升沿捕获
//MAT3=0,PCA计数值与模块的捕获值相匹配时,置位中断CCP3
//ECCF3=1,使能CCF3中断
CH = 0;//PCA装载值的高8位
CL = 0;//PCA装载值的低8位
CCAP0L = 0;//PCA0捕获计数值的高8位
CCAP0H = 0;//PCA0捕获计数值的低8位
CCAP1L = 0;//PCA1捕获计数值的高8位
CCAP1H = 0;//PCA1捕获计数值的低8位
CCAP2L = 0;//PCA2捕获计数值的高8位
CCAP2H = 0;//PCA2捕获计数值的低8位
CCAP3L = 0;//PCA3捕获计数值的高8位
CCAP3H = 0;//PCA3捕获计数值的低8位
CR = 1; //CR=1,启用PCA计数器阵列
IE |= 0x40;//EPCA_LVD=1,允许PCA模块和低压监测中断
EA = 1; //EA=1,打开总中断
}
/*******************************************************************************
* Function Name : PCA_ISR
* Description : PCA扩展中断处理函数
* Input : None
* Output : None
* Return : None
* Others : None
*******************************************************************************/
void PCA_ISR(void) interrupt 7 using 1
{
EPCA_LVD = 0;//关闭PCA中断
if(1 == CF)//有信号就进入捕获中断
{
CF = 0; //清零PCA总的捕获中断标志位
}
if(1 == CCF0)
{
CCF0 = 0; //清零PCA0的捕获中断标志位
CCF0_Flag++; //CCF0_Flag标志位递增
}
if(1 == CCF1)
{
CCF1 = 0; //清零PCA1的捕获中断标志位
CCF1_Flag++; //CCF1_Flag标志位递增
}
if(1 == CCF2)
{
CCF2 = 0; //清零PCA2的捕获中断标志位
CCF2_Flag++; //CCF2_Flag标志位递增
}
if(1 == CCF3)
{
CCF3 = 0; //清零PCA3的捕获中断标志位
CCF3_Flag++; //CCF3_Flag标志位递增
}
EPCA_LVD = 1;//打开PCA中断
}
史海拾趣
|
怎样做才能快速的嵌入式了? 其实,做工程是没有捷径可走的.听听下面一个大牛写的! 先说做硬件: 把你的数字电路教材和模拟电路的教材读熟,暂时先把重点放在数字电路上面,接着把微机原理和接口技术读熟悉了,最好能用汇编写几个简单的程序上机 ...… 查看全部问答> |
|
诸位,咱进入安防行业也是几年了,不算有出息,环顾四周,也没有看见几个有出息的 !回顾这几年的行业生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们弟兄们提个醒 ,希望他们比咱强! 1:好好规划自 ...… 查看全部问答> |
|
请教gprs modem拨号成功ppp协商获得ip地址并确认后怎么还无法上网? gprs modem拨号成功,并且ppp协商获得ip地址而且也确认了,但是我在电脑上ping 10.0.0.172还是不通,是不是还要设置什么?电脑还有正常宽带连接中… 查看全部问答> |
|
想学习ARM方面的。现在想学。目前自身的水平是会c,c++,VC都没有问题。汇编懂一点。arm系统以前用过nucleus,也是别人把系统搭好后我添加一些程序。现在自己想设计个板子,包括画板子,写驱动。 请问我该怎么学习?谢谢… 查看全部问答> |
|
在LED灯具中普遍使用的颜色有红绿蓝白黄,从人眼的视觉敏感度来讲,人对黄、绿色的颜色敏感,也就是说这两种颜色稍微有点波动,人眼就能感觉到。衡量颜色的单位是nm(纳米),为了避免颜色波长不同来来的差异,灯具生产公司不得不对LED原材料进行控 ...… 查看全部问答> |
|
请以下参与团购TI工业用样片的ID补充完整信息,逾期将做退货处理! 参与团购TI工业用样片套装的朋友请注意: 1、以下ID未填写个人相关信息,截止至18日中午12:00仍未提供详细信息将以退货处理。https://www.eeworld.com.cn/ee ...… 查看全部问答> |




