#include "hal_defs.h" #include "hal_cc8051.h" #include "hal_mcu.h" /********************************************************************************************** *函数:void TIM1_PwmInit(uint16 period, uint8 ration) *功能:输出正PWM拨,周期period毫秒,占空比为百分之ration *输入:uint16 period-周期,单位:毫秒, uint8 ration-占空比,单位:% *输出:无 *返回:无 *特殊说明:无 **********************************************************************************************/ void TIM1_PwmInit(uint16 period, uint8 ration) { uint16 TimPeriod = 0; uint16 TimComp = 0; CLKCONCMD |= 0x38; //定时器标记输出为250KHZ //定时器通道设置 P1SEL |= 0x01; //定时器1通道2映射至P1_0,功能选择 PERCFG |= 0x40; //备用位置2,说明信息 P2SEL &= ~0x10; //相对于Timer4,定时器1优先 P2DIR |= 0xC0; //定时器通道2-3具有第一优先级 P1DIR |= 0x01; //定时器模式设置 T1CTL = 0x02; //250KHZ不分频,模模式 //此处P1_0口必须装定时器1通道2进行比较 T1CCTL2 = 0x24; //在向上比较清除输出。在0设置,到达比较值时清除输出 //装定时器通道0初值 TimPeriod = period*250;//周期TimPeriod毫秒,单位:ms T1CC0H = (uint8)(TimPeriod>>8); T1CC0L = (uint8)TimPeriod; //PWM信号周期为1ms,频率为1KHZ //装定时器通道2比较值 TimComp = ration*TimPeriod/100;//由占空比生成比较值 T1CC2H = (uint8)(TimComp>>8); T1CC2L = (uint8)TimComp; }
时间: 2023-07-23 07:56:51 浏览: 137
这是一段用于初始化定时器1输出正PWM波的代码,其中参数period表示PWM波的周期,单位为毫秒,参数ration表示PWM波的占空比,单位为百分比。函数首先通过CLKCONCMD寄存器设置定时器标记输出为250KHZ,并且通过P1SEL和PERCFG寄存器选择定时器1通道2映射至P1_0口,以及设置备用位置信息。接着,通过T1CTL寄存器设置定时器1不分频,模式为模模式,即向上计数到最大值后自动清零。通过T1CCTL2寄存器设置在向上比较时清除输出,在0时设置,到达比较值时清除输出。最后,通过T1CC0H、T1CC0L、T1CC2H和T1CC2L寄存器分别装载定时器通道0的初值和定时器通道2的比较值,生成PWM波形。
阅读全文