找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5874|回復: 39
打印 上一主題 下一主題
收起左側(cè)

幫忙看看這幾句代碼啥意思,謝謝 主要是那兩個for循環(huán)

  [復制鏈接]
回帖獎勵 2 黑幣 回復本帖可獲得 2 黑幣獎勵! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:373620 發(fā)表于 2018-7-19 16:42 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

主要是那兩個for循環(huán)啥意思,還有1141是咋來的
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

來自 2#
ID:375161 發(fā)表于 2018-7-19 22:10 | 只看該作者
毫秒延時函數(shù);但這個是粗略延時,思路是假設單片機執(zhí)行完一句代碼的時間是固定的,反復執(zhí)行就可以達到一個延時效果。這個有兩個循環(huán),外層i的循環(huán)是確定毫秒時間數(shù),內(nèi)層j的循環(huán)是為了讓多次循環(huán)湊夠1ms。1141是計算出來的,執(zhí)行一行代碼所畫的時間是根據(jù)單片機和晶振算出來的。具體怎么計算,百度搜索“51執(zhí)行一句代碼的時間如何計算?”我就不搬運了。

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

來自 3#
ID:375821 發(fā)表于 2018-7-20 14:29 | 只看該作者
上面大神都有回帖,我再補充一下,這個1141是根據(jù)晶振計算出一條命令的時間,延時程序轉(zhuǎn)化為匯編后,按匯編命令挨個的計算時間,最后就出來了,最后的結(jié)果是以匯編的命令計算出來的,精確要是用定時器

指令:

1、MUL、DIV:僅有的4周期指令

2、包含DPTR和PC的指令均為2周期指令

3、所有的絕對跳轉(zhuǎn)和條件轉(zhuǎn)移指令,均為2周期指令

4、所有包括A寄存器的指令,均為單周期指令

5、位操作指令中,ANL和ORL是2周期指令

6、所有包含立即地址的指令,除INC direct及DEC direct外,均為2周期指令

7、剩下的均為單周期指令。

_nop_函數(shù)可以在keil軟件的C51->HLP->C51lib.chm文檔中查閱

反推這個晶振應該是12M的




評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:250337 發(fā)表于 2018-7-19 18:53 | 只看該作者
延時函數(shù),執(zhí)行空操作 ,CPU在這里等待一段時間    1141應該是根據(jù)晶振大小計算出來的

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:375081 發(fā)表于 2018-7-19 19:06 | 只看該作者
這個應該是延時函數(shù),用兩個for循環(huán)來達到延時的目的
回復

使用道具 舉報

6#
ID:245937 發(fā)表于 2018-7-19 19:30 | 只看該作者
利用cpu的運行周期來計算出來的,CPU每一個運行周期的時間,是一樣的,可以利用它來做延時時間。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:155507 發(fā)表于 2018-7-19 19:36 | 只看該作者
這個是軟件延時程序,用兩個for循環(huán)來達到延時的目的,  1141應該是根據(jù)晶振大小計算出來的

軟件延時,這種方法主要采用循環(huán)體進行。
j加一次{;}就循環(huán)一次,當j=1141時就轉(zhuǎn)到while外循環(huán)中了

11.0592MHz 晶振的延時函數(shù)

這是一個1ms基準延時程序
//N ms延時
void delay_ms(uint n)
{
uint i,j;
for(i=n;i>0;i–)
for(y=114;y>0;y–);
}



在電子技術(shù)中,脈沖信號是一個按一定電壓幅度,一定時間間隔連續(xù)發(fā)出的脈沖信號。脈沖信號之間的時間間隔稱為周期;而將在單位時間(如1秒)內(nèi)所產(chǎn)生的脈沖個數(shù)稱為頻率。頻率是描述周期性循環(huán)信號(包括脈沖信號)在單位時間內(nèi)所出現(xiàn)的脈沖數(shù)量多少的計量名稱;頻率的標準計量單位是Hz(赫)。電腦中的系統(tǒng)時鐘就是一個典型的頻率相當精確和穩(wěn)定的脈沖信號發(fā)生器。

指令周期:CPU執(zhí)行一條指令所需要的時間稱為指令周期,它是以機器周期為單位的,指令不同,所需的機器周期也不同。對于一些簡單的的單字節(jié)指令,在取指令周期中,指令取出到指令寄存器后,立即譯碼執(zhí)行,不再需要其它的機器周期。對于一些比較復雜的指令,例如轉(zhuǎn)移指令、乘法指令,則需要兩個或者兩個以上的機器周期。通常含一個機器周期的指令稱為單周期指令,包含兩個機器周期的指令稱為雙周期指令。

時鐘周期:也稱為振蕩周期,一個時鐘周期 = 晶振的倒數(shù)。對于單片機時鐘周期,時鐘周期是單片機的基本時間單位,兩個振蕩周期(時鐘周期)組成一個狀態(tài)周期。

機器周期:單片機的基本操作周期,在一個操作周期內(nèi),單片機完成一項基本操作,如取指令、存儲器讀/寫等。

機器周期=6個狀態(tài)周期=12個時鐘周期。

51單片機的指令有單字節(jié)、雙字節(jié)和三字節(jié)的,它們的指令周期不盡相同,一個單周期指令包含一個機器周期,即12個時鐘周期,所以一條單周期指令被執(zhí)行所占時間為12*(1/ 晶振頻率)= x μs。常用單片機的晶振為11.0592MHz,12MHz,24MHz。其中11.0592MHz的晶振更容易產(chǎn)生各種標準的波特率,后兩種的一個機器周期分別為1 μs和2 μs,便于精確延時。

回復

使用道具 舉報

8#
ID:375094 發(fā)表于 2018-7-19 19:44 | 只看該作者
這兩個循環(huán)是延時函數(shù)的算法,因為要簡化計算所以弄了兩個循環(huán),ms乘以1141就是可以延時的時間,1141是可以自己改的,決定于你想要延時的時間多少

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

9#
ID:375160 發(fā)表于 2018-7-19 21:36 | 只看該作者
通過語句循環(huán),浪費時間來,來實現(xiàn)延時

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

10#
ID:372402 發(fā)表于 2018-7-20 09:14 | 只看該作者
兩個for語句是用來延時的,至于你說的數(shù)字1141則是根據(jù)你要延時多久算出來的,這個要看你用的晶振頻率算出CPU的時鐘周期,最終確定這個數(shù)字的。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

11#
ID:350999 發(fā)表于 2018-7-20 10:59 | 只看該作者
for語句的嵌套,第一個for后面沒有分號,編譯器認為第二個for是第一個for的內(nèi)部語句,而第二個for語句內(nèi)部語句為空,程序自行的時候,第一個加一次,第二個執(zhí)行1141次。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

12#
ID:144356 發(fā)表于 2018-7-20 11:26 | 只看該作者
延時用的,程序運行到這里時會卡住一定的時間,時間過后才會繼續(xù)往下走,你可以下載一個

單片機小精靈v1.3

里面可以根據(jù)晶振大小直接計算

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

13#
ID:375685 發(fā)表于 2018-7-20 11:34 | 只看該作者
延時函數(shù),單片機在這里等待一段時間    1141應該是根據(jù)晶振或單片機內(nèi)置RC大小計算出來的

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

14#
ID:375758 發(fā)表于 2018-7-20 12:56 | 只看該作者
延時函數(shù)
回復

使用道具 舉報

15#
ID:375800 發(fā)表于 2018-7-20 13:46 | 只看該作者
延時程序,for是嵌套循環(huán)的用法。1141這個參數(shù)是根據(jù)實際的單片機的時鐘,通過調(diào)試測試得來的1ms,不一定適用于你自己的硬件系統(tǒng)。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

16#
ID:375818 發(fā)表于 2018-7-20 14:05 | 只看該作者
延時函數(shù)
回復

使用道具 舉報

17#
ID:375818 發(fā)表于 2018-7-20 14:05 | 只看該作者
毫秒延時用的,不準
回復

使用道具 舉報

18#
ID:375829 發(fā)表于 2018-7-20 14:11 | 只看該作者
毫秒延時程序模塊
回復

使用道具 舉報

19#
ID:316181 發(fā)表于 2018-7-20 14:27 | 只看該作者
通過執(zhí)行ms*1141這么多條空語句來實現(xiàn)延時,延時時間由晶振頻率和單片機執(zhí)行效率決定,并不是所有的都是1141為1ms

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

20#
ID:375868 發(fā)表于 2018-7-20 14:42 | 只看該作者
用空指令來消耗時間,本質(zhì)上上就是一個延時函數(shù)。
回復

使用道具 舉報

21#
ID:353216 發(fā)表于 2018-7-20 14:52 | 只看該作者
粗略計時
回復

使用道具 舉報

22#
ID:304011 發(fā)表于 2018-7-20 15:16 | 只看該作者
for循環(huán)是用于延時
回復

使用道具 舉報

23#
ID:375911 發(fā)表于 2018-7-20 15:21 | 只看該作者
毫秒延時程序模塊時間不準,要看指令時鐘頻率
回復

使用道具 舉報

24#
ID:373270 發(fā)表于 2018-7-20 15:31 | 只看該作者
兩個for循環(huán)搭建延時函數(shù),通過占用CPU時間執(zhí)行加減運算達到延時的目的,1141是根據(jù)板子晶振周期計算而出,一般不用改,延時的長短通過給ms取不同值實現(xiàn)。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

25#
ID:368431 發(fā)表于 2018-7-20 15:43 | 只看該作者
延遲用的東西
回復

使用道具 舉報

26#
ID:375938 發(fā)表于 2018-7-20 15:48 | 只看該作者
用來延時的
回復

使用道具 舉報

27#
ID:375964 發(fā)表于 2018-7-20 16:05 | 只看該作者
延時函數(shù),1141一般是試出來的
回復

使用道具 舉報

28#
ID:375979 發(fā)表于 2018-7-20 16:19 | 只看該作者
就一個延時函數(shù),主要是靠運行的次數(shù)來延時的,而是延時精準度不高
回復

使用道具 舉報

29#
ID:376008 發(fā)表于 2018-7-20 16:40 | 只看該作者
應該是程序問題
回復

使用道具 舉報

30#
ID:376008 發(fā)表于 2018-7-20 16:40 | 只看該作者
程序有些問題
回復

使用道具 舉報

31#
ID:376024 發(fā)表于 2018-7-20 16:51 | 只看該作者
延時,函數(shù)執(zhí)行需要時間,根據(jù)給的不同數(shù)字,它運行的時候就相當于把你循環(huán)運行的時間當延時用
回復

使用道具 舉報

32#
ID:376026 發(fā)表于 2018-7-20 16:54 | 只看該作者
延時語句,沒啥具體用處
回復

使用道具 舉報

33#
ID:370510 發(fā)表于 2018-7-21 15:27 | 只看該作者

延時程序,for是嵌套循環(huán),要求不高
用while(i--)就可以吧
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

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