|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
( X! k8 O W- r. N | (晶振12MHz,一个机器周期1us.)
1 M3 r c) K) e' T一. 500ms延时子程序
- [3 D1 _7 u* P- ]程序:: C1 M' Y6 }& X* i
void delay500ms(void){( B+ B1 G7 r/ ^1 b! x* O# j
unsigned char i,j,k;
* _& Z- o; b" I' h. T2 S for(i=15;i>0;i--)9 M" @+ r# Y9 L4 ~7 |
for(j=202;j>0;j--)/ v: P0 G' E9 J* s; P" y
for(k=81;k>0;k--);
2 f' n) q+ S9 \% e7 P* f' o3 B}
8 L- n, w& B& ]' o/ ]产生的汇编:; Y& X4 Q3 G# o |
C:0x0800 7F0F MOV R7,#0x0F
/ k; \9 I. S& t2 M2 ^9 Z* rC:0x0802 7ECA MOV R6,#0xCA
$ h- a5 Z$ Z: sC:0x0804 7D51 MOV R5,#0x51) v' A" ]5 F5 A
C:0x0806 DDFE DJNZ R5,C:0806" L! s& ]9 t* j7 J
C:0x0808 DEFA DJNZ R6,C:08045 z) ]7 `# r: y0 l# \
C:0x080A DFF6 DJNZ R7,C:08020 T* |. \; A+ r/ _1 }
C:0x080C 22 RET
/ I& _: |3 t% u; A6 k计算分析:5 w9 o# r7 H2 X) q* \
程序共有三层循环8 K2 r8 w' D; O: r
一层循环n:R5*2 = 81*2 = 162us DJNZ 2us
1 Q) v/ O% `' R3 |% z二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us
% L/ q2 I( `4 E# n1 {$ i8 T三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us7 k% k* R& L1 P* C
循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
$ y5 J1 D- \, q8 c延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms ]3 z" t. G3 `& }# E; Q
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5; g# H- o1 b, a) z$ K$ x! T# }( O
; p( _$ j5 d5 ?1 l二. 200ms延时子程序4 E9 u& | Z1 h) w* `% B
程序:
2 @+ O+ [8 C* \' j0 Vvoid delay200ms(void){
" j6 @, v& e, I4 r. N unsigned char i,j,k;
$ R5 V$ n0 ^( Z, A& |8 P for(i=5;i>0;i--)& H. r$ Z- E" d! d- `; o. g
for(j=132;j>0;j--)) }" T- G( S j( N
for(k=150;k>0;k--);$ R5 M- Q. @' k
}+ u8 }' a* v/ P1 l
产生的汇编$ H! [( O6 r0 `
C:0x0800 7F05 MOV R7,#0x05& Q( N" f' \" j4 I' [: ~
C:0x0802 7E84 MOV R6,#0x844 n, w2 v* C9 I- g4 h
C:0x0804 7D96 MOV R5,#0x96
t$ e3 }- {1 |1 ?6 A5 l! J. i5 e ]2 `C:0x0806 DDFE DJNZ R5,C:0806
' z5 ]) x7 e: P/ q- s. u) Z: }7 EC:0x0808 DEFA DJNZ R6,C:0804
- |6 h3 s X4 n' x# }' {1 s* xC:0x080A DFF6 DJNZ R7,C:0802" ^ e" q- n1 [5 P( {
C:0x080C 22 RET
2 @2 ~2 J l* {5 D5 @
; Y3 _/ X* ]; |) `' g, @0 n三. 10ms延时子程序
3 P# o# U, L) D. w( p% K: E程序:) _! v( U8 P3 N' d
void delay10ms(void){
$ K8 Y- {) r0 D6 m) u& ? unsigned char i,j,k;
* j6 t3 x8 W( n6 S \2 ~ for(i=5;i>0;i--)8 @6 X0 K! D5 ?. P' y) K9 P- T
for(j=4;j>0;j--)
, I3 J; c0 [7 ~- J" s for(k=248;k>0;k--);9 Z- d. ?( k' A# R' a* H% C% N! }
}
5 Q4 o0 ?" j8 ]产生的汇编
' z7 o0 [; R5 O( F6 U- X1 HC:0x0800 7F05 MOV R7,#0x05
2 n/ j3 V2 |+ R0 C. z( mC:0x0802 7E04 MOV R6,#0x04
" @) l9 }3 G9 o; c) n0 XC:0x0804 7DF8 MOV R5,#0xF8
& ?6 y# W# {' W% o' x- KC:0x0806 DDFE DJNZ R5,C:08065 o0 ^( W p' ?
C:0x0808 DEFA DJNZ R6,C:0804* F- Y4 b- e0 u e0 }: v
C:0x080A DFF6 DJNZ R7,C:0802
1 q' l0 m$ ?# } Y& FC:0x080C 22 RET
5 {7 _& }: R+ K" Y- H- b3 ^( W3 k* g" o% M( y
四. 1s延时子程序
7 N! V. |' m1 G, Q' E; V/ R# ?程序:
* w" O$ H2 {% ~) e. Zvoid delay1s(void){4 ]0 L" S) ]! t+ b
unsigned char h,i,j,k;( s+ d8 k% a, A) l7 b; c# K
for(h=5;h>0;h--)
0 k0 }8 R6 C C, L for(i=4;i>0;i--)0 M z. L" t( U" g
for(j=116;j>0;j--) C' @1 S1 A" w9 d
for(k=214;k>0;k--);( l3 J% d( x7 ?+ n# \
}# b t1 {( i. s/ m! F4 X
产生的汇编( h$ B7 K* X$ w$ e9 H
C:0x0800 7F05 MOV R7,#0x05
( b$ t2 E. y; ^( a9 n2 y% LC:0x0802 7E04 MOV R6,#0x043 D9 W- i: v* e8 A4 M
C:0x0804 7D74 MOV R5,#0x74
! T- e% N# D; _' A. ~! @C:0x0806 7CD6 MOV R4,#0xD6
! E$ U6 }. O! @3 kC:0x0808 DCFE DJNZ R4,C:0808
1 f- q; J0 v9 X# R% P# J5 [' kC:0x080A DDFA DJNZ R5,C:0806
8 u0 s8 m3 N6 U- P, l( _C:0x080C DEF6 DJNZ R6,C:0804; g/ j) n v, z! O4 _
C:0x080E DFF2 DJNZ R7,C:0802
9 C' A' m* f# P, @C:0x0810 22 RET
; o0 v; P: |0 f+ y& `, ]4 }
' E8 R( _; o6 S; B$ H: B1 a; P( B L3 C; B
6 g; w0 V/ O7 z3 A& K. f
时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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"><span class="ask-title">当80C51单片机晶振频率为12MHz时,时钟周期.机器周期各是多少?</span></h1><pre id="answer-content-375512566" class="answer-text mb-10" name="code">答:1.时钟周期为晶振频率的倒数:1/12微秒; 2.机器周期为12个时钟周期:1微秒; |
1 ?. U- O& y p
: U; u* } H# y: S! G" b4 F+ w
0 V h) h: v! j3 Y# P0 R1 y- E8 V( U; h/ R: `& U9 m, c; u7 @
$ F7 R; _9 u, P! a* I! v& V
|
4 S; H0 }5 k* e# G" W4 J b# G5 `$ w
8 Q- v9 Z3 I1 L7 U, u( E- g1 N1 ^ |
3 b' f6 }2 L# ^/ A' C8 @$ c; o3 V |
|