gpt4 book ai didi

c - 如何将 10 位值传递给两个寄存器?

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:32 26 4
gpt4 key购买 nike

我正在尝试将 DC 的值传递给 CCPR1LDC1B1DC1B0,现在我是手动做的,但是有没有办法直接使用 DC 的值?

void SetDCPWM1(unsigned int DC){
CCPR1L = 0b01011010;
DC1B1 = 0;
DC1B0 = 0;
}

现在我没有使用 DC ,因为我不知道如何正确地将值传递给寄存器。 DC 是一个 10 位值,DC1B1DC1B0 必须有位 1 和 2,CCPR1L 必须有位 3 - 10.

最佳答案

假设 PWM 占空比的 10 位是函数参数的低 10 位,那么这应该可以满足您的要求。

void SetDCPWM1(unsigned int DC){
CCPR1L = (DC >> 2);
DC1B1 = 0;
DC1B0 = 0;
if (DC & 2) DC1B1 = 1;
if (DC & 1) DC1B0 = 1;
}

此代码应解决 Mike 的评论:

void SetDCPWM1(unsigned int DC){
CCP1CONbits.DC1B = (unsigned char)(DC) & 0x03;
CCPR1L = (unsigned char)(DC>>2);
}

此外,PWM 占空比的两个 LSB 现在在同一指令周期内更新。

关于c - 如何将 10 位值传递给两个寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52910899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com