wangwing 发表于 2024-12-13 09:46:02

这个延时函数为什么修改循环次数不管用

<p>STC8F2K6S2,在使用1602液晶延时函数时,定义了下面几个函数,在使用时修改毫秒、50毫秒、秒这3个函数的循环次数,都可以改变延时的结果,但是对于50微秒这个函数中,将i改为100,50,20,最后的延时都没有改变!搞不明白这是为什么?<br />
void delay_50us(uchar us50){      //@12.000MHz<br />
uchari;<br />
i = 198;                  //i=198:STC软件中查到的12M时钟数据<br />
while(us50--)while (--i);<br />
}<br />
void delay_ms(unsigned char ms){<br />
while(ms--)delay_50us(20);          //100<br />
}<br />
void delay_50ms(uchar i){<br />
while(i--)delay_ms(50);<br />
}<br />
void delay_s(unsigned char s){<br />
while(s--)delay_50ms(20);<br />
}</p>

_奶咖君_ 发表于 2024-12-13 10:08:07

<p>能说说你是怎么判断延时改变了呢 <img alt="xiaojiujie" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/xiaojiujie.gif" title="xiaojiujie" /></p>

_奶咖君_ 发表于 2024-12-13 10:12:47

再者就是你能说明一下 你的第一个50us函数中 i 再每次循环中的数值变化么{:saorao:}

DebugLab 发表于 2024-12-13 10:45:27

建议直接使用AI-ISP生成延时函数,优化等级默认

jwd 发表于 2024-12-13 10:46:47

<p><img src="data/attachment/forum/202412/13/104625rq2x241vxoqum1mq.png" alt="image.png" title="image.png" />这里不一样,没有定义uchar?</p>

lezjin 发表于 2024-12-13 11:12:31

<p>WHILE嵌套不正确,</p>
<p>代码书写尽量做到规范,好查找问题</p>

wlhet 发表于 2024-12-13 11:28:09

DebugLab 发表于 2024-12-13 10:45
建议直接使用AI-ISP生成延时函数,优化等级默认

AI-ISP的函数生成很好用的

bkeuqoaq 发表于 2024-12-13 11:36:10

void delay_50us(uchar us50)
{ //@12.000MHz
        uchar i;
       
        while(us50--)
        {
                i = 198; //i=198:STC软件中查到的12M时钟数据
                while (--i);
        }
}

网老四 发表于 2024-12-13 11:44:52

<p>i = 198;                  //i=198:STC软件中查到的12M时钟数据<br/>
while(us50--)while (--i);</p>
<p>这种写法确实不太规范,看着别扭.另外,</p>
<p>us延时函数里,后面这个while (i--)多了一个空格,试试看是不是这个空格引起的问题</p>

soma 发表于 2024-12-13 13:07:42

这套娃操作,一般才延时不建议软件延时。还是建议使用ISP软件生成的延时来。
页: [1] 2
查看完整版本: 这个延时函数为什么修改循环次数不管用