(晶振12MHz,一個機器周期1us.)
一. 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/12 us),是電腦中最基本的、最小的時間單位。 在一個刻度內,CPU僅完成一個最基本的動作。對於某種單片機,若採用了1MHZ的時鐘頻率,則刻度為1us;若採用4MHZ的時鐘頻率,則刻度為250us。由於時鐘脈衝是電腦的基本工作脈衝,它控制著電腦的工作節奏(使電腦的每一步都統一到它的步調上來)。顯然,對同一種機型的電腦,時鐘頻率越高,電腦的工作速度就越快。但是,由於不同的電腦硬體電路和器件的不完全相同,所以其所需要的時鐘周頻率範圍也不一定相同。我們學習的8051單片機的時鐘範圍是1.2MHz-12MHz。 在8051單片機中把一個刻度定義為一個節拍(用P表示),二個節拍定義為一個狀態周期(用S表示)。機器周期 在電腦中,為了便於管理,常把一條指令的執行過程劃分為若干個階段,每一階段完成一項工作。例如,取指令、儲存空間讀、儲存空間寫等,這每一項工作稱為一個基本操作。完成一個基本操作所需要的時間稱為機器周期。一般情況下,一個機器周期由若干個S周期(狀態周期)組成。8051系列單片機的一個機器周期同6個S周期(狀態周期)組成。前面已說過一個刻度定義為一個節拍(用P表示),二個節拍定義為一個狀態周期(用S表示),8051單片機的機器周期由6個狀態周期組成,也就是說一個機器周期=6個狀態周期=12個刻度。指令周期 指令周期是執行一條指令所需要的時間,一般由若干個機器周期組成。指令不同,所需的機器周期數也不同。對於一些簡單的的單位元組指令,在取指令周期中,指令取出到指令寄存器後,立即解碼執行,不再需要其它的機器周期。對於一些比較複雜的指令,例如轉移指令、乘法指令,則需要兩個或者兩個以上的機器周期。 通常含一個機器周期的指令稱為單周期指令,包含兩個機器周期的指令稱為雙周期指令。<h1 class="mb-5" style="margin: 0px; padding: 0px;"><span class="ask-title">當80C51單片機晶振頻率為12MHz時,刻度.機器周期各是多少。</span></h1><pre id="answer-content-375512566" class="answer-text mb-10" name="code" style="white-space: pre-wrap; word-wrap: break-word;">答:1.刻度為晶振頻率的倒數:1/12微秒; 2.機器周期為12個刻度:1微秒;