|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ [0 `: S2 M. S! \" E | (晶振12MHz,一个机器周期1us.)+ w! S8 ?( q1 P0 V$ ?! s" j: ~
一. 500ms延时子程序( w" }# b# S, r9 {: x- i ]$ Z
程序:7 {5 j* W4 P: l/ p) F9 w
void delay500ms(void){9 t) t9 n- C$ v2 e9 g" `
unsigned char i,j,k;
: D# f6 T* m+ x3 a, L for(i=15;i>0;i--)
) u& L" d5 P L( N+ T" ?1 k! Z$ R for(j=202;j>0;j--)
/ e8 g& D* p2 O3 C6 B for(k=81;k>0;k--);
$ b M1 r2 M% z9 I V}
* p' ^* L1 ^$ k; Q, {产生的汇编:7 U+ ]* R: L: M
C:0x0800 7F0F MOV R7,#0x0F
" r+ j2 n0 j. Z7 G; i: YC:0x0802 7ECA MOV R6,#0xCA
" ] N; m: P+ D, QC:0x0804 7D51 MOV R5,#0x51
( q Z7 e6 |/ B$ |C:0x0806 DDFE DJNZ R5,C:0806
1 A- L4 a3 o3 E' V. Y& pC:0x0808 DEFA DJNZ R6,C:0804
: |! i& j0 E6 Q+ f5 n$ c N' EC:0x080A DFF6 DJNZ R7,C:0802
# U& f. Q) @9 ~/ i+ gC:0x080C 22 RET
8 [! W0 T# X& v6 L/ H计算分析:% s2 X* C1 r) E) m1 l' X4 k
程序共有三层循环: [ w% R. _# _+ l7 m* b I
一层循环n:R5*2 = 81*2 = 162us DJNZ 2us! B8 F# z" P5 V. G
二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us, {. `: Y) X2 s5 S5 n( `
三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us
/ [7 K* e, i* _5 W2 |循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
" e9 A& `& M( k5 T3 A延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms7 S& ^1 h; Z% E* Y9 {
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
4 \: E+ N2 G$ M6 V
, u1 e: i# m' `+ X2 D* K二. 200ms延时子程序
c/ }1 f% J, o4 p! H y/ p$ q! I程序:
, R, y) p' j9 [2 v; J/ Evoid delay200ms(void){ j) K d6 e4 y/ O( f
unsigned char i,j,k;
+ h; I0 p+ D' n. E" I& s for(i=5;i>0;i--)
" S/ g0 e2 j5 l3 ^8 E for(j=132;j>0;j--)
& A& R% B) I1 w for(k=150;k>0;k--);$ _/ N# E8 y! P4 \* Z$ ~, }/ e8 V
}
/ W ^% o' ]1 a, U产生的汇编
9 f0 t. A( ]% i1 E# IC:0x0800 7F05 MOV R7,#0x05/ ~* w2 a/ S1 z# G2 k& A; ], q: \
C:0x0802 7E84 MOV R6,#0x84
2 m$ h; j% f, y) i9 f9 wC:0x0804 7D96 MOV R5,#0x96
9 `) R# Z5 D2 q7 c9 z; G9 y! {C:0x0806 DDFE DJNZ R5,C:08062 n5 w; n$ l" e
C:0x0808 DEFA DJNZ R6,C:0804; W$ H! t) s4 g7 x7 g' X. s1 l# h t
C:0x080A DFF6 DJNZ R7,C:0802
4 O' E( w1 I# o1 G$ U; D4 ]C:0x080C 22 RET+ I3 R8 Y3 c; k$ A' e& l3 N
7 F% t) z1 n" F
三. 10ms延时子程序
# {1 ^9 D7 A9 j3 I程序:
# ^, U! i5 S; d9 y, r4 G- [* p+ gvoid delay10ms(void){+ p& ]; X2 O: [
unsigned char i,j,k;
$ |: `0 A0 v ]5 ?8 ]' `) f. j for(i=5;i>0;i--)9 z& r' P# P# h# `: B7 D$ \
for(j=4;j>0;j--)8 v Z/ Z& a) y1 d2 L/ z3 i& l
for(k=248;k>0;k--);
( E0 C; W0 \9 Y% a}/ U( S. K7 c/ c7 d& s! j
产生的汇编
1 `6 A9 D! x, DC:0x0800 7F05 MOV R7,#0x05; N! O2 G! q5 Y- @3 }) a+ ?% N
C:0x0802 7E04 MOV R6,#0x04- X) h/ s/ g4 r+ ~& Z5 R6 ]# a3 O
C:0x0804 7DF8 MOV R5,#0xF8* E9 J8 Y, H X' f) C, k
C:0x0806 DDFE DJNZ R5,C:0806
8 i6 p( ]& H8 w8 b* _% rC:0x0808 DEFA DJNZ R6,C:0804
) k. n' D$ U' S4 Z" i7 @. BC:0x080A DFF6 DJNZ R7,C:0802
( c9 w# ~5 V+ ?1 QC:0x080C 22 RET 3 l( Q* c6 j2 a
& m x3 M W' H/ ~0 n# A
四. 1s延时子程序& k% ?# ?. L2 I# z' d
程序:5 S* E; A$ w) j! e! _" X
void delay1s(void){" f' a0 N% u5 N# P
unsigned char h,i,j,k;7 w* w3 m6 M9 O% l2 i8 h+ l
for(h=5;h>0;h--)
$ \2 D3 J5 C" g9 I5 a) f" I& c for(i=4;i>0;i--): U2 h8 N( L1 Y# z: C
for(j=116;j>0;j--)& X2 u: c C! m' h0 t( y) R
for(k=214;k>0;k--); D @/ C$ \3 b! g
}
0 r5 I6 c$ g8 I) ?2 ~7 z& n; f" J0 S# H产生的汇编
+ r8 O# x3 a* S. s; T; AC:0x0800 7F05 MOV R7,#0x05
9 E9 z# w5 v, z' g% EC:0x0802 7E04 MOV R6,#0x04
# Y" A# _' [! f( R, q1 yC:0x0804 7D74 MOV R5,#0x74
* z4 B* f) h8 j- \C:0x0806 7CD6 MOV R4,#0xD6* W9 F( ~: }: g( J; l4 C
C:0x0808 DCFE DJNZ R4,C:0808/ S9 o5 V+ O) z- m' h/ O& B& m- G
C:0x080A DDFA DJNZ R5,C:08069 W& ~0 r3 x3 z5 @, K; |, o5 }
C:0x080C DEF6 DJNZ R6,C:0804
' H7 _9 u- |; P' c6 n1 g4 {' E0 y# XC:0x080E DFF2 DJNZ R7,C:0802
! H- s3 R2 y* o) ?* c* yC:0x0810 22 RET
5 K+ j: g1 x V! `
" c6 @% S$ q) y3 H4 S, K- K! ~2 m ~
# E6 r' i% k/ ]$ U! R5 U; r# l时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒; |
% i+ O% F t' Z
9 G1 g/ Z6 ?- z* E$ p# u: `# L
0 A. w$ N3 s, w8 B
0 I1 V! w$ w* z; F& A- h
' P+ F- V0 s) J( _/ Q" R |
' X; m/ @3 U6 J' Z6 r: M3 X6 Y7 g: Q. m# s4 i: v
|
0 A2 U1 ^# U9 m2 _: N |
|