gpt4 book ai didi

c - AVR 编程中意外的 float 到 unsigned char 转换

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:55 25 4
gpt4 key购买 nike

微 Controller :Arduino Uno 中的 ATmega328P
时钟频率:16MHz

void timeDelay_CTC(float sec, unsigned char times)
{
unsigned char cycles = (unsigned char)(sec / 0.000064f);
OCR1A = cycles - 1;
TCCR1A = 0b00000000;
TCCR1B = 0b00001101;
for( unsigned char i = 1; i <= times; i++ )
{
while( (TIFR1 & (1<<OCF1A)) == 0 );
TIFR1 |= (1<<OCF1A);
}
TCCR1A = 0;
TCCR1B = 0;
}

该函数用于计算延时循环次数并实现。

int main(void)
{
//Initialization
LED1_DDR |= (1<<LED1_BIT);
LED1_PORT |= (1<<LED1_BIT);

//Start
while(1)
{
LED1_PORT ^= (1<<LED1_BIT);
timeDelay_CTC(1, 1);
}
}

但是,当运行上面的代码时,LED 灯不会切换。如果我只输入 OCR1A = 15624;(1s 的循环次数),它会很好地工作。所以,问题应该出在unsigned char cycles = (unsigned char)(sec/0.000064f);的计算上,我认为可能是数据类型转换错误。你能教我如何让它发挥作用吗?或者给我一些提示。

最佳答案

请检查 unsigned char 的范围,它是 [0 255],它对于您的应用来说不够大。尝试使用无符号整数。

关于c - AVR 编程中意外的 float 到 unsigned char 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26900053/

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