|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
(晶振12MHz,一个机器周期1us.)
- O2 T& E! G6 |" P: W一. 500ms延时子程序
/ l& s6 D4 {5 N: r$ N [程序:
" G. q, b. P: } @# Vvoid delay500ms(void){
; S. t( w3 ~$ E) u4 a2 J4 h0 } unsigned char i,j,k;
2 e, t1 l$ _( y% k' |& e for(i=15;i>0;i--), T; u* u( o; \. o6 C- P0 M6 M$ t
for(j=202;j>0;j--)5 \% u f5 a, B! d# }
for(k=81;k>0;k--);5 [/ D+ [8 N' M1 L) n% U, b. b
}6 l# H$ [5 ~1 g# K, K% P# }
产生的汇编:
1 G( d+ x; K4 z5 |. g/ WC:0x0800 7F0F MOV R7,#0x0F" k$ t9 _7 f$ R
C:0x0802 7ECA MOV R6,#0xCA
& I8 O: ]8 n3 [' QC:0x0804 7D51 MOV R5,#0x515 K7 S7 K/ o. V* w
C:0x0806 DDFE DJNZ R5,C:08060 \- {7 { [$ U0 D6 o1 f
C:0x0808 DEFA DJNZ R6,C:0804- O& n. D& ]6 x
C:0x080A DFF6 DJNZ R7,C:0802
8 c6 N9 s, p# }* W4 U: ]0 a) r8 cC:0x080C 22 RET 2 i A; q E' r4 z( I, G
计算分析:0 W& R# C8 P/ w7 s# P0 ~4 J% P6 A* q
程序共有三层循环
5 A# ]' J7 h8 P一层循环n:R5*2 = 81*2 = 162us DJNZ 2us2 s. ?1 r3 z9 W! e8 r, l
二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us6 H3 R' n$ d2 y1 r& l- d
三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us
7 z/ L8 x/ C" _/ z循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us$ o/ S4 S7 S3 J# d
延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
' P4 F0 [* C' q- v计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
6 | F! c! V8 F6 @- k8 M4 {- V# d: a
二. 200ms延时子程序& O! }+ V) g5 D2 r6 D0 v; C
程序:$ X5 x" p+ A u1 J) g8 U
void delay200ms(void){
, ?! p+ V1 y2 }- L unsigned char i,j,k;
3 r( l1 a4 p* M8 O6 c for(i=5;i>0;i--)
% `' X* L1 [$ D- w1 ~$ z0 q- ~7 J3 c for(j=132;j>0;j--)6 J3 x# L; N. K; }8 i
for(k=150;k>0;k--);. B. d$ Q; x9 Z5 `+ c
}
& c1 z: b2 _9 d; A1 k- \产生的汇编: j& v8 w/ k+ ?/ I% Q: l; M+ r: z/ }" f
C:0x0800 7F05 MOV R7,#0x05, H( x {1 L6 V0 K* C5 E
C:0x0802 7E84 MOV R6,#0x84
9 J; Z9 d3 _" m( i+ G& B ~C:0x0804 7D96 MOV R5,#0x96) F1 N. a3 ^) }9 K
C:0x0806 DDFE DJNZ R5,C:0806) c% G( H, M4 {- p" D( [* |) X1 |9 ]
C:0x0808 DEFA DJNZ R6,C:0804
' v1 j7 I- P/ Y1 G; |C:0x080A DFF6 DJNZ R7,C:0802
; ?" c% j% W: v& W" Z8 B, g" k1 ]C:0x080C 22 RET/ Y3 o" ^! E3 w) n. O" X
! Q% V- F' A% p9 O三. 10ms延时子程序
5 F. D6 ]( x9 f程序:
4 z* h3 @" C5 i! \+ \' Y7 nvoid delay10ms(void){0 E$ \+ _3 M( I' M* E* i) p
unsigned char i,j,k;
& g; V' ^9 c6 B6 o( ^& m& B for(i=5;i>0;i--)# [3 n/ y' _) o7 `$ y
for(j=4;j>0;j--)+ z) |9 x/ j; j4 C
for(k=248;k>0;k--);
( x. V6 X! a5 k$ g3 r* ~}
b* n( ]2 t; l2 w7 f产生的汇编
' \7 v: A0 e0 t2 N9 K5 QC:0x0800 7F05 MOV R7,#0x05 o; \' c a! a% ? S
C:0x0802 7E04 MOV R6,#0x04
- M9 d4 ]- Z& A$ t# SC:0x0804 7DF8 MOV R5,#0xF8. h) I5 R+ e* G
C:0x0806 DDFE DJNZ R5,C:08060 v/ D3 Y+ y- S L P
C:0x0808 DEFA DJNZ R6,C:0804
2 W k& D# q) G0 G5 ^. ]# R9 O u+ AC:0x080A DFF6 DJNZ R7,C:0802
9 @) P6 | o7 `3 I2 D* JC:0x080C 22 RET
' _8 [7 j: N1 |: _7 G8 J: x Q* `3 f9 K5 ?8 j
四. 1s延时子程序( [) t. q# k( z' b. i
程序:$ i9 C6 j1 X+ j
void delay1s(void){+ [% u/ l% W: R G
unsigned char h,i,j,k;
0 i8 L& Q8 f5 b& T! Y for(h=5;h>0;h--)
5 V, H& m6 R: a7 g. Q+ L for(i=4;i>0;i--)* w/ M' y6 O7 r4 n1 y. N d
for(j=116;j>0;j--)
# p. y8 \) K3 [5 p* j* X3 I5 A" n for(k=214;k>0;k--);& m$ V" O2 l7 [
}$ [. C& q- A" p# f- \. _
产生的汇编
0 a( {, d4 K0 R3 i6 ~C:0x0800 7F05 MOV R7,#0x055 t# n. `9 Y4 h3 c
C:0x0802 7E04 MOV R6,#0x04
& s' O, R) H1 d9 D) RC:0x0804 7D74 MOV R5,#0x746 h- Z/ L7 X9 V3 I! E
C:0x0806 7CD6 MOV R4,#0xD6
7 t6 j4 c3 d2 G0 vC:0x0808 DCFE DJNZ R4,C:0808
- t- m. p8 r, vC:0x080A DDFA DJNZ R5,C:0806
1 f' n+ O% q3 y- L4 @C:0x080C DEF6 DJNZ R6,C:0804
3 i- \# X& ?% E3 @% xC:0x080E DFF2 DJNZ R7,C:0802
( v+ H1 _: U4 s3 F" |0 QC:0x0810 22 RET
- J* B% K, z5 S5 |
0 A$ w2 n; Z) X0 O& |+ Q# I, {
时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;
& f( x& G" h& V& B- g$ {4 Y |
|