本文出處:
一. 500ms延時子程式
程式:void delay500ms(void)
unsigned char i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
產生的彙編:
c:0x0800 7f0f mov r7,#0x0f
c:0x0802 7eca mov r6,#0xca
c:0x0804 7d51 mov r5,#0x51
c:0x0806 ddfe djnz r5,c:0806
c:0x0808 defa djnz r6,c:0804
c:0x080a dff6 djnz r7,c:0802
c:0x080c 22 ret
計算分析:
程式共有三層迴圈
一層迴圈n:r5*2 = 81*2 = 162us djnz 2us
二層迴圈m:r6*(n+3) = 202*165 = 33330us djnz 2us + r5賦值 1us = 3us
三層迴圈: r7*(m+3) = 15*33333 = 499995us djnz 2us + r6賦值 1us = 3us
迴圈外: 5us 子程式呼叫 2us + 子程式返回 2us + r7賦值 1us = 5us
延時總時間 = 三層迴圈 + 迴圈外 = 499995+5 = 500000us =500ms
計算公式:延時時間=[(2*r5+3)*r6+3]*r7+5
二. 200ms延時子程式
程式:void delay200ms(void)
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
產生的彙編
c:0x0800 7f05 mov r7,#0x05
c:0x0802 7e84 mov r6,#0x84
c:0x0804 7d96 mov r5,#0x96
c:0x0806 ddfe djnz r5,c:0806
c:0x0808 defa djnz r6,c:0804
c:0x080a dff6 djnz r7,c:0802
c:0x080c 22 ret
三. 10ms延時子程式
程式:void delay10ms(void)
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
產生的彙編
c:0x0800 7f05 mov r7,#0x05
c:0x0802 7e04 mov r6,#0x04
c:0x0804 7df8 mov r5,#0xf8
c:0x0806 ddfe djnz r5,c:0806
c:0x0808 defa djnz r6,c:0804
c:0x080a dff6 djnz r7,c:0802
c:0x080c 22 ret
四. 1s延時子程式
程式:void delay1s(void)
unsigned char h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
產生的彙編
c:0x0800 7f05 mov r7,#0x05
c:0x0802 7e04 mov r6,#0x04
c:0x0804 7d74 mov r5,#0x74
c:0x0806 7cd6 mov r4,#0xd6
c:0x0808 dcfe djnz r4,c:0808
c:0x080a ddfa djnz r5,c:0806
c:0x080c def6 djnz r6,c:0804
c:0x080e dff2 djnz r7,c:0802
c:0x0810 22 ret
以上程式均對應為12m晶振的微控制器環境.
附時間換算表:
1秒=1000毫秒(ms)
1毫秒=1/1,000秒(s)
1秒=1,000,000 微秒(μs)
1微秒=1/1,000,000秒(s)
1秒=1,000,000,000 納秒(ns)
1納秒=1/1,000,000,000秒(s)
1秒=1,000,000,000,000 皮秒(ps)
1皮秒=1/1,000,000,000,000秒(s)
60秒 = 1分鐘
60分鐘 = 1小時
24小時 = 1天
7天 = 1星期
365.25天 = 1年
100年 = 1世紀
1平太陽日 = 24小時3分56.555秒
1恆星日 = 23小時56分4.091秒
1太陽年(回歸年) = 365.2422天
(= 365天5小時48分46秒)
1恆星年 = 365.2564天
(= 365天6小時9分9.5秒)
1朔望月 = 29.5306天
1恆星月 = 27.3712天
1太陽年 = 12個朔望日 = 354.36天
VC中基於 Windows 的精確定時
vc中基於 windows 的精確定時中國科學院光電技術研究所 遊志宇 coledatetime start time coledatetime getcurrenttime coledatetimespan end time coledatetime getcurrenttime start ti...
在keil中編譯ucos時要注意的問題
程式編譯好後 program size data 112.0 xdata 164 code 3930 也就是說只要51有 126位元組的片內ram data 256位元組的外部ram xdata 4k以上的flash就可以執行了 還有個問題要注意的 51系列的微控制器片內ram最多只有256位元組,...
C 萬能庫標頭檔案在vs中的安裝
c 萬能庫標頭檔案在vs2019中的安裝 1 c 萬能庫的定義 簡而言之,就是一條語句代替了多條語句,包含了目前c 所包含的所有標頭檔案 2 c 萬能庫的寫法 include 如下是bits stdc h所包含的c 所有庫函式標頭檔案 ifndef glibcxx no assert include...