一、前言
C8051F340单片机的可编程计数器PCA0可以工作在频率输出模式,输出方波频率。
频率输出方式可在模块的CEXn引脚产生可编程频率的方波。捕捉/比较模块的高字节保持输出电平改变前要计的PCA时钟数。
频率计算公式为:
FPCA是由PCA方式寄存器(PCA0MD)中的CPS2-0位选择的时钟的频率。捕捉/比较模块的低字节与PCA0计数器的低字节比较;两者匹配时,CEXn的电平发生改变,高字节中的偏移值被加到PCA0CPLn。通过将PCA0CPMn寄存器中ECOMn、TOGn和PWMn位置‘1’来使能频率输出方式。
二、程序展示
1、头文件部分
#include <c8051f340.h>
#define SYSCLK 12000000 // 内部晶振频率12M
#define f_CEX0 50000 //定义输出频率
void OSCILLATOR_Init (void);
void PORT_Init (void);
void PCA0_Init (void);
2、主程序部分
void main (void)
{
PCA0MD = 0x00; // 关闭看门狗
PORT_Init (); //端口初始化
OSCILLATOR_Init (); // 晶振初始化
PCA0_Init (); // PCA0初始化
while (1);
}
3、晶振初始化程序
void OSCILLATOR_Init (void)
{
OSCICN = 0x83;
CLKSEL = 0x00;
}
4、端口初始化程序
void PORT_Init (void)
{
XBR0 = 0x00;
XBR1 = 0x41; //将CEX0配置到P0.0,
P0MDOUT |= 0x01; //设置P0.0为推挽输出
}
5、PCA0初始化程序
void PCA0_Init (void)
{
PCA0CN = 0x00; //停止计时,清除所有标志
PCA0MD = 0x00; //使用系统时钟12分频作为时基
PCA0CPM0 = 0x46; //设置频率输出模式
PCA0CPH0 = (SYSCLK/12)/(2*f_CEX0); //设置高位值
CR = 1; //启动PCA0
}