哪位老师帮忙解答下这个是什么意思
j = (u16)((duty*4096UL)/(PERIOD+1)); //计算ADC采样理论值这里面的*4096UL代表什么意思
#define PERIOD 255L //PWM周期
还有这个255L是多少
UL表示unsigned long,L表示long
如果直接写4096会定义为int型,后面加上UL,就表示这个4096是unsigned long型的数据。
255L同理 qq675032915 发表于 2024-4-7 11:42
UL表示unsigned long,L表示long
如果直接写4096会定义为int型,后面加上UL,就表示这个4096是unsigned lon ...
这两个数没超出int型的范围,为什么要定义为长整形 mtiaopi 发表于 2024-4-7 12:16
这两个数没超出int型的范围,为什么要定义为长整形
你可以定义成长整型啊,它支持 jwd 发表于 2024-4-7 13:11
你可以定义成长整型啊,它支持
只是你用不用的问题 keilc51使用的字节范围是
int 占两个字节 范围:-32768~+32767
long占四个字节 范围:-2147483648~+2147483647
为啥要用usigned long再强制转换回u16 wangxiangtan 发表于 2024-4-7 13:35
keilc51使用的字节范围是
int 占两个字节 范围:-32768~+32767
不知道,这个是屠龙刀核心板的例程里面的,就是不明白才来问下什么意思,原程序:
cnt200ms = 0;
adc = Get_ADC12bitResult(8);//参数0~15,查询方式做一次ADC, 返回值就是结果
j = (u16)((duty*4096UL)/(PERIOD+1)); //计算ADC采样理论值
if(j>adc)
{
if(((j-adc)>THRESHOLD) && (feedback<=PERIOD)) feedback++;
}
else
{
if(((adc-j)>THRESHOLD) && (feedback>0)) feedback--;
}
printf("ADC=%u,duty=%u,feedback=%u\r\n",adc,duty,feedback);
UpdatePwm(feedback); //更新占空比 其实直接4096也行 mtiaopi 发表于 2024-4-7 13:43
不知道,这个是屠龙刀核心板的例程里面的,就是不明白才来问下什么意思,原程序:
cnt20 ...
duty*4096: 可能超过65535,所以强制为UL类型,不丢位。
(u16):最后的结果肯定是小于65535的,所以再强制转换回来。
从汇编过来的,之前看过好像是这样的 嵌入式之路 发表于 2024-4-7 14:44
其实直接4096也行
自己搞肯定就这样干了
页:
[1]
2