|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
5 q1 @. C G8 _/ Q( n7 n | (晶振12MHz,一个机器周期1us.)
h: f8 P* ~; h$ U一. 500ms延时子程序; p5 k1 }+ ^% P9 U' [0 k
程序:* f# ]+ O4 l* q) k8 Q9 \0 e g
void delay500ms(void){
4 Z9 ^2 Y, D2 P/ R! p0 ~, U! q unsigned char i,j,k;# l' m* [" h% F
for(i=15;i>0;i--)
8 h5 F' T- L: Z for(j=202;j>0;j--)8 ~. w- g( R0 W! M
for(k=81;k>0;k--);
- s9 z$ g q0 h& f6 }# E}
# s$ J( Q$ V( C" k& L4 f产生的汇编:
" v3 z- p& T' G. r+ z; lC:0x0800 7F0F MOV R7,#0x0F. \; [! ~. n. T1 S6 y( p
C:0x0802 7ECA MOV R6,#0xCA# @( ?5 J9 d9 g4 B0 Z! S7 X6 q
C:0x0804 7D51 MOV R5,#0x51
+ A) I3 B% D9 c# F9 p, qC:0x0806 DDFE DJNZ R5,C:0806
. j- `1 N ]8 J7 }. ]- pC:0x0808 DEFA DJNZ R6,C:0804
: z1 I7 Z3 T% v% aC:0x080A DFF6 DJNZ R7,C:0802
! i W0 R% C2 ~; kC:0x080C 22 RET
: b5 f6 }. T; L& X5 P. K! W计算分析:
+ R7 C3 L) Z, d5 Q3 p7 [程序共有三层循环$ L, ^% R2 x$ G K' y3 i) y& m% m
一层循环n:R5*2 = 81*2 = 162us DJNZ 2us9 ?: y2 [- x/ L9 r
二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us
# E, m* P7 D& C+ G& {9 {三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us* o/ |. t% V: \2 c( D& u4 ^4 O
循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
) r A6 k7 G4 q. m, I延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms6 R. k) M6 I1 J$ A8 w. K
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
$ l7 n" l ?% O. ]1 [2 x
$ \ ?. q5 ~5 R. ~& N, K h二. 200ms延时子程序) P/ K' _; L$ @- {8 N4 r
程序:
8 e! |2 h0 H" Y+ j# [. v! r* u) `8 _void delay200ms(void){
* d% W! R5 P* k9 S% g* Q2 o: C. m& g9 n+ c unsigned char i,j,k;
7 ^/ N8 W" t& @7 J; O! v9 Z- { for(i=5;i>0;i--)* Q, E1 h3 L$ |, _
for(j=132;j>0;j--)
3 K: K; B$ l3 f' i for(k=150;k>0;k--);
7 V0 i) f; r( B7 ?( B$ X6 e}
: l/ r9 e4 X: o: k! r产生的汇编
2 w5 |6 I: @; ` @, K' JC:0x0800 7F05 MOV R7,#0x05 c) j0 n+ a: C" I, Q
C:0x0802 7E84 MOV R6,#0x84 ]- _+ G- Q. t/ P4 i1 ?
C:0x0804 7D96 MOV R5,#0x967 B" M, I( ~7 ^/ r% y+ g
C:0x0806 DDFE DJNZ R5,C:08067 P" q: L6 f* \+ B& {( v
C:0x0808 DEFA DJNZ R6,C:0804
. O, u# |$ A& I+ eC:0x080A DFF6 DJNZ R7,C:0802
" o' \! _& b% a$ E; XC:0x080C 22 RET
6 V! r6 T3 G* ?) Z7 {4 v7 n# \4 x4 O4 K1 t
三. 10ms延时子程序 w, c$ P, M# J: P: I
程序:1 J& D! h( [7 N
void delay10ms(void){3 ^9 P$ K+ X W* B( E
unsigned char i,j,k;
' v+ a2 e G0 n! d: ^4 L: E for(i=5;i>0;i--)9 J, B4 ^' C5 o# U
for(j=4;j>0;j--). p% a8 h0 }' d, V/ z* z
for(k=248;k>0;k--);5 i" L0 ^ S+ X T% A
}0 P5 k3 ^5 c' Z) R
产生的汇编
$ v4 h! g) n9 f8 oC:0x0800 7F05 MOV R7,#0x05
3 R" m. X Z6 E* s L% g" b5 MC:0x0802 7E04 MOV R6,#0x04
4 Q: }% T9 |2 RC:0x0804 7DF8 MOV R5,#0xF8# B: P, G, k- q- Q1 w+ W
C:0x0806 DDFE DJNZ R5,C:0806
- X' p0 ~# k5 zC:0x0808 DEFA DJNZ R6,C:0804
7 Z7 p1 V4 q! H d# KC:0x080A DFF6 DJNZ R7,C:0802: U9 W% x, h3 q- S& }1 X8 d
C:0x080C 22 RET : A* k6 \) f" Y5 M
0 l5 o8 ^/ |# I! f, F
四. 1s延时子程序" ^. }' H v6 x. ?5 n3 N. a, ?% Y
程序:
4 L: K) t8 t; [ bvoid delay1s(void){9 r6 U4 z, x; F! g$ D. z, G
unsigned char h,i,j,k;
1 \* `# {) o# ` for(h=5;h>0;h--)- s. _( M5 [1 n- b4 H" r$ T
for(i=4;i>0;i--)
; }- I% u# u- N: f9 \ for(j=116;j>0;j--)
& z+ z. n5 D8 T1 ^* z- l) z for(k=214;k>0;k--);
o- M9 N& D- i, e% L8 p}
. ?6 ~& P$ n1 y4 _. b3 ]产生的汇编
5 g: {& j# O1 C( s. j8 @C:0x0800 7F05 MOV R7,#0x05
0 B& J% d& j" s3 b" K7 EC:0x0802 7E04 MOV R6,#0x04
! `& F5 Q( K( o. y# N2 q& @$ |' IC:0x0804 7D74 MOV R5,#0x74
) b. \& |1 `# ?, k/ tC:0x0806 7CD6 MOV R4,#0xD6
) Y$ G/ s# M0 u- c o) \ M: s4 BC:0x0808 DCFE DJNZ R4,C:08088 g0 a( v; K. ?5 ]. K w% K
C:0x080A DDFA DJNZ R5,C:0806
n. a5 o! t0 }$ q+ LC:0x080C DEF6 DJNZ R6,C:0804
& B5 I7 h; H0 B2 hC:0x080E DFF2 DJNZ R7,C:0802
1 ^( b1 ?: F$ `" g% xC:0x0810 22 RET4 e6 N+ k8 U. v2 [/ q
- p2 Y' [1 @5 V* G$ N- @
4 u/ W) I" R n4 D; N- x: V4 s+ z! O6 z! c+ t; W
时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒; |
' C1 O$ @0 P3 J9 R: q6 k( x! X$ |' R8 a) A0 ]6 }
: r" t* D+ G7 l& B4 [3 g
/ j- c. M( B# l+ O2 i
" ?0 e( D% K, q$ B" j9 h } | ( J( ~& l$ w% v, X3 N
1 o: U) {( \% ^' O( V4 k | ! u5 x1 i: t9 d$ h
|
|