|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ b7 t S j. J7 z/ `; E | (晶振12MHz,一个机器周期1us.)
7 x: @; ]8 n6 J, H0 g1 l$ G9 S一. 500ms延时子程序
+ ^& P _5 `1 L: Z程序:8 F, A/ @( X" C2 V6 j* J9 `& v% m
void delay500ms(void){
$ p+ Y7 t% j9 z6 \8 v unsigned char i,j,k;
i" {% ~3 ?. n% R7 a for(i=15;i>0;i--)
6 n3 c# z" B5 J' c for(j=202;j>0;j--)
5 @# E# Z" A( `) N4 W for(k=81;k>0;k--);
8 T4 S1 ^3 d: o7 g}
9 m; `3 ?4 F/ N) u, |产生的汇编:
$ O g3 Y X e. `( ~9 m7 @9 MC:0x0800 7F0F MOV R7,#0x0F9 T" H# N' y8 {0 m; M+ R$ y" N. R
C:0x0802 7ECA MOV R6,#0xCA" r% z6 d* h$ i9 W5 Z
C:0x0804 7D51 MOV R5,#0x51% ?$ ]. M. T8 X8 r
C:0x0806 DDFE DJNZ R5,C:0806
; `, q8 Y+ V+ G5 B! J3 Q5 w6 SC:0x0808 DEFA DJNZ R6,C:08041 z) i9 P$ N% V% P% T# a8 J
C:0x080A DFF6 DJNZ R7,C:0802/ p! d( r% s/ c" l
C:0x080C 22 RET
. d- G7 ?" N. {计算分析:
) B3 g* b+ J2 d程序共有三层循环
& d0 Q q% Z. R# i4 w一层循环n:R5*2 = 81*2 = 162us DJNZ 2us* A! Y5 a% p( h! L2 @$ k
二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us
3 K, D6 F! K# P+ w: y F8 ~三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us& _, y+ }, w- P7 s* J' T
循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
3 _- n2 m: z9 S' m7 R0 M延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
/ a6 k8 M/ [7 }. {) I计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
" Y4 M4 c; ^! G @' }; k& v! X1 u3 w# x; G: F, G+ S8 X; D
二. 200ms延时子程序1 ^. }2 {* P( Q3 S6 j9 l& M& I9 ^
程序:
6 P( h$ ]" D) d, Y) Rvoid delay200ms(void){- d7 o+ P H9 c. r8 k4 N4 @
unsigned char i,j,k;
8 w1 I" Q1 a4 ^2 | for(i=5;i>0;i--)- |& C$ E# g; }3 D' V7 r- ?7 @
for(j=132;j>0;j--): A. e. T6 f% H
for(k=150;k>0;k--);
5 I5 `3 k7 r# D' @}) \ }6 Z- l0 ^! U W
产生的汇编' D" Q& \# g7 V; i6 s9 L4 Z
C:0x0800 7F05 MOV R7,#0x05
6 _7 Z% V$ x2 U8 B9 T# tC:0x0802 7E84 MOV R6,#0x84
- K8 @2 Q7 g: C8 L8 EC:0x0804 7D96 MOV R5,#0x96
0 w- e, z( b4 v! U5 BC:0x0806 DDFE DJNZ R5,C:0806& O9 _1 d# a- n# _" z+ W
C:0x0808 DEFA DJNZ R6,C:0804
. {5 W; ], U0 FC:0x080A DFF6 DJNZ R7,C:0802! o$ q* E* ]! b- ?- e
C:0x080C 22 RET, s' Q' e9 ~$ Z# ?
; d+ g" K" M6 o: y三. 10ms延时子程序; ^2 D2 v8 k$ O U( v
程序:
2 T# C4 h' f9 }9 j5 y) Ivoid delay10ms(void){9 s/ [. F* ^9 I, j, r/ o, h
unsigned char i,j,k;/ n! o2 E8 m" m4 a
for(i=5;i>0;i--)- f& S/ n1 q' S2 ?7 o
for(j=4;j>0;j--)& `! J: G& ?: K$ {( s
for(k=248;k>0;k--);9 w! x3 u! J1 `
}
5 G5 V" U$ B! y4 f产生的汇编5 O6 A2 W2 x6 g+ ^+ S- b
C:0x0800 7F05 MOV R7,#0x054 x2 C$ X2 q) L4 \5 {
C:0x0802 7E04 MOV R6,#0x04) g9 n" f" o' G+ b7 I2 r5 M
C:0x0804 7DF8 MOV R5,#0xF8$ n6 {1 h( m" q- R/ A" `. E3 N$ y
C:0x0806 DDFE DJNZ R5,C:0806
3 E" {+ f( d, Z. dC:0x0808 DEFA DJNZ R6,C:0804( ~# t. l! g" V) H! l6 g1 L8 J
C:0x080A DFF6 DJNZ R7,C:08028 `# b* e) J( P! G4 C: e
C:0x080C 22 RET
; T) P; V& W3 k5 Z* S9 b( ]1 P& Q2 B3 I0 H# Q- x: V( H1 r
四. 1s延时子程序9 y8 b# h! I( n# l( o: D/ B% M
程序:
" d' Z- A: ?# ], L ivoid delay1s(void){: U' e% L4 z( p& E; Q% }* i
unsigned char h,i,j,k;# n1 W* X- X: m u, i: z2 I4 f; p
for(h=5;h>0;h--)4 k1 g. \3 i# ^0 n( s4 f6 g9 s
for(i=4;i>0;i--)6 J3 h8 A! k& ^1 Q7 K
for(j=116;j>0;j--)
3 R/ Q3 b( v8 }- _ for(k=214;k>0;k--);; n0 P3 X& \2 c/ \! Q; \5 A, b
}4 \% I: H1 H" L& p1 ~
产生的汇编
E1 e8 |! l/ V# jC:0x0800 7F05 MOV R7,#0x05
# N9 O0 R* w- u P& ]9 BC:0x0802 7E04 MOV R6,#0x04
% Q# _" a6 i: e/ j& cC:0x0804 7D74 MOV R5,#0x744 X9 J9 r) `# u( N
C:0x0806 7CD6 MOV R4,#0xD68 r7 ?3 r) x& W# a
C:0x0808 DCFE DJNZ R4,C:0808' l0 m& q# G% M5 o! ^6 P: M& E+ \
C:0x080A DDFA DJNZ R5,C:0806
0 H) ^/ t5 x% x# I% }% lC:0x080C DEF6 DJNZ R6,C:08043 M" D6 B" C9 q9 O# i6 {
C:0x080E DFF2 DJNZ R7,C:0802: a. n8 |5 @6 t
C:0x0810 22 RET% T& c' Y0 }8 A+ D8 c, A2 u
0 V& x9 B' `3 U H: B$ W5 x0 `- {) G1 m" L, g: C p2 `
4 ~7 R3 x0 ]! \. g' O6 k时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒; | . w; f; E1 ~/ I
/ X& p# f& C9 e, K. Q0 l- y
/ y/ P* z6 P8 N7 \# H- k
2 G# K& ~6 W& E4 x M2 F9 a6 q( R
5 A0 C- z; q: [; k) _- w- u | ) |5 Z# F& s- v% @
7 i3 s/ q, v0 a7 a" q& h4 }0 m |
- w: ?# B, L+ B2 Z |
|