|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
(晶振12MHz,一个机器周期1us.)' `- h- O9 t) O3 m3 D* g9 y: q6 ^! f
一. 500ms延时子程序+ m) C8 Y) q; I: Z; i
程序:
; Q. ^8 { p: k/ Vvoid delay500ms(void){* U0 Y2 r! ^2 E* c% R g6 Y1 B
unsigned char i,j,k;' c C/ I' X0 B7 @4 _; A
for(i=15;i>0;i--)6 u3 W7 Y, f7 Q
for(j=202;j>0;j--)
7 |6 Z4 [2 |: f4 l q* x2 j/ p- K for(k=81;k>0;k--);' B+ M% P' c: r# o5 j0 w
}
- H" ?8 R& z, s* [- ~$ d. c产生的汇编:/ X6 V9 q4 _# a6 b0 J# f
C:0x0800 7F0F MOV R7,#0x0F
' b1 G0 }- C& I2 j' hC:0x0802 7ECA MOV R6,#0xCA
0 {& s: u. \% A, t" [& {C:0x0804 7D51 MOV R5,#0x51
2 L2 p! b9 N+ m8 e4 w+ w& ZC:0x0806 DDFE DJNZ R5,C:0806
! r' ^6 w4 u; H! t4 T$ e! NC:0x0808 DEFA DJNZ R6,C:0804
, [' t6 `: L1 Q XC:0x080A DFF6 DJNZ R7,C:0802# F3 H1 A6 e! b3 m( L) r
C:0x080C 22 RET : v8 F3 v3 @6 ?4 c8 ?* g& Q c
计算分析:# D- D% n: L. k0 V
程序共有三层循环
1 c1 v. D8 q @9 J6 O: e( K5 n4 T一层循环n:R5*2 = 81*2 = 162us DJNZ 2us
( R& }( D% \8 b5 D* w0 \二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us
- a F+ s6 G9 s, c- `三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us
+ P- X5 C4 o/ b/ D& F9 M循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
3 r' Z' B; ?0 Q% O延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
9 {- L# T/ ^, `9 N$ {- O5 \计算公式:延时时间=[(2*R5+3)*R6+3]*R7+54 S. A1 G; l( y& r# I
, y- o1 z/ F* m- H二. 200ms延时子程序7 Y: [/ j" e# t0 x$ V0 l
程序:/ t, R) \9 Q9 D1 M& W
void delay200ms(void){* ^7 q: l6 c( E/ z! Y8 l
unsigned char i,j,k;
) Z y i' O* k& K2 O2 t for(i=5;i>0;i--)
6 b& w8 G; ]+ |' F for(j=132;j>0;j--)
/ g4 Y* L# j" F: e* K) Q: R& k. T for(k=150;k>0;k--);+ h8 J# v. [" V; ^' D; Q
} t$ P9 E. e! p% t8 |. n0 y
产生的汇编3 y3 _3 l7 w) K; |
C:0x0800 7F05 MOV R7,#0x05 _" {* [. c( ^& V
C:0x0802 7E84 MOV R6,#0x84- f3 L" w1 E4 R6 X. r
C:0x0804 7D96 MOV R5,#0x96
4 K2 P; j, V, wC:0x0806 DDFE DJNZ R5,C:08066 X4 y- Q8 U- E) c
C:0x0808 DEFA DJNZ R6,C:08040 l. {. X( y4 l( ~
C:0x080A DFF6 DJNZ R7,C:0802
8 N; L/ ]2 K6 O j4 rC:0x080C 22 RET
( m+ ^7 p; G7 M1 |: O- d% `4 v( @" @
三. 10ms延时子程序
; ?. {: u+ r( X4 @8 q程序:
( j) h/ [( U F0 Yvoid delay10ms(void){' t7 h# E" ]3 i: {
unsigned char i,j,k;
0 h3 ^* V4 B! C; P8 q for(i=5;i>0;i--)
: z% C Y3 a8 M! F+ c9 y5 l for(j=4;j>0;j--)
8 L, a7 i7 A& C7 p2 @ for(k=248;k>0;k--);( _" Y" Z: M. }9 ^' J% D$ r8 y
}
o. i+ b: T4 B, n3 ?- x产生的汇编
: j' f# c" C" ?C:0x0800 7F05 MOV R7,#0x056 o# e2 P6 q" o' g9 b. m
C:0x0802 7E04 MOV R6,#0x04
) J5 L, R, A+ g0 y* B! EC:0x0804 7DF8 MOV R5,#0xF8
- u) c- U+ B8 i# B- I7 ~" E( bC:0x0806 DDFE DJNZ R5,C:0806( K' x( T: j2 J2 P0 V; |
C:0x0808 DEFA DJNZ R6,C:0804
0 k3 x- f- k. y' X" K; QC:0x080A DFF6 DJNZ R7,C:0802
8 m) _1 Z2 P4 m4 f4 HC:0x080C 22 RET
1 f( h1 x/ m8 _* A4 B) O$ ~) E! e, S$ T; H* c
四. 1s延时子程序7 e, A) ?& L2 n+ F5 h2 L* K
程序:* s; X/ z- M& i! ~
void delay1s(void){; w- E1 q7 Q1 Z! |, |
unsigned char h,i,j,k;
4 p$ a% Y( D) M0 B6 E6 y9 s% ^ for(h=5;h>0;h--)
, G1 X9 r3 Y; {0 l4 t for(i=4;i>0;i--)
; J" f, a! l0 i( `, |$ D for(j=116;j>0;j--)8 ~% [) P6 [# P5 g: T4 q C7 Y
for(k=214;k>0;k--);, Z9 _; W! s- L" `7 D% {" t1 D
} o, F) D9 _" w, f9 ` H
产生的汇编* z. X4 u+ Q! B5 o
C:0x0800 7F05 MOV R7,#0x05
1 _& { r! w$ P: I4 o( iC:0x0802 7E04 MOV R6,#0x04
7 j7 Q8 L& z P# W+ t" eC:0x0804 7D74 MOV R5,#0x74
( z% i6 s3 K$ m8 eC:0x0806 7CD6 MOV R4,#0xD6
) g x: g0 h! i0 Z9 o- T9 V% nC:0x0808 DCFE DJNZ R4,C:0808# S. Z( W, _1 v P
C:0x080A DDFA DJNZ R5,C:0806
* h& z( k. e; e) Z! ~3 l9 Z- AC:0x080C DEF6 DJNZ R6,C:0804, i2 N6 ]) F" Y
C:0x080E DFF2 DJNZ R7,C:0802# c% V1 A$ ]+ K* ]8 o* ^% O; o
C:0x0810 22 RET
* x# T# q% X$ n2 a
6 \& {, r8 }- U5 \ 时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒; J& `3 F$ S+ X
|
|