久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開始

搜索
查看: 7171|回復(fù): 1
收起左側(cè)

單片機(jī)定時(shí)器延遲時(shí)間計(jì)算

[復(fù)制鏈接]
ID:104835 發(fā)表于 2016-2-2 03:29 | 顯示全部樓層 |閱讀模式
關(guān)于時(shí)間單位1s=1000ms毫秒=10-3秒
1ms=1000us微秒=10-6秒
1us=1000ns納秒=10-9秒
1ns=1000ps皮秒=10-12秒
1ps=1000fs飛秒=10-15秒
目前51單片機(jī)只能精確到微秒級(jí),若對(duì)時(shí)間精度要求較高,需達(dá)到微秒級(jí),則一般需用匯編語言編程,若只需達(dá)到秒或毫秒級(jí),則用C語言編程就可滿足要求。

==》作為預(yù)備知識(shí),建議先了解下機(jī)器周期、數(shù)據(jù)類型和存儲(chǔ)器類型,可以參照
機(jī)器周期:http://www.zg4o1577.cn/bbs/dpj-43300-1.html
數(shù)據(jù)類型:http://www.zg4o1577.cn/bbs/dpj-43301-1.html
存儲(chǔ)器類型:http://www.zg4o1577.cn/bbs/dpj-43302-1.html

==》下面先介紹匯編語言編程
根據(jù)定時(shí)時(shí)間長度可以編制不同循環(huán)重?cái)?shù)的程序。
===》單循環(huán)延遲程序
           MOV R7,#TIME
LOOP:NOP                      1機(jī)器周期
           NOP                      1機(jī)器周期
           DJNZ R7,LOOP     2機(jī)器周期
延遲時(shí)間=4 X T X TIME
以常見的12M晶振為例,則一個(gè)機(jī)器周期T=1us
因?yàn)镽7是8位寄存器,所以TIME只能為char型,其值域?yàn)?~255
則定時(shí)范圍為 4us~1020us
===》雙循環(huán)延時(shí)程序
             MOV R7,#TIME1                   1機(jī)器周期
LOOP1:MOV R6,#TIME2                   1機(jī)器周期
LOOP2:NOP                                      1機(jī)器周期
             NOP                                      1機(jī)器周期
             DJNZ R6,LOOP2                   2機(jī)器周期
             DJNZ R7,LOOP1                   2機(jī)器周期
延時(shí)時(shí)間=(TIME2 X 4 +2+1) X TIME1 X T+T
定時(shí)范圍為 8us~260 866us
===》三重循環(huán)延時(shí)程序
             MOV R7,#TIME1                   1機(jī)器周期
LOOP1:MOV R6,#TIME2                   1機(jī)器周期
LOOP2:MOV R5,#TIME3                   1機(jī)器周期
LOOP3:NOP                                      1機(jī)器周期
             NOP                                      1機(jī)器周期
             DJNZ R5,LOOP3                   2機(jī)器周期
             DJNZ R6,LOOP2                   2機(jī)器周期
             DJNZ R7,LOOP1                   2機(jī)器周期
延遲時(shí)間=((TIME3 X 4 +2+1) X TIME2 +2+1) X TIME1 X T +T
定時(shí)范圍為 11us~66 521 341us
根據(jù)需要還可以編寫4重5重或更多重程序,滿足不同延時(shí)需要。
==》C語言編程
C語言中通過循環(huán)結(jié)構(gòu)的程序達(dá)到延時(shí)的目的,還可以通過循環(huán)嵌套滿足不同的定時(shí)要求,常用循環(huán)語句有以下三種:
while(表達(dá)式){語句;}
do{語句;}while(表達(dá)式)
for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語句;}
我是通過keil仿真時(shí)數(shù)匯編指令的數(shù)目來確定循環(huán)語句執(zhí)行時(shí)間的(我不知道是不是還有更好的方法),結(jié)果如下:
====》while語句
下面的例子可以不看,后面跟著結(jié)果。
例子:int i; while(i<1000); {i++;}
keil編譯成的匯編代碼循環(huán)執(zhí)行段為:
                              循環(huán)代碼                                  消耗的機(jī)器周期
C:0x0003    C3       CLR      C                                        1
C:0x0004    E509     MOV      A,0x09                             1
C:0x0006    94E8     SUBB     A,#0xE8                           1
C:0x0008    E508     MOV      A,0x08                             1
C:0x000A    6480     XRL      A,#P0(0x80)                      1
C:0x000C    9483     SUBB     A,#DPH(0x83)                  1
C:0x000E    500A     JNC      C:001A                              2
     5:   {i++;}
C:0x0010    0509     INC      0x09                                    1
C:0x0012    E509     MOV      A,0x09                              1
C:0x0014    70ED     JNZ      main(C:0003)                     2
根據(jù)每條指令的機(jī)器周期可以確定,循環(huán)一次消耗的機(jī)器周期數(shù)為:12個(gè)
依然以12M晶振為例,每個(gè)機(jī)器周期為1us,則循環(huán)一次耗時(shí)12us,循環(huán)一千次耗時(shí)12 000us
(signed int)i 能取到的最大值為32767,所以此循環(huán)語句的定時(shí)范圍為10us~393 204us
====》do while 語句
同樣例子后面有結(jié)果,可以不看例子。
例子:  int i=10; do{i--;} while(i>0);
keil編譯的匯編程序循環(huán)段代碼:
                              循環(huán)段代碼                         消耗的機(jī)器周期
C:0x0007    EF       MOV      A,R7                      1
C:0x0008    1F       DEC      R7                          1
C:0x0009    7001     JNZ      C:000C                  2
C:0x000B    1E       DEC      R6
     5:   while(i>0);
C:0x000C    D3       SETB     C                          1
C:0x000D    EF       MOV      A,R7                     1
C:0x000E    9400     SUBB     A,#0x00               1
C:0x0010    EE       MOV      A,R6                      1
C:0x0011    6480     XRL      A,#P0(0x80)          1
C:0x0013    9480     SUBB     A,#P0(0x80)        1
C:0x0015    50F0     JNC      C:0007                  2
循環(huán)一次消耗的機(jī)器周期數(shù):12個(gè)
晶振12M,i 最大值32767,定時(shí)范圍:10us~393 204us
====》for語句
例子: int i; for(i=1000;i>0;i--);
                              循環(huán)段代碼                          消耗的機(jī)器周期
C:0x0007    EF       MOV      A,R7                        1
C:0x0008    1F       DEC      R7                            1
C:0x0009    7001     JNZ      C:000C                    2
C:0x000B    1E       DEC      R6
C:0x000C    EF       MOV      A,R7                       1
C:0x000D    4E       ORL      A,R6                        1
C:0x000E    70F7     JNZ      C:0007                    2
循環(huán)一次消耗的機(jī)器周期數(shù):8個(gè)
依然以12M晶振為例,則定時(shí)范圍:6us~262 136us
for語句中,若 i 定義為 unsigned int ,則 i 的最大值可取65535,則定時(shí)范圍:6us~524 280us


相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:390416 發(fā)表于 2021-3-27 09:21 | 顯示全部樓層
1、假設(shè)在同一個(gè)硬件上做測(cè)試,單片機(jī)CPU指令周期是一致的。那么 變量i、K,存放在data跟存放在XDATA,讀寫速度能一樣?精確計(jì)算有意義嗎?
2、假設(shè)都存放在data,延遲1ms只需要char類型的變量即可完成,但是,延遲100ms必須16位變量,那么執(zhí)行時(shí)間還能照著公式去套算?
3、假設(shè)上述條件都一樣,計(jì)算好的延遲時(shí)間是1ms并且誤差1%,打開中斷之后,延遲時(shí)間變成了5毫秒了。誤差500%了,精確計(jì)算有意義嗎?
4、假設(shè)上述條件不影響延遲時(shí)間,那么,編譯器呢?誰敢說編譯器不同的優(yōu)化等級(jí)不影響delay的延遲時(shí)間?
5、還有硬件不同的情況,就需要重新計(jì)算了。比如晶振頻率不同,CPU內(nèi)核速度不同,STC8H單片機(jī)就比STC15快了很多了比89系列快了十幾倍了。

所以,不要去精確的計(jì)算delay 延遲了多少時(shí)間,畢竟單片機(jī)的運(yùn)行情況有很多變數(shù)。學(xué)會(huì)提高CPU的代碼執(zhí)行效率,是很有必要的!
“什么是單片機(jī)?咱玩的就是時(shí)間!”
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91国内精品久久 | 亚洲国产精品日本 | 国产91精品网站 | 免费高清成人 | 欧美日韩一区二区三区四区五区 | 国产精品日本一区二区在线播放 | 免费v片| 狠狠亚洲 | 91pao对白在线播放 | 先锋影音资源网站 | 久久精品视频一区二区三区 | 本地毛片 | 亚洲国产小视频 | 国产精品久久久久久久久久免费 | 欧美性生活免费 | 成人免费观看视频 | 天天天天天天天干 | 91精品国产手机 | 毛片在线免费 | 男女视频在线观看 | 日韩欧美在线视频 | 成人1区2区| 精品日韩一区二区 | 色狠狠桃花综合 | 一区二区三区av | 欧美久久一区 | 成人网av| 国产精品毛片久久久久久 | 国产精品免费一区二区三区 | 欧美人妇做爰xxxⅹ性高电影 | 国产精品久久久久久久久久久久久 | 天啪 | 成人亚洲性情网站www在线观看 | 亚洲天堂影院 | 日日骚网| 久久成人免费 | 久久久久无码国产精品一区 | 久久人体视频 | 超碰免费在 | 国产精品99久久久久久宅男 | 亚洲精品视频在线播放 |