这个延时函数为什么修改循环次数不管用
<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>
<p>能说说你是怎么判断延时改变了呢 <img alt="xiaojiujie" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/xiaojiujie.gif" title="xiaojiujie" /></p>
再者就是你能说明一下 你的第一个50us函数中 i 再每次循环中的数值变化么{:saorao:} 建议直接使用AI-ISP生成延时函数,优化等级默认 <p><img src="data/attachment/forum/202412/13/104625rq2x241vxoqum1mq.png" alt="image.png" title="image.png" />这里不一样,没有定义uchar?</p>
<p>WHILE嵌套不正确,</p>
<p>代码书写尽量做到规范,好查找问题</p>
DebugLab 发表于 2024-12-13 10:45
建议直接使用AI-ISP生成延时函数,优化等级默认
AI-ISP的函数生成很好用的 void delay_50us(uchar us50)
{ //@12.000MHz
uchar i;
while(us50--)
{
i = 198; //i=198:STC软件中查到的12M时钟数据
while (--i);
}
} <p>i = 198; //i=198:STC软件中查到的12M时钟数据<br/>
while(us50--)while (--i);</p>
<p>这种写法确实不太规范,看着别扭.另外,</p>
<p>us延时函数里,后面这个while (i--)多了一个空格,试试看是不是这个空格引起的问题</p>
这套娃操作,一般才延时不建议软件延时。还是建议使用ISP软件生成的延时来。
页:
[1]
2