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

標(biāo)題: 關(guān)于STC 51單片機(jī)不同指令集的(Y1-Y3-Y5-Y6)軟件延時(shí)函數(shù),如何才能更精確? [打印本頁(yè)]

作者: DTY拾光    時(shí)間: 2022-5-1 04:43
標(biāo)題: 關(guān)于STC 51單片機(jī)不同指令集的(Y1-Y3-Y5-Y6)軟件延時(shí)函數(shù),如何才能更精確?
關(guān)于STC 51單片機(jī)不同指令集的,Y1-Y3-Y5-Y6軟件延時(shí)函數(shù),大家都是怎么寫的呢?
本人,以前學(xué)了幾天STC89**的,通過(guò)STC-ISP生成延時(shí)函數(shù)改造一直使用著,沒(méi)覺(jué)得誤差有多大:如下
  1. //延時(shí)n毫秒 @11.0592MHz _STC89C52RC
  2. void delay_ms(unsigned int n)
  3. {
  4.     unsigned int i,j;
  5.     for(i=n;i>0;i–)
  6.     for(y=114;y>0;y–);
  7. }
復(fù)制代碼
之前就學(xué)了點(diǎn),對(duì)于51單片機(jī)了解的也不多,就沒(méi)再研究過(guò)其他型號(hào)。直到前幾天一個(gè)同學(xué)要做東西,問(wèn)我會(huì)不會(huì)51,一想,這玩意我會(huì)呀,學(xué)STM32之前學(xué)過(guò)幾天,所以就答應(yīng)幫他看程序,但當(dāng)他把單片機(jī)拿過(guò)來(lái),燒好我寫的程序時(shí),怎么都跑不正確,有關(guān)延時(shí)的全部跑飛了。。。。。。。。。。
于是我就去查了資料,原來(lái)51分不同指令集,不同的型號(hào)指令執(zhí)行周期不同,而我拿到同學(xué)的是個(gè)STC12C5A系列的,屬于Y3指令集,它的一個(gè)振蕩周期=一個(gè)機(jī)器周期,管他一條指令消耗幾個(gè)狀態(tài)周期,這玩意兒速度自然比89系列(一個(gè)12個(gè)振蕩周期=一個(gè)機(jī)器周期)的快了10倍左右吧。
  1. void delay_ms(unsigned int k){
  2.         unsigned char i, j;
  3.         for(k; k>0; k--){        
  4.                 _nop_();
  5.                 i = 11,j = 190;
  6.                 do
  7.                 {
  8.                         while (--j);
  9.                 } while (--i);
  10.         }
  11. }
復(fù)制代碼
于是呢:我又在STC-ISP軟件生成了一個(gè)1ms的延時(shí)函數(shù),然后循環(huán)N次執(zhí)行,表面雖然解決了,但是呢每次循環(huán),還有首次循環(huán)賦值消耗的時(shí)間呢?
這中間得有至少2個(gè)以上周期了,那么時(shí)間長(zhǎng)了誤差不就越來(lái)越來(lái)了嗎,所以大家平時(shí)都是怎么控制延時(shí)的呢?


作者: 人人學(xué)會(huì)單片機(jī)    時(shí)間: 2022-5-1 11:45
1、假設(shè)在同一個(gè)硬件上做測(cè)試,單片機(jī)CPU指令周期是一致的。那么 變量i、K,存放在data跟存放在XDATA,讀寫速度能一樣?精確計(jì)算有意義嗎?
2、假設(shè)都存放在data,延遲1ms只需要char類型的變量即可完成,但是,延遲100ms必須16位變量,那么執(zhí)行時(shí)間還能照著公式去套算?
3、假設(shè)上述條件都一樣,計(jì)算好的延遲時(shí)間是1ms并且誤差1%,打開(kāi)中斷之后,延遲時(shí)間變成了5毫秒了。誤差500%了,精確計(jì)算有意義嗎?
4、假設(shè)上述條件不影響延遲時(shí)間,那么,編譯器呢?誰(shuí)敢說(shuō)編譯器不同的優(yōu)化等級(jí)不影響delay的延遲時(shí)間?
5、還有硬件不同的情況,就需要重新計(jì)算了。比如晶振頻率不同,CPU內(nèi)核速度不同,STC8H單片機(jī)就比STC15快了很多了比89系列快了十幾倍了。
實(shí)例說(shuō)明:
作者: Y_G_G    時(shí)間: 2022-5-1 12:09
void Delay_ms(unsigned int a)                //@12.000MHz,1mS延時(shí)函數(shù),代碼從STC下載器復(fù)制來(lái)
{
        unsigned char i, j;
        for(a;a>0;a--)
            {
                i = 16;
                j = 147;
                do
                {
                        while (--j);
                }         while (--i);
          }
}
從1mS到1秒,我都是用這個(gè)
誤差肯定是有的,但這重要嗎?
誤差不會(huì)很大的,不會(huì)是1S延時(shí)變成2S或者50S的,誤差肯定是在可以接受的范圍內(nèi)的
你都用軟件來(lái)進(jìn)行延時(shí)了,對(duì)精度本身就不會(huì)太大的要求了,你想軟件延時(shí)10S,誤差只有幾u(yù)S的,那得在這上面耗上多少精力?直接用定時(shí)器不就行了
高精度延時(shí)用軟件延時(shí),這就是把好鋼用在刀把上
高精度時(shí)間控制,都是用定時(shí)器完成的
延時(shí)很短的,直接用空指令
作者: jinsha_linux    時(shí)間: 2022-5-1 12:40
這邊基本都是基于定時(shí)器0 進(jìn)行高精度延時(shí)的
作者: lkc8210    時(shí)間: 2022-5-1 14:05
毫秒級(jí)延時(shí)直接用定時(shí)器
作者: 高高的白楊    時(shí)間: 2022-5-1 15:25
直接使用STC出的stc-isp軟件中的軟件延時(shí)計(jì)算器,計(jì)算可選項(xiàng)區(qū)分Y1、Y3、Y5及Y6,可以滿足樓主的需求。
作者: huangjingjie    時(shí)間: 2022-5-1 17:58
我理解的延時(shí)函數(shù)是滿足硬件指令間時(shí)間間隔的要求或是大概的延時(shí)要求用的,和時(shí)間精準(zhǔn)沒(méi)有因果關(guān)系。
作者: 啤酒瓶子老大    時(shí)間: 2022-5-1 22:50
我感覺(jué)還要用外接晶振的。不要用內(nèi)部晶振的。內(nèi)部的晶振每次燒錄時(shí)會(huì)有誤差。
作者: man1234567    時(shí)間: 2022-5-1 23:22
1、用定時(shí)器定時(shí)
2、用示波器校準(zhǔn)




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