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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

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

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

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

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

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:49404 發(fā)表于 2013-5-25 21:46 | 只看該作者

回帖獎(jiǎng)勵(lì) +2

延時(shí)怎么不計(jì)算跟精確一點(diǎn)?更精確是125751us
回復(fù)

使用道具 舉報(bào)

板凳
ID:53820 發(fā)表于 2013-8-31 09:25 | 只看該作者
謝謝分享!。。。
回復(fù)

使用道具 舉報(bào)

地板
ID:46675 發(fā)表于 2013-11-20 16:33 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

5#
ID:58052 發(fā)表于 2013-12-19 22:54 | 只看該作者
不錯(cuò)!很好
回復(fù)

使用道具 舉報(bào)

6#
無(wú)效樓層,該帖已經(jīng)被刪除
7#
ID:58513 發(fā)表于 2014-1-3 19:58 | 只看該作者
很詳細(xì),很全面,有匯編,有C語(yǔ)言,但有點(diǎn)轉(zhuǎn)不過來(lái)(原因 要學(xué)匯編,要學(xué)C 語(yǔ)言)
回復(fù)

使用道具 舉報(bào)

8#
ID:56867 發(fā)表于 2014-3-6 19:43 | 只看該作者
對(duì)我的論文寫作很有幫助。
回復(fù)

使用道具 舉報(bào)

9#
ID:59837 發(fā)表于 2014-3-20 17:16 | 只看該作者
我們?cè)O(shè)所用晶體震蕩器為12M,則一個(gè)機(jī)器周期就是1微秒      這個(gè)·怎么算??
回復(fù)

使用道具 舉報(bào)

10#
ID:59853 發(fā)表于 2014-3-20 21:26 | 只看該作者
厲害厲害
回復(fù)

使用道具 舉報(bào)

11#
ID:59987 發(fā)表于 2014-4-5 12:46 | 只看該作者
菜菜鳥愛單片機(jī) 發(fā)表于 2014-3-20 17:16
我們?cè)O(shè)所用晶體震蕩器為12M,則一個(gè)機(jī)器周期就是1微秒      這個(gè)·怎么算??

12MHZ的晶體振蕩器  意味著這個(gè)晶體振蕩器1秒鐘震蕩12000000次,也就是12000000個(gè)(高一下低一下),也就是脈沖。震蕩1次消耗的時(shí)間(也就是時(shí)鐘周期,其實(shí)就是換了個(gè)名稱)是
(1秒)/12000000=0.0000000833333333(秒),
一個(gè)機(jī)器周期=12個(gè)時(shí)鐘周期(規(guī)定的)
一個(gè)機(jī)器周期=12*0.000000083333333(秒)=0.000001(秒)=1(微秒)。
實(shí)際上計(jì)算不是這么復(fù)雜的。
樓主說(shuō) 6MHZ的晶振的機(jī)器周期是多少?
我是這么計(jì)算的
12*(1/6)       =   2us.
         M 的倒數(shù)  = us 微
其實(shí) 單位量綱中的 兆(M)和 微(us)互為倒數(shù)的原因。
我說(shuō)的不好的地方,希望大家批評(píng)指正。
回復(fù)

使用道具 舉報(bào)

12#
ID:59987 發(fā)表于 2014-4-5 13:53 | 只看該作者
復(fù)位電路不是很清楚
回復(fù)

使用道具 舉報(bào)

13#
ID:60228 發(fā)表于 2014-4-18 11:47 | 只看該作者
單片機(jī)上電是直流5v電壓,電容不是隔直通交嗎?為什么一上電電容就短路了?當(dāng)電容充完電之后不用放電嗎?復(fù)位電路還是有點(diǎn)不懂,希望樓主能給點(diǎn)建議,謝謝。
回復(fù)

使用道具 舉報(bào)

14#
ID:64206 發(fā)表于 2014-7-22 10:27 | 只看該作者
感謝樓主
回復(fù)

使用道具 舉報(bào)

15#
ID:64543 發(fā)表于 2014-7-29 20:15 | 只看該作者
謝謝分享。。。!
回復(fù)

使用道具 舉報(bào)

16#
ID:64634 發(fā)表于 2014-8-6 23:49 | 只看該作者
不太懂
回復(fù)

使用道具 舉報(bào)

17#
ID:64634 發(fā)表于 2014-8-7 12:48 | 只看該作者
不太懂
回復(fù)

使用道具 舉報(bào)

18#
無(wú)效樓層,該帖已經(jīng)被刪除
19#
ID:69838 發(fā)表于 2014-12-3 20:14 | 只看該作者
lixichunedu 發(fā)表于 2014-4-5 12:46
12MHZ的晶體振蕩器  意味著這個(gè)晶體振蕩器1秒鐘震蕩12000000次,也就是12000000個(gè)(高一下低一下),也就 ...

你這么一解釋,我就明白了
回復(fù)

使用道具 舉報(bào)

20#
ID:70004 發(fā)表于 2014-12-5 21:17 | 只看該作者
大師的深入淺出的講解
回復(fù)

使用道具 舉報(bào)

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

學(xué)過電路原理大家就知道,圖示電容的兩端電壓是逐漸從0V慢慢增長(zhǎng)到穩(wěn)定狀態(tài)時(shí)的電壓5V的,而不是直接躍變到5v。也就是說(shuō)RST引腳的電壓是從5V逐漸降到0v的。假設(shè)單片機(jī)認(rèn)為大于3V為高電平,也就是只要使RST引腳從5V降到3V的時(shí)間大于兩個(gè)機(jī)器周期的話,單片機(jī)就復(fù)位。右邊的圖同理。因?yàn)檫@個(gè)時(shí)間與電阻、電容大小有關(guān),所以復(fù)位電路中電阻值、電容值要精心選擇。
回復(fù)

使用道具 舉報(bào)

22#
ID:70294 發(fā)表于 2014-12-12 13:24 | 只看該作者
Soar_C 發(fā)表于 2014-12-10 16:04
學(xué)過電路原理大家就知道,圖示電容的兩端電壓是逐漸從0V慢慢增長(zhǎng)到穩(wěn)定狀態(tài)時(shí)的電壓5V的,而不是直接躍變 ...

還是不明白,RST引腳上的5V電壓是哪里來(lái)的?
回復(fù)

使用道具 舉報(bào)

23#
ID:67837 發(fā)表于 2014-12-16 21:08 | 只看該作者
努力學(xué)習(xí)中
回復(fù)

使用道具 舉報(bào)

24#
ID:70525 發(fā)表于 2014-12-18 20:01 | 只看該作者
初學(xué)者                 
回復(fù)

使用道具 舉報(bào)

25#
ID:70104 發(fā)表于 2014-12-20 12:28 | 只看該作者
學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

26#
ID:71621 發(fā)表于 2015-1-16 22:07 來(lái)自觸屏版 | 只看該作者
我覺得這個(gè)教程講解得深入淺出!贊一個(gè)!
回復(fù)

使用道具 舉報(bào)

27#
ID:71621 發(fā)表于 2015-1-16 22:07 來(lái)自觸屏版 | 只看該作者
多好的教程,相見恨晚啊!
回復(fù)

使用道具 舉報(bào)

28#
ID:72479 發(fā)表于 2015-1-20 17:07 | 只看該作者
本帖最后由 我就要飛刀 于 2015-1-20 17:15 編輯

DELAY:   MOV R7,#250   ;(6)
D1:   MOV R6,#250      ;(7)
D2:   DJNZ R6,D2      ;(8)
DJNZ R7,D1            ;(9)   
RE
按老師提示,我把這段改了一下
DELAY: MOV R7,#250 ;(6)
D1: MOV R6,#0   ;(7)
D2: DJNZ R6,D2     ;(8)
       DJNZ R7,D1  ;(9)
  好象看起來(lái)變化不大
再改成這樣:
DELAY: MOV R7,#1 ;(6)
D1: MOV R6,#250  ;(7)
D2: DJNZ R6,D2     ;(8)
       DJNZ R7,D1

明顯閃爍慢了很多。


回復(fù)

使用道具 舉報(bào)

29#
ID:75710 發(fā)表于 2015-3-30 20:30 | 只看該作者
對(duì)于正在學(xué)單片機(jī)的我來(lái)說(shuō),幫助很大,謝謝分享~\(≧▽≦)/~。。
回復(fù)

使用道具 舉報(bào)

30#
ID:75791 發(fā)表于 2015-4-1 10:21 | 只看該作者
感謝分享!
回復(fù)

使用道具 舉報(bào)

31#
ID:77323 發(fā)表于 2015-4-18 10:38 | 只看該作者
我就要飛刀 發(fā)表于 2015-1-20 17:07
DELAY:   MOV R7,#250   ;(6)
D1:   MOV R6,#250      ;(7)
D2:   DJNZ R6,D2      ;(8)

滿了嗎?
回復(fù)

使用道具 舉報(bào)

32#
ID:77323 發(fā)表于 2015-4-18 10:38 | 只看該作者
真的很好,真心的
回復(fù)

使用道具 舉報(bào)

33#
ID:78174 發(fā)表于 2015-4-29 22:49 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

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

在直流電剛上電時(shí),電容上是有電子移動(dòng)產(chǎn)生電流的 ,當(dāng)電容充電完成后相當(dāng)斷路
回復(fù)

使用道具 舉報(bào)

35#
ID:82423 發(fā)表于 2015-6-8 19:11 | 只看該作者
時(shí)序邏輯電路是什么
回復(fù)

使用道具 舉報(bào)

36#
ID:82423 發(fā)表于 2015-6-8 19:11 | 只看該作者
看不懂啊怎么辦
回復(fù)

使用道具 舉報(bào)

37#
無(wú)效樓層,該帖已經(jīng)被刪除
38#
ID:84645 發(fā)表于 2015-7-4 11:28 | 只看該作者
看的我手癢癢的
回復(fù)

使用道具 舉報(bào)

39#
ID:86884 發(fā)表于 2015-7-28 08:26 | 只看該作者
贊,剛開始學(xué)習(xí)單片機(jī)借了好多書發(fā)現(xiàn)都云里霧里的,這個(gè)資料感覺棒極了,以前C語(yǔ)言雖然學(xué)了,但糊里糊涂的,現(xiàn)在和匯編語(yǔ)言放一塊感覺慢慢理解了,太棒了,謝謝樓主。。!
回復(fù)

使用道具 舉報(bào)

40#
ID:87812 發(fā)表于 2015-8-7 13:44 | 只看該作者
ouyase 發(fā)表于 2014-12-12 13:24
**** 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽 ****

我個(gè)人覺得應(yīng)該是 VCC
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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