久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5848|回復: 0
打印 上一主題 下一主題
收起左側

延時程序時間精度的深度分析

[復制鏈接]
跳轉到指定樓層
樓主
ID:24072 發表于 2010-5-28 11:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

對于需要精確計時的場景,用C語言開發單片機應用就有些困難了,本文將在開源軟件SDCC環境下對延時程序進行深入分析,不正確的地方請大家指正。

 

首先是單片機的三個周期: 

  • 時鐘周期Tosc=1/f_osc,如采用f_osc=11.0592MHz時,Tosc=1/(11.0592*1000*1000)=0.090422us,或者更直接Tosc=1/11.0592=0.090422us
  • 機器周期Tcy=12*Tosc,如果f_osc=11.0592MHz,則Tcy=12*Tosc=12*0.090422us=1.085us
  • 指令周期通常為124個機器周期。注意在SDCC for 8051中,int的長度為16。

先看這個延時程序代碼:

void delay(unsigned int val)
{
    unsigned int j = 0;
    for (; val>0; val--)
    {
        for (j=0; j<125; j++)
        {
            ;
        }
    }
}

 

通過SDCC對其進行編譯,生成*.asm(sdcc -c *.c)。雖然我們可以使用C語言開發單片機應用,但是并不代表我們不需要掌握匯編語言,在很多場合下雖然不需要我們編寫匯編語言代碼,但是看懂編譯器生成的匯編語言代碼的能力還是需要具備的。

 

 

_delay:

ar2 = 0x02

ar3 = 0x03

ar4 = 0x04

ar5 = 0x05

ar6 = 0x06

ar7 = 0x07

ar0 = 0x00

ar1 = 0x01

mov r2,dpl ; 寄存器尋址方式,將DPTR低字節存入r2中,2個機器周期

mov r3,dph; 寄存器尋址方式,將DPTR低字節存入r3中,2個機器周期

; comm.c:7: unsigned int j = 0;

00104$:

; comm.c:8: for (; val>0; val--)

mov a,r2; 寄存器尋址,2個機器周期

orl a,r3; r3a進行邏輯或操作,1個機器周期

jz 00110$; 如果是零,則將r40,并傳給a,在jz 00108$將跳到結束,2個機器周期

mov r4,#0x01; 否則執行內循環,立即數尋址,1個機器周期

sjmp 00111$; 短無條件跳轉指令,2個機器周期

00110$:

movr4,#0x00; 立即數尋址,1個機器周期

00111$:

mov a,r4; 寄存器尋址,2個機器周期

jz 00108$; 判斷外循環是否結束,2個機器周期

; comm.c:10: for (j=0; j<125; j++)

mov r4,#0x7D; 0x7D125,立即數尋址,1個機器周期

mov r5,#0x00; 立即數尋址,1個機器周期

00103$:

dec r4; 把內循環改為for (j=125; j>0; j--)了,寄存器尋址,1個機器周期

cjne r4,#0xff,00121$; r40xff比較,不等于轉移到00121$處,等于時表明需要向上借位,2個機

                                ; 器周期

dec r5; 寄存器尋址,1個機器周期

00121$:

mov a,r4; 寄存器尋址,2個機器周期

orl a,r5; r3a進行邏輯或操作,1個機器周期

jnz 00103$; 不為零轉到內循環開始處,2個機器周期

; comm.c:8: for (; val>0; val--)

dec r2; 寄存器尋址,1個機器周期

cjne r2,#0xff,00123$; 判斷是非需要借位,2個機器周期

dec r3; 寄存器尋址,1個機器周期

00123$:

sjmp 00104$; 短無條件跳轉指令,2個機器周期

00108$:

ret; 2個機器周期


val*34+2個機器周期,如果采用f_osc=11.0592MHz晶振,機器周期Tcy=1.085us,則delay函數的精度為(1*34+2)*1.085us=39.06us

 

 

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天操夜夜操 | 日本大香伊一区二区三区 | 99精品国产一区二区青青牛奶 | 亚洲精品第一页 | 亚洲国产精品一区二区www | 毛片免费看 | 久草视频在线看 | 欧美成年人 | 色婷婷精品国产一区二区三区 | 91九色麻豆 | 一级做a爰片性色毛片16美国 | 三a毛片 | 国产精品视频在线观看 | 国产福利在线播放麻豆 | 欧美黄色片在线观看 | 日韩三级电影一区二区 | 999久久久精品 | 日本韩国欧美在线观看 | 色在线免费 | 国产成人免费在线观看 | 亚洲视频一区二区三区 | 天天操天天射综合 | 亚洲视频在线一区 | 亚洲成人一区 | 成人av观看 | 国产精品视频在线播放 | 久久不卡视频 | 国产成人久久精品一区二区三区 | 91在线电影 | 精品欧美一区二区三区久久久 | 欧美一级片在线看 | 国产中文区二幕区2012 | 成人一区av偷拍 | 国产日韩欧美在线 | 精品国产一区二区三区久久久蜜月 | 天天影视网天天综合色在线播放 | 国产精品一区二区不卡 | 成人在线视频一区 | 色伊人久久| 精品国产一区二区三区性色av | 91精品在线播放 |