|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
# ^: L' F2 ~ ]) r% y | (晶振12MHz,一个机器周期1us.)! A3 i% B1 _) `; b* Y7 z
一. 500ms延时子程序
. f, N1 p. v) l0 u程序:
! q: v+ U# ?& t) A5 Kvoid delay500ms(void){
/ O; ]' Q: M; P unsigned char i,j,k;! a9 u) E/ X$ I3 F; d3 W1 x: ]
for(i=15;i>0;i--)
9 d8 g0 G: c! {4 `: S9 M for(j=202;j>0;j--)
2 N( Y7 _7 _! x. P. k for(k=81;k>0;k--);
) R0 G* ~0 K; P5 t B2 @0 {}, ?% J, ~! ?9 P1 R# S. y9 a- b; A
产生的汇编:
' ^4 l( v1 R, OC:0x0800 7F0F MOV R7,#0x0F7 \7 S' B8 l* w1 x; U3 z9 o
C:0x0802 7ECA MOV R6,#0xCA
Z9 ?% s9 v! w6 R5 m: t$ yC:0x0804 7D51 MOV R5,#0x51
+ u8 l6 b# f/ k7 }' |' xC:0x0806 DDFE DJNZ R5,C:08064 E* }: x% n, r% _5 s! N. S" n$ J0 n
C:0x0808 DEFA DJNZ R6,C:0804
9 z0 v$ h& ^6 l" j& GC:0x080A DFF6 DJNZ R7,C:0802
+ q. W4 K8 L9 N iC:0x080C 22 RET
0 E! x7 A& H& I% b计算分析:' n5 l5 U& l! i" Y$ l; @
程序共有三层循环
5 |5 i# t8 @) z7 f8 U一层循环n:R5*2 = 81*2 = 162us DJNZ 2us
5 f# A8 x) A- Y7 V2 |, p* ]5 F" b二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us. N, x: N3 a/ B2 c6 [
三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us
& q6 E; O" D8 D* y! Q循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
2 L4 p0 T4 q/ F4 l8 S3 Q, Q延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms5 I9 m K; x, S5 b8 f
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+55 }+ D7 o! s" V3 u% q Z
3 v. H- B2 A: D7 F) m二. 200ms延时子程序$ ]! b3 d* a& K5 `3 I
程序:% u Y/ W) F+ q
void delay200ms(void){
$ K# O. Q+ Z- e6 [- L unsigned char i,j,k;- `; M1 o0 Q, |) B+ D
for(i=5;i>0;i--)- p, F" T2 ^8 w. G d8 R7 e3 H
for(j=132;j>0;j--)8 \, ^+ ^8 @% N7 R
for(k=150;k>0;k--);
1 v. T- k( ^ E6 b7 b" y}
! c. x7 B+ t- P产生的汇编/ E; C5 U" r: E( l
C:0x0800 7F05 MOV R7,#0x05. V4 v" t | ]* M0 ]
C:0x0802 7E84 MOV R6,#0x84
' s: \% p8 W) D0 `C:0x0804 7D96 MOV R5,#0x96. U3 a* |9 t: C7 @! n1 n6 c. N/ x
C:0x0806 DDFE DJNZ R5,C:0806) B$ |6 a8 W! C" T% ?
C:0x0808 DEFA DJNZ R6,C:0804# ~$ {0 ~6 Y% ]8 x
C:0x080A DFF6 DJNZ R7,C:0802, {/ _" f1 e) r( ^* b( ~4 m
C:0x080C 22 RET" M8 w0 b, U: t
% e- _6 B9 e2 q% N
三. 10ms延时子程序, _7 ^. e8 i; i7 t3 L4 t$ B
程序:6 \3 ?: T; i' z! L' D, Y* F
void delay10ms(void){( B9 d+ Y2 c! `& q
unsigned char i,j,k;2 B, g* I! Z5 v
for(i=5;i>0;i--)
$ ]: s* d# n e) [3 y9 ^ for(j=4;j>0;j--)$ d% W3 d0 h5 q& ?* O6 ?2 Z
for(k=248;k>0;k--);
) `6 M( Z2 S; q6 E% ~! V+ T2 g% s}" w! `. M u+ T I+ H; h
产生的汇编, z8 H3 O* [ z" V4 j! k$ w# _
C:0x0800 7F05 MOV R7,#0x05) D3 Z+ f8 |$ U! J* g' z
C:0x0802 7E04 MOV R6,#0x04 w6 b$ i' k$ \
C:0x0804 7DF8 MOV R5,#0xF8
- j$ c3 g: `3 `. v! LC:0x0806 DDFE DJNZ R5,C:0806% H2 ?0 Y, b' ^( c) L
C:0x0808 DEFA DJNZ R6,C:08046 `! {9 ^4 G4 k4 M; y4 S
C:0x080A DFF6 DJNZ R7,C:0802
; [# l' Y+ a( ]3 {, V' [C:0x080C 22 RET % B" W/ u- W4 \- q9 W
4 {. |: Q. y9 g! g: l d9 x
四. 1s延时子程序/ d* V2 ^" j' b
程序:/ l4 E; a2 ?( Y. y) e$ b1 c
void delay1s(void){9 M1 R( e% o% D0 o/ ?* W6 ~0 e
unsigned char h,i,j,k;1 D( Q7 ~/ w. q" A. G q/ \
for(h=5;h>0;h--)5 B. D6 p' H7 i
for(i=4;i>0;i--)
- Y! _: v8 V7 A% D1 K for(j=116;j>0;j--)" N; B6 j9 Z$ @6 d) x' ^% d
for(k=214;k>0;k--);
V/ h" O( L/ r: C6 e4 ^4 {7 V}. {: K) B& R. g0 |. o: H* ]
产生的汇编
& B/ y* r8 {* o; N4 I M& IC:0x0800 7F05 MOV R7,#0x05 y5 G6 w1 G3 G0 H. R6 r
C:0x0802 7E04 MOV R6,#0x04+ ~+ S2 i8 {5 h1 O
C:0x0804 7D74 MOV R5,#0x74
; d( M3 D8 c8 c9 f. ?: @C:0x0806 7CD6 MOV R4,#0xD6
" o' h; G4 t8 M1 y; g6 DC:0x0808 DCFE DJNZ R4,C:0808
+ C5 ~5 D: v4 a0 z: |( EC:0x080A DDFA DJNZ R5,C:0806
& L% P# B) u, p$ ] @& \C:0x080C DEF6 DJNZ R6,C:0804& b# y7 ?5 Z7 w' r1 ]' H2 J
C:0x080E DFF2 DJNZ R7,C:0802' v2 ~2 ~) [+ N" Z4 j& N) H) Q- A
C:0x0810 22 RET
" [' e+ I6 A+ R
% u% d7 }: v, w# s
& t/ a( z1 t2 @5 c7 `4 U2 Q. J* U1 \0 y6 x1 I7 m
时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒; | % R' f& z- P T8 J( I4 s# b
. C+ w" h/ S/ \2 e8 p; _
3 b- l7 a9 c+ _1 k& F. c/ j
1 P' Z6 i \ A& j9 d2 R% G& o6 D8 p' i) M
|
! ]+ a0 H; B7 |$ q! a- |7 @
# ?% _5 t) S; V( T: a8 S | 8 C3 ^& Y, C5 T2 ~. V$ P4 b
|
|