刚刚使用MCC试看了一下,生成如下代码
void PWM3_LoadDutyValue(uint16_t dutyValue)
{
// Writing to 8 MSBs of PWM duty cycle in PWMDCH register
PWM3DCH = (dutyValue & 0x03FC)>>2;
// Writing to 2 LSBs of PWM duty cycle in PWMDCL register
PWM3DCL = (dutyValue & 0x0003)<<6;
}
请问,上面的这些代码是不是不够严谨?16位赋值给8位可以理解,但是还要先运算再赋值,如果不是官方的例程,我还真的有点担心
还有,请问下面的语句运行速度是否会比上面的快?功能是一样的
void PWM3_PulseWidth(unsigned short width) //脉冲占空比宽度调整函数(宽度值)
{
unsigned short* p16;
unsigned char* p;
width*=64; //相当于左移6位,PIC18有硬件乘法
p16=&width;
p=p16;
PWM3DCH = *(p+1);
PWM3DCL = *p;
}
|