www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]延時程序在單片機編程中使用非常廣泛,但一些讀者在學(xué)習中不知道延時程序怎么編程,不知道機器周期和指令周期的區(qū)別,不知道延時程序指令的用法, ,本文就此問題從延時程序的基本概念、機器周期和指令周期的區(qū)別和聯(lián)系、相關(guān)指令的用法等用圖解法的形式詳盡的回答讀者

延時程序在單片機編程中使用非常廣泛,但一些讀者在學(xué)習中不知道延時程序怎么編程,不知道機器周期和指令周期的區(qū)別,不知道延時程序指令的用法, ,本文就此問題從延時程序的基本概念、機器周期和指令周期的區(qū)別和聯(lián)系、相關(guān)指令的用法等用圖解法的形式詳盡的回答讀者

我們知道程序設(shè)計是單片機開發(fā)最重要的工作,而程序在執(zhí)行過程中常常需要完成延時的功能。例如

在交通燈的控制程序中,需要控制紅燈亮的時間持續(xù)30秒,就可以通過延時程序來完成。延時程序是如何實現(xiàn)的呢?下面讓我們先來了解一些相關(guān)的概念。

一、機器周期和指令周期

1.機器周期是指單片機完成一個基本操作所花費的時間,一般使用微秒來計量單片機的運行速度,51 單片機的一個機器周期包括12 個時鐘振蕩周期,也就是說如果51 單片機采用12MHz 晶振,那么執(zhí)行一個機器周期就只需要1μs;如果采用的是6MHz 的晶振,那么執(zhí)行一個機器周期就需要2 μs。

2 .指令周期是指單片機執(zhí)行一條指令所需要的時間,一般利用單片機的機器周期來計量指令周期。在51 單片機里有單周期指令(執(zhí)行這條指令只需一個機器周期),雙周期指令(執(zhí)行這條指令只需要兩個機器周期),四周期指令(執(zhí)行這條指令需要四個機器周期)。除了乘、除兩條指令是四周期指令,其余均為單周期或雙周期指令。也就是說,如果51 單片機采用的是12MHz 晶振,那么它執(zhí)行一條指令一般只需1~2 微秒的時間;如果采用的是6MH 晶振,執(zhí)行一條指令一般就需2~4 微秒的時間。

現(xiàn)在的單片機有很多種型號,但在每個型號的單片機器件手冊中都會詳細說明執(zhí)行各種指令所需的機器周期,了解以上概念后,那么可以依據(jù)單片機器件手冊中的指令執(zhí)行周期和單片機所用晶振頻率來完成需要精確延時時間的延時程序。

二、延時指令

在單片機編程里面并沒有真正的延時指令,從上面的概念中我們知道單片機每執(zhí)行一條指令都需要一定的時間,所以要達到延時的效果,只須讓單片機不斷地執(zhí)行沒有具體實際意義的指令,從而達到了延時的效果。

1.數(shù)據(jù)傳送指令 MOV

數(shù)據(jù)傳送指令功能是將數(shù)據(jù)從一個地方復(fù)制、拷貝到另一個地方。

如:MOV R7,#80H ;將數(shù)據(jù)80H 送到寄存器R7,這時寄存器R7 里面存放著80H,就單這條

指令而言并沒有任何實際意義,而執(zhí)行該指令則需要一個機器周期。

2.空操作指令 NOP

空操作指令功能只是讓單片機執(zhí)行沒有意義的操作,消耗一個機器周期。

3.循環(huán)轉(zhuǎn)移指令 DJNZ

循環(huán)轉(zhuǎn)移指令功能是將第一個數(shù)進行減1 并判斷是否為0,不為0 則轉(zhuǎn)移到指定地點;為0 則往下執(zhí)行。

如:DJNZ R7,KK ;將寄存器R7 的內(nèi)容減1 并判斷寄存器R7 里的內(nèi)容減完1 后是否為0,如果

不為0 則轉(zhuǎn)移到地址標號為KK 的地方;如果為0 則執(zhí)行下一條指令。這條指令需要2 個機器周期。

利用以上三條指令的組合就可以比較精確地編寫出所需要的延時程序。

三、1 秒延時子程序、流程圖及時間計算 (以單片機晶振為12MHz 為例,1 個機器周期需要1μs)

了解了以上的內(nèi)容,現(xiàn)在讓我們來看看

程序總共所需時間:1+10+2560+330240+660480+5120+20+2=998433 μs≈1S

在這里運行這段程序共需998433 μs,還差1567μs 才達到1S 的,所以想要達到完美的1S 延時,需要在返回指令RET 前再添加一些指令讓它把1567μs 的延時完成。有興趣的讀者可以自己試著添加完成。

最后補充一點,編寫程序時一般將延時程序編寫成獨立的子程序,而所謂子程序也就是一個實現(xiàn)某個功能的小模塊。這樣在主程序中就可以方便地反復(fù)調(diào)用編寫好的延時子程序。

小提示:循環(huán)轉(zhuǎn)移指令(DJNZ )除了可以給定地址標號讓其跳轉(zhuǎn)外,還可以將地址標號改成$,這樣程序就跳回本指令執(zhí)行。例如:

DJNZ R7,$ ;R7 內(nèi)容減1 不為0,則再次執(zhí)行本指令;為0 則往下執(zhí)行,當R7 的值改為10時,則執(zhí)行完該條程序所需的時間為2*10=20 μs。

51單片機匯編延時程序算法詳解

將以12MHZ晶振為例,詳細講解MCS-51單片機中匯編程序延時的精確算法。

指令周期、機器周期與時鐘周期

指令周期:CPU執(zhí)行一條指令所需要的時間稱為指令周期,它是以機器周期為單位的,指令不同,所需的機器周期也不同。

時鐘周期:也稱為振蕩周期,一個時鐘周期 =晶振的倒數(shù)。

MCS-51單片機的一個機器周期=6個狀態(tài)周期=12個時鐘周期。

MCS-51單片機的指令有單字節(jié)、雙字節(jié)和三字節(jié)的,它們的指令周期不盡相同,一個單周期指令包含一個機器周期,即12個時鐘周期,所以一條單周期指令被執(zhí)行所占時間為12*(1/12000000)=1μs。

程序分析

例1 50ms 延時子程序:

DEL:MOV R7,#200 ①

DEL1:MOV R6,#125 ②

DEL2:DJNZ R6,DEL2 ③

DJNZ R7,DEL1 ④

RET ⑤

精確延時時間為:1+(1*200)+(2*125*200)+(2*200)+2

=(2*125+3)*200+3 ⑥

=50603μs

≈50ms

由⑥整理出公式(只限上述寫法)延時時間=(2*內(nèi)循環(huán)+3)*外循環(huán)+3 ⑦

詳解:DEL這個子程序共有五條指令,現(xiàn)在分別就 每一條指令 被執(zhí)行的次數(shù)和所耗時間進行分析。

第一句:MOV R7,#200 在整個子程序中只被執(zhí)行一次,且為單周期指令,所以耗時1μs

第二句:MOV R6,#125 從②看到④只要R7-1不為0,就會返回到這句,共執(zhí)行了R7次,共耗時200μs

第三句:DJNZ R6,DEL2 只要R6-1不為0,就反復(fù)執(zhí)行此句(內(nèi)循環(huán)R6次),又受外循環(huán)R7控制,所以共執(zhí)行R6*R7次,因是雙周期指令,所以耗時2*R6*R7μs。

例2 1秒延時子程序:

DEL:MOV R7,#10 ①

DEL1:MOV R6,#200 ②

DEL2:MOV R5,#248 ③

DJNZ R5,$ ④

DJNZ R6,DEL2 ⑤

DJNZ R7,DEL1 ⑥

RET ⑦

對每條指令進行計算得出精確延時時間為:

1+(1*10)+(1*200*10)+(2*248*200*10)+(2*200*10)+(2*10)+2

=[(2*248+3)*200+3]*10+3 ⑧

=998033μs≈1s

由⑧整理得:延時時間=[(2*第一層循環(huán)+3)*第二層循環(huán)+3]*第三層循環(huán)+3 ⑨

此式適用三層循環(huán)以內(nèi)的程序,也驗證了例1中式⑦(第三層循環(huán)相當于1)的成立。

注意,要實現(xiàn)較長時間的延時,一般采用多重循環(huán),有時會在程式序里加入NOP指令,這時公式⑨不再適用,下面舉例分析。

例3仍以1秒延時為例

DEL:MOV R7,#10 1指令周期1

DEL1:MOV R6,#0FFH 1指令周期10

DEL2:MOV R5,#80H 1指令周期255*10=2550

KONG:NOP 1指令周期128*255*10=326400

DJNZ R5,$ 2指令周期2*128*255*10=652800

DJNZ R6,DEL2 2指令周期2*255*10=5110

DJNZ R7,DEL1 2指令周期2*10=20

RET 2

延時時間=1+10+2550+326400+652800+5110+20+2 =986893μs約為1s

整理得:延時時間=[(3*第一層循環(huán)+3)*第二層循環(huán)+3]*第三層循環(huán)+3 ⑩

結(jié)論:針對初學(xué)者的困惑,對匯編程序的延時算法進行了分步講解,并就幾種不同寫法分別總結(jié)出相應(yīng)的計算公式,只要仔細閱讀例1中的詳解,并用例2、例3來加深理解,一定會掌握各種類型程序的算法并加以運用。

單片機延時子程序

1)延時為:20ms 晶振12M

1+(1+2*248+2)*4+1+1+1=20000US=20MS

用匯編..優(yōu)點就是精確...

缺點就是算有點復(fù)雜.

DELAY20MS:

MOV R7,#4

D1:

MOV R6,#248

DJNZ R6,$

DJNZ R7,D1

NOP

NOP

RET

2)一些通過計算51匯編指令得出的軟延時子程序

;*****************************************************************

;延時10uS

;*****************************************************************

time10us: mov r5,#05h ;11us

djnz r5,$

ret

;*****************************************************************

;延時50uS

;*****************************************************************

time50us: mov r5,#19h ;51us

djnz r5,$

ret

;*****************************************************************

;延時100uS

;*****************************************************************

time100us: mov r5,#31h ;99.6us

djnz r5,$

ret

;*****************************************************************

;延時200uS

;*****************************************************************

time200us: mov r5,#64h ;201us

djnz r5,$

ret

;*****************************************************************

;延時250uS

;*****************************************************************

time250us: mov r5,#7ch ;249.6us

djnz r5,$

ret

;*****************************************************************

;延時350uS

;*****************************************************************

time350us: mov r5,#0afh ;351us

time350us_1: djnz r5,time350us_1

ret

;*****************************************************************

;延時500uS

;*****************************************************************

time500us: mov r5,#0fah ;501us

time500us_1: djnz r5,time500us_1

ret

;*****************************************************************

;延時1mS

;*****************************************************************

time1ms: mov r5,#0fah ;1001us

time1ms_1: nop

nop

djnz r5,time1ms_1

ret

;*****************************************************************

;延時2.5mS

;*****************************************************************

time2_5ms: mov r5,#05h ;2.496ms

time2_5ms_1: mov r6,#0f8h ;497us

djnz r6,$

djnz r5,time2_5ms_1

ret

;*****************************************************************

;延時10mS

;*****************************************************************

time10ms: mov r5,#14h ;10.262ms

time10ms_1: mov r6,#0ffh ;511us

djnz r6,$

djnz r5,time10ms_1

ret

;*****************************************************************

;延時50mS

;*****************************************************************

time50ms: mov r5,#63h ;49.996ms

time50ms_1: mov r6,#0fbh ;503us

djnz r6,$

djnz r5,time50ms_1

ret

;*****************************************************************

;延時100mS

;*****************************************************************

time100ms: mov r5,#0c3h ;100.036ms

time100ms_1: mov r6,#0ffh ;511us

djnz r6,$

djnz r5,time100ms_1

ret

;*****************************************************************

;延時200mS

;*****************************************************************

time200ms: mov r5,#02h ;250.351ms

time200ms_1: mov r6,#0f4h ;125.173ms

time200ms_2: mov r7,#0ffh ;511us

djnz r7,$

djnz r6,time200ms_2

djnz r5,time200ms_1

ret

;*****************************************************************

;延時500mS

;*****************************************************************

time500ms: mov r5,#04h ;500.701ms

time500ms_1: mov r6,#0f4h ;125.173ms

time500ms_2: mov r7,#0ffh ;511us

djnz r7,$

djnz r6,time500ms_2

djnz r5,time500ms_1

ret

;*****************************************************************

;延時1S

;*****************************************************************

time1s: mov r5,#08h ;1001.401ms

time1s_1: mov r6,#0f4h ;125.173ms

time1s_2: mov r7,#0ffh ;511us

djnz r7,$

djnz r6,time1s_2

djnz r5,time1s_1

ret

12M晶振 機器周期為1US  NOP為單周期指令 DJNZ為雙周期指令.

3)

;;晶振12MHZ,延時1秒

DELAY:MOV 72H,#100

LOOP3:MOV 71H,#100

LOOP1:MOV 70H,#47

LOOP0:DJNZ 70H,LOOP0

NOP

DJNZ 71H,LOOP1

MOV 70H,#46

LOOP2:DJNZ 70H,LOOP2

NOP

DJNZ 72H,LOOP3

MOV 70H,#48

LOOP4:DJNZ 70H,LOOP4

4);延時1分鐘子程序,F(xiàn)=6MHz

;程序已測過,延時時間60,000,000.0uS

delay60s:mov r3,#228

mov r2,#253

mov r1,#219

loop1: djnz r1,$

djnz r2,loop1

djnz r3,loop1

nop

ret

5)計算機反復(fù)執(zhí)行一段程序以達到延時的目的稱為軟件延時,單片機程序中經(jīng)常需要短時間的延時,但是相當一部分人對延時程序很模糊,對延時程序的算法不夠了解,在這里我以12MHz晶振和兩個經(jīng)典延時子程序為例,詳細分析單片機匯編延時程序。

何為時鐘周期、機器周期、和指令周期?

時鐘周期:也就是振蕩周期,以12MHz的時鐘脈沖為例,那時鐘周期就為(1/12000000)s=(1/12)us;

機器周期:1個機器周期=6個狀態(tài)周期=12個時鐘周期=1us;

指令周期:CPU執(zhí)行一條指令所需要的時間稱為指令周期,指令周期是以機器周期為單位的,不同的指令所需的機器周期不一定相同,可參考51單片機指令速查表。

由上可得:CPU執(zhí)行一條單周期指令,需要1us;執(zhí)行一條雙周期指令需要2us。

下面是具體的延時子程序分析:

0.1s延時子程序(12MHz晶振):

MOV R7,#200 ;單周期指令(1us)

D1: MOV R6,#250 ;單周期指令(1us)

DJNZ R6,$ ;雙周期指令(2us)//該指令自身執(zhí)行R6次

DJNZ R7,D1 ;雙周期指令(2us)//D1執(zhí)行R7次

RET ;雙周期指令(2us)

T=1+(1+2*R6+2)*R7+2

=100603us

≈0.1s

0.5s延時子程序(12MHz晶振):

MOV R7,#5 ;單周期指令(1us)

D1: MOV R6,#200 ;單周期指令(1us)

D2: MOV R5,#250 ;單周期指令(1us

DJNZ R5,$ ;雙周期指令(2us)//該指令自身執(zhí)行R5次

DJNZ R6,D2 ;雙周期指令(2us)//D2執(zhí)行R6次

DJNZ R7,D1 ;雙周期指令(2us)//D1執(zhí)行R7次

RET ;雙周期指令(2us)

T=1+[1+(1+2*R5+2)*R6+2]*R7+2

=503018us

≈0.5s

6) 51單片機經(jīng)典流水燈程序,在51單片機的P2口接上8個發(fā)光二極管,產(chǎn)生流水燈的移動效果。

ORG 0 ;程序從0地址開始

START: MOV A,#0FEH ;讓ACC的內(nèi)容為11111110

LOOP: MOV P2,A ;讓P2口輸出ACC的內(nèi)容

RR A ;讓ACC的內(nèi)容左移

CALL DELAY ;調(diào)用延時子程序

LJMP LOOP ;跳到LOOP處執(zhí)行

;0.1秒延時子程序(12MHz晶振)===================

DELAY: MOV R7,#200 ;R7寄存器加載200次數(shù)

D1: MOV R6,#250 ;R6寄存器加載250次數(shù)

DJNZ R6,$ ;本行執(zhí)行R6次

DJNZ R7,D1 ;D1循環(huán)執(zhí)行R7次

RET ;返回主程序

END ;結(jié)束程序

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉