多语言展示
当前在线:1523今日阅读:91今日分享:37

C8051F310中PCA0计数器实现脉冲信号计数的步骤

C8051F310中PCA0为可编程计数器阵列的简称,它的功能特点是有一个专用的16位计数/定时器,同时还有5个16位捕捉/比较模块。上述功能可以让它实现最简单的一个目的:进行脉冲个数的计数,得到单位时间内捕捉的脉冲个数,即脉冲频率信息,输入到上位机进行信号的处理即可。本文旨在提供给广大C8051F3X0系列初学者一点思路,目的是让大家发现它的更多其它实际应用。
工具/原料
1

C8051F310最小系统

2

Keil uvision 3编程软件

方法/步骤
1

本文为了使读者的思路更清晰,直接从程序分析的角度切入对PCA0功能的理解和应用。1,在,Keil3新建工程的.c文件中声明PCA0的初始化函数和PCA0中断服务函数。

2

2,在main函数中调用刚才声明的PCA0初始化函数,PCA0的中断服务函数不用在main函数中调用,因为它有单独的中断号可以在中断触发时CPU分配指令直接进入。

3

3,PCA0初始化函数中定义你所用到的PCA0的基本功能,包括定义PCA0计数器高低字节的值,PCA0捕捉模块高低字节的值等,其中最重要的三点:使能PCA0中断,使能PCA0的正边沿捕捉功能,启动PCA0定时器。

4

4,当定义好PCA0的初始化函数,并且在main函数中调用执行后,当PCA0对应捕捉模块的I/O线上检测到由低到高正边沿电平变化时,会立即进入PCA0中断(因为在初始化函数中使能了PCA0中断和正边沿捕捉功能)。

5

5,PCA0中断函数的触发是在C8051F310对应 I 口检测到正边沿信号到来时,其中断号为11。在中断函数中读取PCA0捕捉模块高低字节PCA0CPH0和PCA0CPL0的值并保存在自己定义的变量中。该高低字节中保存的即是:在脉冲信号持续期间,PCA0对自身设定的时钟下(此处设置PCA0运行时钟为系统时钟的12分频)对振荡次数的计数。目的是:最终计算出脉冲信号在 I 口到底持续了多长时间。这个时间是标准和精确的。

6

6,当测出脉冲信号在 I 口到底持续了多长时间(单位时间),又测出到底是多少个正边沿的脉冲信号触发导致其持续了这么长时间(脉冲个数)。最终可以得到单位时间内的脉冲个数,即脉冲频率值。

注意事项
1

若PCA0自身设定的时钟不同(系统时钟8分频?4分频?),则在具体计算时应该按照其设定的时钟计算脉冲的持续时间。

2

也可以在PCA0初始化函数中使能负边沿信号捕捉,具体设置方法看datasheet

推荐信息