Если предположить, что 10-биты рабочего цикла ШИМ являются младшими 10-битами параметра функции, то это должно сделать то, о чем вы просили.
void SetDCPWM1(unsigned int DC){
CCPR1L = (DC >> 2);
DC1B1 = 0;
DC1B0 = 0;
if (DC & 2) DC1B1 = 1;
if (DC & 1) DC1B0 = 1;
}
Этот код должен содержать комментарий отМайк:
void SetDCPWM1(unsigned int DC){
CCP1CONbits.DC1B = (unsigned char)(DC) & 0x03;
CCPR1L = (unsigned char)(DC>>2);
}
Кроме того, два младших бита рабочего цикла ШИМ теперь обновляются в одном и том же цикле команд.