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