- UID
- 185066
- 性别
- 男
|
本帖最后由 win2000_li 于 2012-6-22 15:57 编辑
要求在输出PWM波形,调整LED的渐亮。
要求在700ms内LED渐亮,功能可以实现
但是用示波器查看波形不是700ms,而是600ms.
开始,怀凝是输出700ms程序的问题,在PWM输出同时,加入一个IO输出。
结果发现这个程序没有问题,IO可以输出700ms.
后来,在发现在关闭PWM4输出通道时,发现有一个100ms多的缓慢下降的曲线。
这个没有办法解释啊!
单片机用的是S12G128;
请大家指点一下。谢谢!
void TpmPWM4config(void)
{
/* PWME4 = 0 */
clrReg8Bits(PWME, 0x10); /* Disable counter */
/* PWMCNT4: PWMCNT4=0 */
setReg8(PWMCNT4, 0x00U); /* Reset Counter */
/* PWMDTY4: PWMDTY4=0xFE */
setReg8(PWMDTY4, 0xFFU); /* Store initial value to the duty-compare register */
/* PWMPER4: PWMPER4=0xFF */
setReg8(PWMPER4, 0xFFU); /* and to the period register */
/* PWMPRCLK: ??=0,PCKB2=0,PCKB1=0,PCKB0=0,??=0,PCKA2=0,PCKA1=1,PCKA0=0 */
setReg8(PWMPRCLK, 0x02U); /* Set prescaler register */
/* PWMSCLA: BIT7=1,BIT6=0,BIT5=1,BIT4=1,BIT3=1,BIT2=0,BIT1=1,BIT0=1 */
setReg8(PWMSCLA, 0xBBU); /* Set scale register */
/* PWMCLK: PCLK4=1 */
setReg8Bits(PWMCLK, 0x10U); /* Select clock source */
/* PWME: PWME4=0 */
clrReg8Bits(PWME, 0x10); /* Disable counter */
}
void TestPWM(void)
{
static INT8U aCnt = SetZero;
if (1 == KeyState)
{
DimCnt = ClrZero;
PWME_PWME4 = 1;
if (aCnt < 22)
{
aCnt++;
PWMDTY4 -= 5;
}
else if (aCnt < 70)
{
aCnt++;
PWMDTY4 -= 3;
}
else
{
aCnt = 88;
PWMDTY4 = ClrZero;
PWME_PWME4 = 0;
}
}
}
void main(void)
{
while(1)
{
if (10msFlg == 1)
{
10msFlg = 0;
TestPWM();
}
}
} |
|