放个Counter8, 设置其中断频率是PWM的20倍以上,然后在其中断函数里测量高电平和低电平的个数,乘以中断周期就可以了。给你个参考程序
WORD wPos = 0;
WORD wNeg = 0;
WORD wCnt = 0;
BYTE bFlag = 0;
#define PWM_PIN 0x10
#define PWM_PORT PRT2DR
#pragma interrupt_handler Counter8_ISR
void Counter8_ISR(void)
{
if(PWM_PORT & PWM_PIN)
{
if(bFlag == 0)
{
wNeg = wCnt;
wCnt = 0;
bFlag = 1;
}
wCnt++;
}
else
{
if(bFlag == 1)
{
wPos = wCnt;
wCnt = 0;
bFlag = 0;
}
wCnt++;
}
}
|