历史上的今天
返回首页

历史上的今天

今天是: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中断

}


推荐阅读

史海拾趣

Forge Europa Ltd公司的发展小趣事

在全球化布局的同时,Forge Europa Ltd公司也注重在中国市场的本土化深耕。公司在中国设立了研发中心和生产基地,以更好地服务中国市场并融入本土产业链。通过深入了解中国市场的需求和特点,Forge Europa不断调整产品策略,推出了一系列符合中国市场需求的LED灯带产品。此外,公司还积极与中国本土企业合作,共同推动LED照明技术的发展和应用。

Benchmarq Microelectronics Inc公司的发展小趣事

在国内市场取得一定成绩后,Benchmarq Microelectronics Inc开始积极拓展国际市场。公司积极参加国际电子展会和交流活动,与国际同行建立合作关系,将产品打入国际市场。同时,公司还加强品牌建设,提升品牌知名度和美誉度。通过广告宣传、媒体报道等多种方式,公司成功塑造了专业、可靠的品牌形象,赢得了客户的信任和认可。

HellermannTyton公司的发展小趣事

随着全球对环境保护意识的增强,Heimann Optoelectronics Gmbh积极响应,将绿色环保理念融入产品设计和生产中。公司投入大量资源研发出低功耗、长寿命的光电传感器,这些产品在使用过程中能够显著减少能源消耗和废弃物产生。此外,公司还采用环保材料进行包装,确保从生产到废弃的整个生命周期都符合环保标准。这一举措不仅赢得了市场的广泛赞誉,还为公司树立了良好的企业形象。

南晶电子(DGNJDZ)公司的发展小趣事

在发展过程中,南晶电子始终秉持合作共赢的理念。公司与上下游企业建立了紧密的合作关系,共同推动产业链的发展。同时,南晶电子还积极参与社会公益事业,为社会进步和发展贡献自己的力量。通过与各方的共同努力,南晶电子在电子行业树立了良好的企业形象和口碑。

Data Device Corporation公司的发展小趣事

在电子行业中,竞争日益激烈,DDC也面临着诸多挑战。然而,DDC始终保持着清醒的头脑和坚定的信念,积极应对挑战并寻找机遇。通过不断优化产品结构、提高生产效率、降低成本等措施,DDC不断提高自身的竞争力。同时,DDC还积极关注行业发展趋势和市场变化,及时调整战略方向,确保公司能够在激烈的竞争中立于不败之地。

请注意,这些故事是基于DDC公司的发展历程和事实进行的概述,具体的细节和情节可能需要根据实际情况进行补充和调整。

Blue Creation公司的发展小趣事

在市场竞争日益激烈的背景下,Blue Creation公司意识到单打独斗难以立足。于是,公司积极寻求与其他企业建立合作关系。通过与一家知名芯片制造商的深度合作,Blue Creation成功将其电源管理技术集成到对方的芯片产品中,双方共同开拓市场,实现了互利共赢。这一举措不仅提升了Blue Creation的知名度,也为其带来了稳定的收入来源。

问答坊 | AI 解惑

怎样做才能快速的嵌入式了?

怎样做才能快速的嵌入式了? 其实,做工程是没有捷径可走的.听听下面一个大牛写的! 先说做硬件: 把你的数字电路教材和模拟电路的教材读熟,暂时先把重点放在数字电路上面,接着把微机原理和接口技术读熟悉了,最好能用汇编写几个简单的程序上机 ...…

查看全部问答>

安防工程师心得,看后感触颇多~~

诸位,咱进入安防行业也是几年了,不算有出息,环顾四周,也没有看见几个有出息的 !回顾这几年的行业生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们弟兄们提个醒  ,希望他们比咱强!       1:好好规划自 ...…

查看全部问答>

请教gprs modem拨号成功ppp协商获得ip地址并确认后怎么还无法上网?

gprs modem拨号成功,并且ppp协商获得ip地址而且也确认了,但是我在电脑上ping 10.0.0.172还是不通,是不是还要设置什么?电脑还有正常宽带连接中…

查看全部问答>

请教对于常用元件的选型经验

对于一些常用的电阻,电容,二级管,三极管,选型的时候有什么需要注意的地方呢?…

查看全部问答>

希望学习ARM开发,不知道从哪里开始学习

想学习ARM方面的。现在想学。目前自身的水平是会c,c++,VC都没有问题。汇编懂一点。arm系统以前用过nucleus,也是别人把系统搭好后我添加一些程序。现在自己想设计个板子,包括画板子,写驱动。 请问我该怎么学习?谢谢…

查看全部问答>

请教,如何对协议的性能进行测试?

例如像如下协议: TCP SSL FTP 还有无线通信协议。 谢谢,请各位大侠帮忙。…

查看全部问答>

关于LED灯具颜色差异评价

在LED灯具中普遍使用的颜色有红绿蓝白黄,从人眼的视觉敏感度来讲,人对黄、绿色的颜色敏感,也就是说这两种颜色稍微有点波动,人眼就能感觉到。衡量颜色的单位是nm(纳米),为了避免颜色波长不同来来的差异,灯具生产公司不得不对LED原材料进行控 ...…

查看全部问答>

请以下参与团购TI工业用样片的ID补充完整信息,逾期将做退货处理!

参与团购TI工业用样片套装的朋友请注意:               1、以下ID未填写个人相关信息,截止至18日中午12:00仍未提供详细信息将以退货处理。https://www.eeworld.com.cn/ee ...…

查看全部问答>

电子面试题

replyreload += \',\' + 1238951;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>