stc单片机IO配置与PWM
所有PCA模块都可用作PWM输出(上图)。输出频率取决于决于PCA定时器的时钟源。
由于所有模块共用仅有的PCA定时器,所有它们的输出频率相同。各个模块的输出占空
是独立变化的,与使用的捕获寄存器[EPCnL,CCAPnL]有关。当寄存器寄存器CL的值小于[EPCnL,CCAPnL]时,输出为低;当寄存器CL的值等于或大于[EPCnL,CCAPnL]时,输出为高。当CL的值由FF变为00溢出时,[EPCnH,CCAPnH]的内容装载到[EPCnL,CCAPnL]中。这样就可实现无干扰地更新PWM。要使能PWM模式,模块CCAPMn寄存器的PWMn和ECOMn位必须置位。由于PWM是8位的,所以:PWM的频率=:PCA时钟输入源频率/256PCA时钟输入源可以从以下8种中选择一种:SYSclk,SYSclk/2,SYSclk/4,SYSclk/6,SYSclk/8,SYSclk/ 2,定时器0的溢出,ECI/P3.4输入。。
举例:要求PWM输出频率为38KHz,选SYSclk为PCA/PWM时钟输入源,求出SYSclk的值
由计算公式38000=SYSclk/256,得到外部时钟频率SYSclk=38000 x 256 x=9,728,000
如果要实现可调频率的PWM输出,可选择定时器0的溢出率或者ECI脚的输入作为PCA/PWM的时钟输入源
当EPCnL = 0及CCAPnL=0x00H时,PWM固定输出高
当EPCnL = 1及CCAPnL=0xFFH时,PWM固定输出低
例:
#definePCA_IDLE_DISABLE0//1:MCU在IDLE模式时禁止PCA工作。0:MCU在IDLE模式时允许PCA工作。
#definePCA_SOURCE_SELECT1//选择PCA的基准时钟源。
//0:系统时钟Fosc/12。
//1:系统时钟Fosc/2。
//2:定时器0的溢出。
//3:ECI/P3.4脚的外部时钟输入(最大=Fosc/2)。
//4:系统时钟Fosc。
//5:系统时钟Fosc/4。
//6:系统时钟Fosc/6。
//7:系统时钟Fosc/8。
voiden_PCA(void)
{
CMOD= (PCA_IDLE_DISABLE << 7) | (PCA_SOURCE_SELECT << 1);//初始化PCA模式寄存器。
CL= 0x00;//清除PCA计数机
CH= 0x00;
CR= 1;//启动PCA计数机 CL 00->FF
}
void initPWM()
{
PWM=0x00;
PCA_PWM0=0x02;//初始化输出0
CCAP0H= 0xFF;//初始化输出0
CCAPM0= 0x42;//设置PCA模块0工作在PWM模式.......................
PCA_PWM1=0x02;//初始化输出0
CCAP1H= 0xFF;//初始化输出0
CCAPM1= 0x42;//设置PCA模块1工作在PWM模式
en_PCA();//打开PMW
}
DALE R01F采样电阻,阻值是0.01欧
RXD为接收数据的引脚,TXD为发送数据的引脚
PMW0 输出全1
PCA_PWM0=0x00;
CCAP0H = 0x00;
PMW0输出全0
PCA_PWM0=0x00;
CCAP0H = 0x00;//set PWM wide
评论