|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
(晶振12MHz,一个机器周期1us.)
$ N4 @$ D% ?; m. e J一. 500ms延时子程序0 \/ j" }7 ?' c& o1 ]7 `2 Y6 Z; Z! O
程序: - L" H, s b7 p
void delay500ms(void){
2 t5 m9 A& y$ W+ O* g- v unsigned char i,j,k;
! Z1 z3 G6 Y; L3 q9 d: f; ` for(i=15;i>0;i--)
+ y- h- D& j0 m( V' j3 z& Q for(j=202;j>0;j--)
& f" f0 n$ M- |; D! _ for(k=81;k>0;k--);/ \& z) A/ y F! W; p
}
* P+ h# k+ Z5 A产生的汇编:% D8 f( R- A: r r2 t
C:0x0800 7F0F MOV R7,#0x0F$ d# L) n" @# x4 c% A! S
C:0x0802 7ECA MOV R6,#0xCA
& i6 I1 ]3 G& \1 a8 i- |C:0x0804 7D51 MOV R5,#0x513 ]3 C3 b- s- A& z
C:0x0806 DDFE DJNZ R5,C:0806# b! N2 y& v1 K* Y' A5 H& n
C:0x0808 DEFA DJNZ R6,C:0804
* l5 M; p" ? S7 cC:0x080A DFF6 DJNZ R7,C:0802
& t* i! F# V2 cC:0x080C 22 RET
o! p4 Z X! o# y7 H7 X0 g计算分析:
, B, {9 c5 p* z/ M程序共有三层循环
) Z; s1 i: h. N- x3 C一层循环n:R5*2 = 81*2 = 162us DJNZ 2us$ f6 P. Z) H4 D$ j
二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us
3 E$ i" W& B0 X! b0 d8 W% z- T三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us
E( M* t8 d. }( d6 o! K- t5 {5 W循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
' H. I4 P9 `( D8 k& _$ I6 f8 q; I延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
6 T$ t) W3 y% f) Y+ D计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
) e( V/ }% s/ G1 g* S# Z$ X. S3 q7 `2 B) X0 B
二. 200ms延时子程序7 E- P9 w# [; G5 {% t
程序:
4 r3 K% H6 z& x' Svoid delay200ms(void){$ B9 J3 L5 Z+ z! _ ]
unsigned char i,j,k;2 [2 X6 G- h8 I# _
for(i=5;i>0;i--)
7 T$ v* U8 T3 Y+ V: W- ? for(j=132;j>0;j--)0 E" H" B! t0 t8 K* c5 i
for(k=150;k>0;k--);
V8 ~/ p' x. ?}! J& B' p! _, c$ H2 V; S: K' }; n
产生的汇编/ C4 J/ N( D) h: }3 h
C:0x0800 7F05 MOV R7,#0x056 w) s7 M4 v" a% e$ C" X
C:0x0802 7E84 MOV R6,#0x84
: }$ ]9 }- p" \ N' b5 i* jC:0x0804 7D96 MOV R5,#0x96
* M$ C/ `! ?6 ?; x' P5 {C:0x0806 DDFE DJNZ R5,C:0806
# L7 g) z+ O8 x4 EC:0x0808 DEFA DJNZ R6,C:0804
7 Z' l2 ]& W/ a* w& b" X$ o" YC:0x080A DFF6 DJNZ R7,C:0802
! k* n6 {% A. J, I! mC:0x080C 22 RET% N5 Y6 a$ x* S+ F* H! i
( X* {5 n1 A2 S0 g9 ~三. 10ms延时子程序 G' `- A4 r5 C* g( w6 `) j
程序:
0 v$ k! q- ]% u: m7 d% A6 C5 R; Evoid delay10ms(void){6 H7 r' _$ r/ Y- v7 I+ M
unsigned char i,j,k;( }: A& Y2 z. Z7 {1 ?7 G
for(i=5;i>0;i--)# S* i) p8 F9 |$ g( z ?6 J
for(j=4;j>0;j--)' c8 S( L9 O( G( u C: t( s. S$ {* ?
for(k=248;k>0;k--);
0 {+ {# X: [2 _ a}% ^4 l+ }- s% \
产生的汇编
5 v' W+ s G# }* p6 Y8 H1 F, LC:0x0800 7F05 MOV R7,#0x05* B/ F$ ~8 U, a# T# h
C:0x0802 7E04 MOV R6,#0x04
/ G4 k0 k0 ]% A) ?$ [C:0x0804 7DF8 MOV R5,#0xF8& E6 R( S' J5 m t; ]2 a8 x
C:0x0806 DDFE DJNZ R5,C:0806% }! ^2 I; t0 N+ G* @, I u; G6 d
C:0x0808 DEFA DJNZ R6,C:0804. J2 p3 O% R# L8 l. M
C:0x080A DFF6 DJNZ R7,C:0802# p2 M4 m; j( d3 F
C:0x080C 22 RET 0 k5 Q' p& f; f. `3 l, V" H# k
, t$ J( B' }1 Q6 W% c" j四. 1s延时子程序
. v6 `3 `$ K4 s( B- I6 l2 n L" n9 W程序:
/ ]) s! J" J( w6 P8 I/ W; d5 nvoid delay1s(void){
( Q* |# o# @7 R# r' \% Y1 V: f9 x- t! [ unsigned char h,i,j,k;
' w/ ?7 V$ m: @ for(h=5;h>0;h--)
" M: r( y+ `+ x4 K- J for(i=4;i>0;i--)
. e! l, _. @" _; S: { for(j=116;j>0;j--)# y+ U6 v- a8 Q5 i. F' H
for(k=214;k>0;k--);
" W2 F# ]2 J/ o9 D, h% E}
( _2 x9 o! s: `7 _- h8 _产生的汇编
% k2 t2 |1 _. w. h8 S) AC:0x0800 7F05 MOV R7,#0x05
5 R1 ?8 r1 [* v. t- OC:0x0802 7E04 MOV R6,#0x04) p4 s1 a" q r6 Y3 B
C:0x0804 7D74 MOV R5,#0x74) x" c" ^3 n5 b% q. K
C:0x0806 7CD6 MOV R4,#0xD6
* [1 D$ Z* r( R- |' r" AC:0x0808 DCFE DJNZ R4,C:08082 O5 i1 q& ~3 L9 I
C:0x080A DDFA DJNZ R5,C:0806' `0 D$ {% S7 ~# A6 w
C:0x080C DEF6 DJNZ R6,C:0804/ m7 B" @* l( Y. C# o
C:0x080E DFF2 DJNZ R7,C:08022 f- z, n3 g( R# Z; J# ]
C:0x0810 22 RET
3 b: |& q, r+ G7 n; e6 s' k- m! F. H
; o* r9 q+ |( j# s! b7 @ 时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;) g, k* i; v! G, h9 a9 O
|
|