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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于Delay組成的C語言語句問題

[復制鏈接]
跳轉到指定樓層
樓主
DelayMS(3800)   是3.8s,怎么跑了0.18s

IMG_20190930_172408.jpg (9.6 MB, 下載次數: 32)

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

使用道具 舉報

沙發
ID:275826 發表于 2019-10-4 12:11 | 只看該作者

DelayMS(3800)  誰說是3.8s,具體多長跟晶振和子程序函數都有關系
回復

使用道具 舉報

板凳
ID:619205 發表于 2019-10-4 14:34 | 只看該作者
Delay程式 延遲的時間和你所使用的指令週期與Delay方法有關我看你的圖片事阻塞式延遲,原理就是跑空指令,根據芯片不同每一個指令都需要花費數個指令週期
你的Delay在副程式中視兩個空的迴圈函數,裡面的for(i=0;i<y;i++) 中的y代表你每次執行會跑幾個空迴圈
,whie(x--) 中的x 是你可以輸入的變數,意思是你要跑幾次for迴圈 , 如果你輸入x,那你執行空迴圈的次數就是x*y次,如果你輸入x=3800那
,就是執行了3800*y次迴圈空迴圈.
如果使用這種方式來來完成Delay你可以去看你芯片執行指令需要多少時間來計算實際的延遲時間,會者用其他發法一個一個嘗試來確定執行1次for迴圈需要多久.
當然用這種方式時間不會太準確,如果時間要求精度高可以選擇使用TIM,或改用組合語言.

評分

參與人數 2黑幣 +90 收起 理由
機子單 + 30
admin + 60 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:616666 發表于 2019-10-4 14:38 | 只看該作者
有沒有大神,指導下,工作過程
回復

使用道具 舉報

5#
ID:155507 發表于 2019-10-4 18:12 | 只看該作者
機子單 發表于 2019-10-4 14:38
有沒有大神,指導下,工作過程

你可以參考這個

http://m.raoushi.com/bbs/dpj-4711-1.html
回復

使用道具 舉報

6#
ID:619372 發表于 2019-10-5 05:48 | 只看該作者
不是循環多少次就是多少秒的,可以直接搜delay()函數,可以查到很多常用的。
回復

使用道具 舉報

7#
ID:155507 發表于 2019-10-5 07:16 | 只看該作者
一、51單片機軟件延時:
1、 幾種周期介紹
  周期名稱
            描述
            時間
  
  振蕩
            單片機提供時鐘脈沖信號
  的振蕩源的周期
            T=1/f
  
  狀態
            振蕩周期經二分頻后得到
  的
            2T
  
  機器
            CPU 可以完成一個獨立操
  作所需要的周期
            12T
  
  指令
            指 CPU 完成一條操作所需
  的全部時間
            n*12T
  


2、指令:
1、MUL、DIV:僅有的 4 周期指令
2、包含 DPTR 和 PC 的指令均為 2 周期指令
3、所有的絕對跳轉和條件轉移指令,均為 2 周期指令
4、所有包括 A 寄存器的指令,均為單周期指令
5、位操作指令中,ANL 和 ORL 是 2 周期指令
6、所有包含立即地址的指令,除 INC direct 及 DEC direct 外,均為 2 周期指令
7、剩下的均為單周期指令。如:
void delay(uint z)
{
uint i ,j;
for(i = z; i> 0;i--)


for(j =0; j < 921; j++)
}


分析:
1.先計算你單片機的振蕩(時鐘)周期 T=1/晶振(11.0592MHZ)
2.一次 i--操作為 12T
3.忽略變量定義,上述延時函數共需時間:921*z*12T
4.帶入 T:921*12*T*z 約為 z us
3、計算誤差出現的原因:
1.軟件仿真時,函數調用的時候入棧出棧操作的耗時。
2.指令周期隨指令的不同而不同導致的誤差。
3.中斷的影響。
4.變量的范圍超過,從而與預計時間不一樣。


while(i--):如果 i 為 char 型,執行一次大概為 5us 左右;如果 i 為 int 型則執行一次大概為 10us 左右。注意:軟件延時通常用于時序要求較高的編程中,其它需延時較長的地方必須采用單片機內部定時器。

評分

參與人數 1黑幣 +12 收起 理由
機子單 + 12

查看全部評分

回復

使用道具 舉報

8#
ID:445775 發表于 2019-10-5 10:33 | 只看該作者
延時時間和單片機的時鐘頻率有關,可以去網上下載例如單片機小精靈之類的工具,不僅可以生成相對準確的延時,提供了波特率生成器等工具,簡單暴力
回復

使用道具 舉報

9#
ID:451448 發表于 2019-10-5 16:48 | 只看該作者
這個是跟你的CPU的執行速度有關,假如你用的CPU一毫秒能執行2條指令,那么循環體里面的數值為2時,代表執行一次這個函數所花的時間為1ms,數值為4的話,代表執行一次這個函數代表花費時間為2ms,依次來達到延時的目的,不過這種延時是不夠精準的,用在要求精度不高的事件
回復

使用道具 舉報

10#
ID:158375 發表于 2019-10-5 17:19 | 只看該作者
DelayMS(3800)   是3.8s,怎么跑了0.18s
  -----
  軟件延時,不太準確,與許多都有關系,例如中斷等等.....再說,DelayMS(3800) ,你咋確定是3.8S的?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表