欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 求教STC單片機軟件延時問題 [打印本頁]

作者: wangwing    時間: 2024-12-12 16:37
標題: 求教STC單片機軟件延時問題
在使用1602液晶延時函數時,發現了這個STC8F2K6S2,在使用延時函數的時候,修改毫秒、50毫秒、秒這3個函數的循環次數,都可以改變延時的結果,但是對于50微秒這個函數中,將i改為100,50,20,最后的延時都沒有改變!搞不明白這是為什么?
void delay_50us(uchar us50){        //@12.000MHz
        uchar  i;
        i = 198;                  //i=198:STC軟件中查到的12M時鐘數據
        while(us50--)while (--i);
}
void delay_ms(unsigned char ms){
        while(ms--)delay_50us(20);          //100
}
void delay_50ms(uchar i){
        while(i--)delay_ms(50);
}
void delay_s(unsigned char s){
        while(s--)delay_50ms(20);
}


clock.rar

137.18 KB, 下載次數: 0


作者: jjy1039    時間: 2024-12-13 10:47
重新看了一下,樓下是對的,void delay_50us(uchar us50)的局部變量i在第一次循環到0之后沒有重新賦值,后面相當于都是while(0),直接跳過了
作者: lkc8210    時間: 2024-12-13 11:47
因為i沒有重裝
  1. void delay_50us(uchar us50)         //@12.000MHz
  2. {
  3.         uchar  i;
  4.         while(us50--)
  5.         {
  6.                 i = 198;                  //i=198:STC軟件中查到的12M時鐘數據
  7.                 while (--i);
  8.         }
  9. }
復制代碼

作者: xiaobendan001    時間: 2024-12-13 13:14
板凳說的對,局部變量只初始化一次,所以只在調用時=198;之后都是0,--i就是255了。在循環內部I = 198;就OK了。
作者: waduduu    時間: 2024-12-13 14:58
1.循環變量初始化位置:在delay_50us函數中,變量i的初始化應該放在內層while循環的內部,以確保每次外層while循環時i都能被重新初始化。如果i只初始化一次,那么不論外層循環執行多少次,i的值都不會改變,導致延時不變。正確的做法是將i = 198;放在內層while循環內部,如下所示: void delay_50us(uchar us50){     //@12.000MHz     uchar  i;     while(us50--){         i = 198; // i=198:STC軟件中查到的12M時鐘數據         while (--i);     } } 這樣
作者: 123321355    時間: 2024-12-13 17:08
是不是太快了你沒看出來啊
作者: wangwing    時間: 2024-12-19 11:40
論壇里有經驗的高手很多呀,感謝2、3、4、5、6樓的各位。仔細看了一下代碼,確實如各位所說。我還是經驗缺




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1