|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
(晶振12MHz,一个机器周期1us.)
* i8 ~- M P" B$ t$ a; S1 f3 S一. 500ms延时子程序# q0 ]2 x( B, r
程序: , M: b' F C& K( [$ V3 N ?
void delay500ms(void){5 R' m4 ?' A/ K' ~1 ?) C, d
unsigned char i,j,k;, }6 i. a, @. p
for(i=15;i>0;i--), O* N4 h1 R- U
for(j=202;j>0;j--)
8 S9 \9 C# j+ _ for(k=81;k>0;k--);
. [- R( C+ a1 ]( @}+ t" Q; x, A# J' V, @$ e n% n% U, f
产生的汇编:" r/ a, L6 q4 P
C:0x0800 7F0F MOV R7,#0x0F' t, b# n* v, s. B' K$ [* \
C:0x0802 7ECA MOV R6,#0xCA
- ]# ?7 R$ D+ K" j1 D! vC:0x0804 7D51 MOV R5,#0x51/ W0 D% ]% n1 G! t* K1 ]
C:0x0806 DDFE DJNZ R5,C:0806
) [, U( R0 Z. R$ m |C:0x0808 DEFA DJNZ R6,C:08045 K% }' @6 s/ x! S1 I! u5 `
C:0x080A DFF6 DJNZ R7,C:0802. H4 S2 A8 T0 f/ Q/ H( i ~
C:0x080C 22 RET
0 ^+ y7 S( H6 d5 {" H) V$ }- F1 y计算分析:
X" S: ?, P, o% n2 z5 K程序共有三层循环8 {/ a. W, l3 E5 z! G6 u' B
一层循环n:R5*2 = 81*2 = 162us DJNZ 2us
$ U2 o4 _9 C5 ~二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us2 ]4 o) W% x e8 r; K5 }) k" w0 S
三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us
! q+ {/ ]2 A8 S4 S& z2 c循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
9 G6 q) d6 d0 P, W7 k5 \0 }6 ^延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
0 f1 e8 _6 E: J V+ c3 Y! `8 g计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5+ G9 C. }& `$ n8 N7 R+ Q) H& C
$ [* H/ y4 B+ o. U- K: o, G; A& P+ L, X二. 200ms延时子程序* }2 ~# i4 T2 p5 x
程序:
1 c) `( g1 m) o" X3 @' |! evoid delay200ms(void){
1 ] R1 y* N" u) s: K$ u unsigned char i,j,k;
& a" u5 o0 {. G; X4 F$ d for(i=5;i>0;i--)
! a+ \3 T/ I& r for(j=132;j>0;j--). ?3 Z& S; |8 |3 E0 E: B+ J% @ R+ L
for(k=150;k>0;k--);) T% D3 [: O! \9 y
}+ W: z% v- g5 Y" B
产生的汇编* [' B. F7 P8 G+ I- v
C:0x0800 7F05 MOV R7,#0x05
+ e, H/ Q6 \& c# oC:0x0802 7E84 MOV R6,#0x84
- R Z5 `6 L6 X: x' vC:0x0804 7D96 MOV R5,#0x96% c9 x' O; y/ o) w! k7 t& e
C:0x0806 DDFE DJNZ R5,C:08061 b6 Y% z" p, k. K
C:0x0808 DEFA DJNZ R6,C:0804. j" r4 W# T, S7 f, L! D' u
C:0x080A DFF6 DJNZ R7,C:08027 q6 R" J" p7 m1 }# L' ^0 S, S% A
C:0x080C 22 RET: V0 v" f: Z2 `1 k: J: @7 k
( r' x: j8 R* J+ v2 [! _) q) U- p2 M三. 10ms延时子程序
+ C2 q. N" x5 N" g# ?* y! u程序:) t, ]0 B I1 s) T- Q( H4 Y$ g, f
void delay10ms(void){- E6 }# l) J: v' r K
unsigned char i,j,k;6 ?2 B8 n* c& E1 ^ E
for(i=5;i>0;i--)& u5 j" m* t s
for(j=4;j>0;j--)8 k; B. Y: E( a7 m0 ^
for(k=248;k>0;k--);
5 L' j! j# E& D9 }( I}, U B5 U! {0 M$ u$ E6 R
产生的汇编
( T# _. L9 x) xC:0x0800 7F05 MOV R7,#0x056 H! l9 o' ^4 R" c3 J- k+ w7 z x* a
C:0x0802 7E04 MOV R6,#0x04$ P: O: d& w- t( l0 w
C:0x0804 7DF8 MOV R5,#0xF8
0 B1 |& ]4 Q' i* Z: x/ a T( q; `) k. iC:0x0806 DDFE DJNZ R5,C:0806+ B+ Z& c( n; C1 G4 K8 t! i
C:0x0808 DEFA DJNZ R6,C:0804
) g' i/ I. [; M+ KC:0x080A DFF6 DJNZ R7,C:0802
% y+ R0 D2 a M/ c4 ~C:0x080C 22 RET ; Y' P; [2 p. W6 }
, T6 g$ v3 x+ V& b$ A& @
四. 1s延时子程序( G, T# X3 Y- \# t) Q
程序:6 Z3 w' ~4 V. i
void delay1s(void){
6 I2 R2 f# c* j( i& C0 Q unsigned char h,i,j,k;
: t4 I- T0 U7 c, n for(h=5;h>0;h--)
( E3 V( i7 Y. |* h8 P' P8 D4 R for(i=4;i>0;i--)
8 q; B6 O! j' I J& b* c+ }+ \ for(j=116;j>0;j--)6 \+ M+ n a/ q, u
for(k=214;k>0;k--);) z) z; H" I6 k
}, z% ~' H8 n( X1 H7 C0 G
产生的汇编
* S2 P( O j s3 iC:0x0800 7F05 MOV R7,#0x05
. \3 n+ L- ^) ?+ @# Q( {' JC:0x0802 7E04 MOV R6,#0x04
* W# M6 W+ s% @C:0x0804 7D74 MOV R5,#0x74) E% X x. J. x% P. ` ]
C:0x0806 7CD6 MOV R4,#0xD6# X5 w0 @# c$ I5 a, E6 [
C:0x0808 DCFE DJNZ R4,C:0808
/ X1 K* F/ h( c8 C( p% |" H" TC:0x080A DDFA DJNZ R5,C:0806: ^" _# T/ U6 E
C:0x080C DEF6 DJNZ R6,C:0804
* R& ^# z1 Q5 Q) M$ A8 l) [C:0x080E DFF2 DJNZ R7,C:0802- }% Z8 G$ b( j8 ~7 _* Y
C:0x0810 22 RET
6 |$ \: t3 B I) Q0 _
6 l' K: k# u; ?5 j) Y/ R2 G; O; t+ d 时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;# Q1 f& A% K' d# X
|
|