找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 75433|回復(fù): 107
打印 上一主題 下一主題
收起左側(cè)

5課:單片機(jī)延時程序分析

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
ID:1 發(fā)表于 2013-5-21 02:48 | 只看該作者 |只看大圖 回帖獎勵 |正序瀏覽 |閱讀模式
上一次課中,我們已經(jīng)知道,程序中的符號R7、R6是代表了一個個的RAM單元,是用來放一些數(shù)據(jù)的,下面我們再來看一下其它符號的含義。
DELAY:   MOV R7,#250   ;(6)
D1:   MOV R6,#250      ;(7)
D2:   DJNZ R6,D2      ;(8)
DJNZ R7,D1            ;(9)   
RET                ;(10)

〈單片機(jī)延時程序〉
  MOV:這是一條指令,意思是傳遞數(shù)據(jù)。說到傳遞,我們都很清楚,傳東西要從一本人的手上傳到另一本人的手上,也就是說要有一個接受者,一個傳遞者和一樣?xùn)|西。從指令MOV R7,#250中來分析,R7是一個接受者,250是被傳遞的數(shù),傳遞者在這條指令中被省略了(注意:并不是每一條傳遞指令都會省的,事實上大部份數(shù)據(jù)傳遞指令都會有傳遞者)。它的意義也很明顯:將數(shù)據(jù)250送到R7中去,因此執(zhí)行完這條指令后,R7單元中的值就應(yīng)當(dāng)是250。在250前面有個#號,這又是什么意思呢?這個#就是用來說明250就是一個被傳遞的東西本身,而不是傳遞者。那么MOV R6,#250是什么意思,應(yīng)當(dāng)不用分析了吧。
  DJNZ:這是另一條指令,我們來看一下這條指令后面跟著的兩個東西,一個是R6,一個是D2,R6我們當(dāng)然已知是什么了,查一下D2是什么。D2在本行的前面,我們已學(xué)過,這稱之為標(biāo)號。標(biāo)號的用途是什么呢?就是給本行起一個名字。DJNZ指令的執(zhí)行過程是這樣的,它將其后面的第一個參數(shù)中的值減1,然后看一下,這個值是否等于0,如果等于0,就往下執(zhí)行,如果不等于0,就轉(zhuǎn)移,轉(zhuǎn)到什么地方去呢?可能大家已猜到了,轉(zhuǎn)到第二個參數(shù)所指定的地方去(請大家用自已的話講一下這條語句是怎樣執(zhí)行的)。本條指令的最終執(zhí)行結(jié)果就是,在原地轉(zhuǎn)圈250次。
  執(zhí)行完了DJNZ R6,D2之后(也就是R6的值等于0之后),就會去執(zhí)行下面一行,也就是DJNZ R7,D1,請大家自行分析一下這句話執(zhí)行的結(jié)果。(轉(zhuǎn)去執(zhí)行MOV R6,#250,同時R7中的值減1),最終DJNZ R6,D2這句話將被執(zhí)行250*250=62500次,執(zhí)行這么多次同一條指令干嗎?就是為了延時。
一個問題:如果在R6中放入0,會有什么樣的結(jié)果。
二、時序分析:
  前面我們介紹了延時程序,但這還不完善,因為,我們只知道DJNZ R6,D2這句話會被執(zhí)行62500次,但是執(zhí)行這么多次需要多長時間呢?是否滿足我們的要求呢?我們還不知道,所以下面要來解決這個問題。
  先提一個問題:我們學(xué)校里什么是最重要的。(鈴聲)校長能出差,老師能休息,但學(xué)校一日無鈴聲必定大亂。整個學(xué)校就是在鈴聲的統(tǒng)一指揮下,步調(diào)一致,統(tǒng)一協(xié)調(diào)地工作著。這個鈴是按一定的時間安排來響的,我們能稱之為“時序��時間的次序”。一個由人組成的單位尚且要有一定的時序,計算機(jī)當(dāng)然更要有嚴(yán)格的時序。事實上,計算機(jī)更象一個大鐘,什么時候分針動,什么時候秒針動,什么時候時針動,都有嚴(yán)格的規(guī)定,一點也不能亂。計算機(jī)要完成的事更復(fù)雜,所以它的時序也更復(fù)雜。
  我們已知,計算機(jī)工作時,是一條一條地從ROM中取指令,然后一步一步地執(zhí)行,我們規(guī)定:計算機(jī)訪問一次存儲器的時間,稱之為一個機(jī)器周期。這是一個時間基準(zhǔn),好象我們?nèi)擞谩懊搿弊鳛槲覀兊臅r間基準(zhǔn)一樣,為什么不干脆用“秒”,多好,很習(xí)慣,學(xué)下去我們就會知道用“秒”反而不習(xí)慣。
一個機(jī)器周期包括12個時鐘周期。下面讓我們算一下一個機(jī)器周期是多長時間吧。設(shè)一個單片機(jī)工作于12M晶體震蕩器,它的時鐘周期是1/12(微秒)。它的一個機(jī)器周期是12*(1/12)也就是1微秒。(請計算一個工作于6M晶體震蕩器的單片機(jī),它的機(jī)器周期是多少)。
  MCS-51單片機(jī)的所有指令中,有一些完成得比較快,只要一個機(jī)器周期就行了,有一些完成得比較慢,得要2個機(jī)器周期,還有兩條指令要4個機(jī)器周期才行。這也不難再解,不是嗎?我讓你掃地的執(zhí)行要完成總得比要你完成擦黑板的指令時間要長。為了恒量指令執(zhí)行時間的長短,又引入一個新的概念:指令周期。所謂指令周期就是指執(zhí)行一條指令的時間。INTEL對每一條指令都給出了它的指令周期數(shù),這些數(shù)據(jù),大部份不需要我們?nèi)ビ洃,但是有一些指令是需要記住的,如DJNZ指令是雙周期指令。
  下面讓我們來計算剛才的延時。首先必須要知道晶體震蕩器的頻率,我們設(shè)所用晶體震蕩器為12M,則一個機(jī)器周期就是1微秒。而DJNZ指令是雙周期指令,所以執(zhí)行一次要2個微秒。一共執(zhí)行62500次,正好125000微秒,也就是125毫秒。
如果你對上面幾句還是不懂請看這里的詳解:http://www.torrancerestoration.com/mcu/1247.html
關(guān)于用C語言寫延時函數(shù)的詳解請看這:http://www.torrancerestoration.com/mcu/710.html
練習(xí):設(shè)計一個延時100毫秒的延時程序。
要點分析:1、一個單元中的數(shù)是否能超過255。2、如何分配兩個數(shù)。
三、復(fù)位電路
一、復(fù)位方式
⒈ 復(fù)位條件
        RST引腳保持2個機(jī)器周期以上的高電平。
⒉ 復(fù)位電路

〈單片機(jī)復(fù)位電路〉
⒊ 復(fù)位后CPU狀態(tài)
       PC:  0000H         TMOD: 00H
       Acc: 00H           TCON: 00H
       B:   00H           TH0:  00H
       PSW: 00H           TL0:  00H
       SP:  07H           TH1:  00H
       DPTR:0000H         TL1:  00H
       P0~P3:FFH         SCON: 00H
       IP:×××00000B    SBUF: 不定
       IE:0××00000B     PCON: 0×××0000B
  任何單片機(jī)在工作之前都要有個復(fù)位的過程,復(fù)位是什么意思呢?它就象是我們上課之前打的預(yù)備鈴。預(yù)備鈴一響,大家就自動地從操場、其它地方進(jìn)入教室了,在這一段時間里,是沒有老師干預(yù)的,對單片機(jī)來說,是程序還沒有開始執(zhí)行,是在做準(zhǔn)備工作。顯然,準(zhǔn)備工作不需要太長的時間,復(fù)位只需要5ms的時間就能了。如何進(jìn)行復(fù)位呢?只要在單片機(jī)的RST管腳上加上高電平,就能了,按上面所說,時間不少于5ms。為了達(dá)到這個要求,能用很多種辦法,這里供給一種供參考,見圖1。實際上,我們在上一次實驗的圖中已見到過了。
  這種復(fù)位電路的工作原理是:通電時,電容兩端相當(dāng)于是短路,于是RST管腳上為高電平,然后電源通過電阻對電容充電,RST端電壓慢慢下降,降到一定程序,即為低電平,單片機(jī)開始正常工作。

下一課:6課:單片機(jī)并行口結(jié)構(gòu)

評分

參與人數(shù) 6黑幣 +33 收起 理由
zbfdyw + 8 簡單明了,初步學(xué)習(xí)好資料!感謝admin,感.
水木易安 + 5 贊一個!
yida1698 + 5 贊一個!
路神 + 5 很給力!
么么小輝 + 5 很給力!
chen_zhouge + 5 很給力!

查看全部評分

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

使用道具 舉報

105#
ID:866313 發(fā)表于 2024-1-6 15:54 | 只看該作者
LED閃爍程序如下:
  1. ;外設(shè)端口切換寄存器 2 的地址
  2. P_SW2   DATA    0BAH

  3. ;端口模式配置寄存器的地址
  4. P1M0    DATA    092H
  5. P1M1    DATA    091H

  6.         ORG     0000H
  7.         LJMP    MAIN
  8.         ORG     0100H

  9. ; 主程序:
  10. MAIN:
  11.     MOV SP, #5FH
  12.     ORL P_SW2,#80H ;使能訪問 XFR
  13.    
  14.     MOV P1M0, #00H
  15.     MOV P1M1, #00H
  16.    
  17.     MOV P1M0, #08H ;設(shè)置 P1.3 為推挽輸出模式
  18.     MOV P1M1, #00H
  19.    
  20.     LJMP    LOOP

  21. ; 循環(huán)
  22. LOOP:
  23.     SETB P1.3       ; (1) P1.3 口輸出高電平,點亮小燈
  24.     LCALL DELAY_1S  ; (2) 延時一段時間
  25.     CLR P1.3        ; (3) P1.3 口輸出低電平,熄滅小燈
  26.     LCALL DELAY_1S  ; (4) 延時一段時間
  27.     AJMP LOOP       ; (5) 跳轉(zhuǎn)到第一句 LOOP 處

  28. ;====================延時1秒子程序====================
  29. DELAY_1S:         ;延時子程序,12MHz晶振延時1.002035秒
  30.     MOV R4, #10   ;1指令周期
  31.    
  32. L3:
  33.     MOV R2, #200  ;1指令周期
  34.    
  35. L1:
  36.     MOV R3, #249  ;1指令周期
  37.     L2:
  38.         DJNZ R3, L2     ;2指令周期
  39.    
  40.     DJNZ R2, L1          ;2指令周期
  41.     DJNZ R4, L3          ;2指令周期
  42.    
  43.     RET                      ;2指令周期
  44. ;循環(huán)體延時時間: [(249*2+1+2)*200+1+2]*10*12/12000000=1.002032s
  45. ;加上LCALL指令和第一條MOV指令以及最后一條RET指令算出來整個函數(shù)的時間為1.002035s
  46. ;=====================================================

  47. END
復(fù)制代碼

燒錄到 STC8H8K64U 芯片中,使用的時鐘頻率是 1MHz,這個頻率是 12MHz 的 1/12

LED小燈點亮1秒鐘、熄滅1秒鐘、點亮1秒鐘、熄滅1秒鐘……閃爍

回復(fù)

使用道具 舉報

104#
ID:1050091 發(fā)表于 2022-11-1 21:14 | 只看該作者
lixichunedu 發(fā)表于 2014-4-5 12:46
12MHZ的晶體振蕩器  意味著這個晶體振蕩器1秒鐘震蕩12000000次,也就是12000000個(高一下低一下),也就 ...

了解謝謝
回復(fù)

使用道具 舉報

103#
ID:770193 發(fā)表于 2022-6-17 11:35 | 只看該作者
引用樓主:這種復(fù)位電路的工作原理是:通電時,電容兩端相當(dāng)于是短路,于是RST管腳上為高電平,然后電源通過電阻對電容充電,RST端電壓慢慢下降,降到一定程序,即為低電平,單片機(jī)開始正常工作。
自己理解:對電容充電,使得電容從0v-3.5v轉(zhuǎn)變,電阻上面分得的電壓從5v到1.5下降,當(dāng)5V,RST是高電平,默認(rèn)開啟復(fù)位,當(dāng)小于等于1.5V默認(rèn)位低電平,RST腳不能動作;
我想請問樓主,為什么是充電到3.5V?  
回復(fù)

使用道具 舉報

102#
ID:866313 發(fā)表于 2020-12-29 16:06 | 只看該作者
從生活中的平常事入手,將單片機(jī)中的知識點和概念講解理解起來非常輕松啊,謝謝
回復(fù)

使用道具 舉報

101#
ID:149799 發(fā)表于 2019-6-26 09:22 | 只看該作者
好貼,樓主繼續(xù)講解下一個,謝謝。
回復(fù)

使用道具 舉報

100#
ID:380170 發(fā)表于 2019-3-22 06:37 | 只看該作者
簡單明了,初步學(xué)習(xí)好資料!感謝admin,感.
回復(fù)

使用道具 舉報

99#
ID:400832 發(fā)表于 2018-10-10 16:06 | 只看該作者
菜菜鳥愛單片機(jī) 發(fā)表于 2014-3-20 17:16
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****

一個機(jī)器周期等于12個時鐘周期,12M的時鐘周期等于1/12微秒,所以12M的機(jī)器周期等于1微秒
回復(fù)

使用道具 舉報

98#
ID:401204 發(fā)表于 2018-9-23 17:26 | 只看該作者
樓主寫程序時最好寫完整的程序比如頭文件等,因為只寫一段程序初學(xué)者會誤解的,自己寫的時候照你的抄結(jié)果搞半天搞不出
回復(fù)

使用道具 舉報

97#
ID:379308 發(fā)表于 2018-8-29 20:39 | 只看該作者
請問設(shè)計100ms的延時單元中的數(shù)分配法則是啥啊
回復(fù)

使用道具 舉報

96#
ID:330769 發(fā)表于 2018-7-1 15:07 | 只看該作者
非常感想,講的很通俗,一下子就看懂了
回復(fù)

使用道具 舉報

95#
ID:93625 發(fā)表于 2018-6-25 15:55 | 只看該作者
除了主貼的內(nèi)容,下面回復(fù)的內(nèi)容也有助于理解主貼的內(nèi)容。
回復(fù)

使用道具 舉報

94#
ID:327434 發(fā)表于 2018-5-21 17:31 | 只看該作者
有點懵
回復(fù)

使用道具 舉報

93#
ID:335016 發(fā)表于 2018-5-21 16:56 | 只看該作者
很給力!
回復(fù)

使用道具 舉報

92#
ID:313192 發(fā)表于 2018-4-21 20:42 | 只看該作者
第五課,又學(xué)習(xí)了
回復(fù)

使用道具 舉報

91#
ID:249545 發(fā)表于 2018-4-15 10:10 | 只看該作者
感謝老師詳講延時時序.
回復(fù)

使用道具 舉報

90#
ID:305511 發(fā)表于 2018-4-12 23:11 | 只看該作者
前面哪里有講啦R6和R7是什么?
回復(fù)

使用道具 舉報

89#
ID:252798 發(fā)表于 2018-3-14 19:49 | 只看該作者
菜菜鳥愛單片機(jī) 發(fā)表于 2014-3-20 17:16
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****

12MHZ 即12M次1秒,12次為1US,一個機(jī)器周期為12個時鐘周期,所以一個機(jī)器周期為1US。
回復(fù)

使用道具 舉報

88#
ID:286876 發(fā)表于 2018-3-2 11:09 | 只看該作者
需要學(xué)習(xí)
回復(fù)

使用道具 舉報

87#
ID:276348 發(fā)表于 2018-1-16 20:19 | 只看該作者
這節(jié)講的命令對于相應(yīng)引腳的作用和復(fù)位過程。
回復(fù)

使用道具 舉報

86#
ID:263209 發(fā)表于 2017-12-26 18:41 | 只看該作者
練習(xí)
DELAY: MOV R7 #199;
D1: MOV R6 #245;
D2:DJNZ R6,D2;
DJNZ R7,D1;
RET
回復(fù)

使用道具 舉報

85#
ID:263209 發(fā)表于 2017-12-26 18:37 | 只看該作者
練習(xí):DELAY: MOV R7 #199
回復(fù)

使用道具 舉報

84#
ID:259811 發(fā)表于 2017-12-12 16:54 來自手機(jī) | 只看該作者
Soar_C 發(fā)表于 2014-12-10 16:04
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****

怎么算從5V降到3V所需要的時間?
回復(fù)

使用道具 舉報

83#
ID:247636 發(fā)表于 2017-11-16 11:49 來自手機(jī) | 只看該作者
謝謝樓主分享的資料
回復(fù)

使用道具 舉報

82#
ID:243806 發(fā)表于 2017-10-29 00:14 | 只看該作者
很詳細(xì)

很詳細(xì)
回復(fù)

使用道具 舉報

81#
ID:68875 發(fā)表于 2017-10-22 23:27 | 只看該作者
不錯!很好
回復(fù)

使用道具 舉報

80#
ID:237917 發(fā)表于 2017-10-9 13:24 | 只看該作者
如果在R6中放入0,會有什么樣的結(jié)果。 就是執(zhí)行250次
回復(fù)

使用道具 舉報

79#
ID:237917 發(fā)表于 2017-10-9 13:22 | 只看該作者
請大家用自已的話講一下這條語句是怎樣執(zhí)行的:第(8)句就是,R6=250,執(zhí)行減1,等于249,不等于0,轉(zhuǎn)移到D2;此時的D2里的R6=249,減1,等于248,不等于0,轉(zhuǎn)移到D2……如此以往,到底250次,R6=0,執(zhí)行下一行也就是(9),而(9)也是同樣的原理,轉(zhuǎn)移到D1再執(zhí)行D2,最終結(jié)果就是原地轉(zhuǎn)圈250(R7由250每次減1減到0) x 250(R由250每次減1減到0)次
回復(fù)

使用道具 舉報

78#
ID:165330 發(fā)表于 2017-10-8 20:15 | 只看該作者
不錯
回復(fù)

使用道具 舉報

77#
ID:165330 發(fā)表于 2017-10-8 20:14 | 只看該作者
牛逼。。。。
回復(fù)

使用道具 舉報

76#
ID:231625 發(fā)表于 2017-9-20 16:13 | 只看該作者
70樓應(yīng)該是正解,按70樓講解能多少明白點,為什么一上電就是高電平;41樓解釋了程序恢復(fù)后的理解,就是當(dāng)電流不動時,又恢復(fù)低電平
回復(fù)

使用道具 舉報

75#
ID:231625 發(fā)表于 2017-9-20 15:02 | 只看該作者

單片機(jī)上電是直流5v電壓,電容不是隔直通交嗎?為什么一上電電容就短路了?當(dāng)電容充完電之后不用放電嗎,放電如何確定正負(fù)極,
回復(fù)

使用道具 舉報

74#
ID:216466 發(fā)表于 2017-8-19 10:40 | 只看該作者
ivmmcu 發(fā)表于 2014-4-18 11:47
單片機(jī)上電是直流5v電壓,電容不是隔直通交嗎?為什么一上電電容就短路了?當(dāng)電容充完電之后不用放電嗎?復(fù) ...

電容元件的特征就是 先有電流再有電壓,電容加載電源時,理論電流無限大電壓零。
跟電感元件的特征剛好相反。
回復(fù)

使用道具 舉報

73#
ID:223571 發(fā)表于 2017-8-16 11:39 | 只看該作者
     RST引腳保持2個機(jī)器周期以上的高電平可以復(fù)位,是不是頻率不同的晶振,這2個周期的時間也不一樣呀?
回復(fù)

使用道具 舉報

72#
ID:223571 發(fā)表于 2017-8-16 10:16 | 只看該作者
一個問題:如果在R6中放入0,會有什么樣的結(jié)果。結(jié)果是該程序只執(zhí)行250次
回復(fù)

使用道具 舉報

71#
ID:209085 發(fā)表于 2017-6-8 09:55 | 只看該作者
thanks for sharing
回復(fù)

使用道具 舉報

70#
ID:198528 發(fā)表于 2017-5-9 11:01 來自手機(jī) | 只看該作者
什么叫一個單元中的數(shù)...
回復(fù)

使用道具 舉報

69#
ID:196530 發(fā)表于 2017-5-4 16:21 | 只看該作者
ivmmcu 發(fā)表于 2014-4-18 11:47
單片機(jī)上電是直流5v電壓,電容不是隔直通交嗎?為什么一上電電容就短路了?當(dāng)電容充完電之后不用放電嗎?復(fù) ...

單片機(jī)上電瞬間相當(dāng)于是交流電,頻率為無窮大,根據(jù)隔直通交,上電瞬間電容導(dǎo)通,約等于電容短路,復(fù)位端出現(xiàn)高電平。電路后續(xù)通過串聯(lián)電阻放電使復(fù)位端回到低電平。
回復(fù)

使用道具 舉報

68#
ID:196530 發(fā)表于 2017-5-4 16:11 | 只看該作者
復(fù)位電路的電容大小是如何確定的?是否跟電路的時間常數(shù)有關(guān)系?
回復(fù)

使用道具 舉報

67#
ID:153611 發(fā)表于 2017-5-3 18:00 來自手機(jī) | 只看該作者
C2作用是什么?
回復(fù)

使用道具 舉報

66#
ID:139165 發(fā)表于 2017-4-1 14:12 | 只看該作者
li hai
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表