| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
(晶振12MHz,一个机器周期1us.)7 f1 a0 a! P3 i8 Q. y4 ] 
一. 500ms延时子程序 
: N; W! S- w  t& C3 x$ V+ u程序: ' ~2 H) L7 B* g+ ? 
void delay500ms(void){ 
: d6 H/ C& L6 r3 ]' Y   unsigned char i,j,k; 
+ z' C0 c# l2 F   for(i=15;i>0;i--)- S) _2 j# V2 N7 b( `  _7 ~7 n 
     for(j=202;j>0;j--) 
6 T8 [( Q; V) v- r. ?0 U7 g       for(k=81;k>0;k--); 
: ~! ~# e0 ^8 A0 Q$ \8 P" A% a$ N/ V} 
2 k6 h3 p: l; s" {$ k产生的汇编: 
& J& Z6 f  v- a' j% t$ n: {C:0x0800     7F0F      MOV       R7,#0x0F( P, S% c- i7 u* l+ s6 `4 @# w 
C:0x0802     7ECA      MOV       R6,#0xCA3 y$ x8 V  R& w7 O0 \# T 
C:0x0804     7D51      MOV       R5,#0x51# i+ x' t  e( ?6 D& I" o& D 
C:0x0806     DDFE      DJNZ      R5,C:0806 
9 t/ L! ?: s( u9 a+ o( l: r( MC:0x0808     DEFA      DJNZ      R6,C:0804* T6 k5 C2 }6 s5 I: {2 N- d 
C:0x080A     DFF6      DJNZ      R7,C:08021 @- w' N4 a, s3 T$ ? 
C:0x080C     22        RET      * Z& G. B& y8 e# L; D; e. c1 k& B- q 
计算分析:+ C: O  L6 j8 f3 C 
程序共有三层循环 
6 q( I# `1 L# V7 r3 R7 l$ o一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us) b0 j5 W4 s6 F( V9 t& T/ T 
二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us 
  v7 a+ A; D" e" o三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us% K2 }4 ^7 n* ^ 
循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us5 S  ~$ b0 c/ o- e0 {2 U 
延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms! e1 i' z5 L6 \2 `0 v; u/ Z5 X 
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5$ I4 R& x4 m7 C: m8 h 
 
' z' I$ u# L( [  u' Y1 |8 A二. 200ms延时子程序 
1 k7 p2 l! e% }程序: 
' ~* N( {! X& D8 ]void delay200ms(void){ 
  {. y/ ~8 ^1 h( A4 h4 t" I   unsigned char i,j,k;9 D( }2 ?) w8 W' b7 w 
   for(i=5;i>0;i--) 
- z; U' }$ l, J$ o: s     for(j=132;j>0;j--)1 \& z2 p6 ~. U 
       for(k=150;k>0;k--); 
! O6 b9 L& ]% _$ }  K5 K+ Z" y} 
" t2 n. K, B5 ~5 X产生的汇编4 O5 _6 m1 @, J- d3 W5 S. b  H 
C:0x0800     7F05      MOV       R7,#0x05 
- k. `" I! V% b7 wC:0x0802     7E84      MOV       R6,#0x84 
3 P9 z8 A- }+ ~4 }, bC:0x0804     7D96      MOV       R5,#0x962 \; \( S$ ^5 |6 q 
C:0x0806     DDFE      DJNZ      R5,C:0806 
. K' Q3 k. B% VC:0x0808     DEFA      DJNZ      R6,C:08043 @  `! D+ g+ g" `; v 
C:0x080A     DFF6      DJNZ      R7,C:0802- g. K- V5 j9 v6 |" ?; F 
C:0x080C     22        RET 
2 c* |' e3 f1 k, z5 w2 R5 M4 k- ^, R, q* g" X0 z 
三. 10ms延时子程序 
0 E# q8 ?& A3 v/ q6 n程序: 
% g2 t6 I3 V6 H* |* nvoid delay10ms(void){ 
7 p+ e  d5 Y* D1 r& C+ P4 g. n+ f. A   unsigned char i,j,k;$ \, T3 R# g4 N. ]) M) j6 `; w, | 
   for(i=5;i>0;i--)/ g2 A$ y, \! X8 C* j3 e 
     for(j=4;j>0;j--) 
( B) l8 j, N7 ~, G       for(k=248;k>0;k--); 
. ]5 Z7 y+ _; K' o( D$ b}2 E. q3 F/ o7 A' e$ n 
产生的汇编 
% d& l* K) g- [' ~% r" R6 pC:0x0800     7F05      MOV       R7,#0x053 c8 N8 N& p$ C( Y8 D0 | 
C:0x0802     7E04      MOV       R6,#0x04# r% S) N4 d& y6 Y) \5 ? 
C:0x0804     7DF8      MOV       R5,#0xF8 
7 N( r) \% G5 v- qC:0x0806     DDFE      DJNZ      R5,C:08066 e# v9 }. ^) N( J! O 
C:0x0808     DEFA      DJNZ      R6,C:08044 O9 {" }; {5 W& b 
C:0x080A     DFF6      DJNZ      R7,C:0802 
- F. c2 I/ u2 g& t; F5 VC:0x080C     22        RET      6 S" [, _( a% n. Q1 T9 D 
# y& C+ {: E; J9 ^ 
四. 1s延时子程序# s! Y* n" F8 Q3 e 
程序: 
5 D9 f" L- d. Qvoid delay1s(void){0 R  a0 `  R2 G$ y  H 
   unsigned char h,i,j,k; 
6 V2 Q; W" M% D8 q7 m* x   for(h=5;h>0;h--) 
" G7 W, I& D$ x     for(i=4;i>0;i--)1 d0 a% {. N. `" f* k2 X5 _* O 
       for(j=116;j>0;j--); |% P) t' P: X" P1 C5 X 
         for(k=214;k>0;k--); 
0 l7 }) ]) @) A( ^6 s) T) o  ^4 Q}& e& h/ C. \  r' P* J& ?  a 
产生的汇编 
2 T1 K$ a4 I) H- `# G. B* p1 m+ P' r% V2 XC:0x0800     7F05      MOV       R7,#0x057 B2 h; o% s" A: i, I/ P 
C:0x0802     7E04      MOV       R6,#0x04# ?* t  c9 y# V) V5 e 
C:0x0804     7D74      MOV       R5,#0x741 _/ L' u( z& r( O3 v4 @. W2 H; V5 e1 k 
C:0x0806     7CD6      MOV       R4,#0xD6 
* @- v6 e$ c6 t- t) wC:0x0808     DCFE      DJNZ      R4,C:0808 
' Z& \; v' C8 uC:0x080A     DDFA      DJNZ      R5,C:0806 
4 |) A2 x3 p; m8 c- kC:0x080C     DEF6      DJNZ      R6,C:0804 
" i% S# ^. [9 s$ X: V  _. oC:0x080E     DFF2      DJNZ      R7,C:0802- \& o+ p% _" j; d6 B; X 
C:0x0810     22        RET  
  g4 J) R+ G4 ?8 i8 o
   d2 c& ?" ^: s 
 时钟周期    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒; 
4 Y' m. ?9 r: C$ x" J |   
 
 
 
 |