|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
(晶振12MHz,一个机器周期1us.)
+ h! E4 Z/ h) l) V7 I- O一. 500ms延时子程序- i* i- {5 q; H7 q3 U
程序: ! u2 U3 x. |+ d
void delay500ms(void){
1 m0 @2 y3 w1 E6 Q/ _2 z- b unsigned char i,j,k;
. t8 _: ~( f) H5 X; v& w for(i=15;i>0;i--)
9 z, }; v) Y1 o# }; N: l for(j=202;j>0;j--)
" h6 S s& f9 F9 D# n: ` for(k=81;k>0;k--);
% \+ i7 R1 a# N d4 H}
5 w2 q5 q. b3 Q3 Y产生的汇编:& x4 v O K- @
C:0x0800 7F0F MOV R7,#0x0F
1 Z) R/ F0 ~. y- u6 D) x" F, E X/ `C:0x0802 7ECA MOV R6,#0xCA
, u( d- v# |; j3 ~ \( AC:0x0804 7D51 MOV R5,#0x511 p7 y( S* Z6 C/ i3 e# Y
C:0x0806 DDFE DJNZ R5,C:0806
6 Z" ^5 h1 P, e F1 ^C:0x0808 DEFA DJNZ R6,C:08049 H- R/ u9 `. ^/ T; u; I3 ^% I/ H
C:0x080A DFF6 DJNZ R7,C:0802
2 a% e8 B1 h* Q+ Q+ p3 L; VC:0x080C 22 RET
0 y( l2 y% b1 j0 Q+ B计算分析:
, r4 S) C$ R. A! s9 k2 T程序共有三层循环: g+ d$ x6 k1 v% V, g
一层循环n:R5*2 = 81*2 = 162us DJNZ 2us
% o2 w& c9 y$ I; w+ A" O2 g+ U. B' W二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us6 m& Y2 K& v* f+ K/ l% A
三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us4 E. v8 n# q2 Z* f1 I# ]
循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us* }- z6 n6 v, ?, p
延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms& V& U1 l& e7 r r. N2 d
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+57 K& y$ b, p& u: l) n
a9 {+ u8 L* |% a% {# f$ i& o二. 200ms延时子程序
5 g# Z& v! M& f程序:' ]2 p4 [9 z, }2 S% m2 R) }1 `6 _
void delay200ms(void){
& V( N/ s( M# ^+ _- I) [7 y unsigned char i,j,k;* r5 C% J2 H8 l5 F0 w
for(i=5;i>0;i--)
- M9 H7 `8 d! P7 M! y6 F, \6 p for(j=132;j>0;j--)
8 J) J6 Q- C$ X+ ~. ?' I* P1 j for(k=150;k>0;k--);
F6 _+ j9 ?, R$ ?4 m$ q}8 z, w7 M, D5 b( u( ?
产生的汇编; ]$ W" F7 G6 E/ k/ ~
C:0x0800 7F05 MOV R7,#0x05
- Y0 l2 J* b. F; { e/ XC:0x0802 7E84 MOV R6,#0x841 G0 d) H2 I" e& g
C:0x0804 7D96 MOV R5,#0x96& Z) v! F9 ?' g& u% W
C:0x0806 DDFE DJNZ R5,C:0806$ H! H# E% o+ m2 A% v; }& y
C:0x0808 DEFA DJNZ R6,C:0804
; n) f9 |- ^ t7 yC:0x080A DFF6 DJNZ R7,C:08027 L. ?6 H: D& s& K
C:0x080C 22 RET
4 z$ Q# U& ~8 n' {0 A0 n% ^- b: d, ^$ G& s
三. 10ms延时子程序
- y- t7 C5 A" U" K: p& ?5 L# y9 {( N程序:
# a/ e+ `& R5 @' ?) Nvoid delay10ms(void){
$ d) }- s/ L3 Y$ I' w unsigned char i,j,k;
, @& Z+ z9 J3 v: Z for(i=5;i>0;i--)1 V/ _' L/ k; s5 k5 f
for(j=4;j>0;j--)7 ?5 ~3 i+ P2 N
for(k=248;k>0;k--);
8 l/ X$ o. t0 u' d}& D. f! R. k" v: X8 ~4 s
产生的汇编3 F- C1 h8 |" d1 B
C:0x0800 7F05 MOV R7,#0x05
; w; ]0 R" }7 c9 D V4 e5 h1 FC:0x0802 7E04 MOV R6,#0x04
; v- D; c0 i( F0 i* LC:0x0804 7DF8 MOV R5,#0xF8
5 Z" D) g' ?' L4 b( S: t4 v0 JC:0x0806 DDFE DJNZ R5,C:0806) ]" ^' W6 i' Y* [
C:0x0808 DEFA DJNZ R6,C:08045 q0 Q) n$ a0 a2 ^1 V
C:0x080A DFF6 DJNZ R7,C:0802
* Y% U" H. e5 ^, }& j4 l8 e6 BC:0x080C 22 RET
+ s) p: y1 P8 n2 |3 p+ {3 G; n2 v3 p: A. I
四. 1s延时子程序
% b7 ^* T; B# J: |! W' H h2 p程序:' i5 Y' b2 W( h& ^ S$ o
void delay1s(void){0 F1 ^; s0 u" v5 w! D
unsigned char h,i,j,k;/ ?% v5 X7 I+ T; f0 S7 o. C$ t
for(h=5;h>0;h--)/ x. ^, \; E* A+ z
for(i=4;i>0;i--); W) x6 U3 e" p& b; D+ Q1 x8 o' u
for(j=116;j>0;j--)
, l+ R! B0 {8 Z3 L `8 n& j3 S2 k for(k=214;k>0;k--);
2 m0 F3 `2 y5 ]" a7 V( G V}2 _, A7 T& V: Y3 }6 Z3 q
产生的汇编
0 B1 a6 H& s1 D$ x ?: z7 u1 FC:0x0800 7F05 MOV R7,#0x059 X( f) }: m1 N) \1 O
C:0x0802 7E04 MOV R6,#0x04; x( }3 I9 G8 e" O% b( E9 }0 J
C:0x0804 7D74 MOV R5,#0x742 W9 U$ S {: w- q5 A
C:0x0806 7CD6 MOV R4,#0xD6) W" u1 n# c7 l& q+ `. C! K
C:0x0808 DCFE DJNZ R4,C:0808
# G+ e: F4 U' v7 y N) f+ Q0 jC:0x080A DDFA DJNZ R5,C:0806
: C2 ~- _5 U) t3 P0 V/ H0 FC:0x080C DEF6 DJNZ R6,C:0804
3 ~( P2 R0 C7 V; k% _8 ]) Y0 gC:0x080E DFF2 DJNZ R7,C:0802
1 F3 @1 m- Z' p6 BC:0x0810 22 RET ! @3 X+ v1 j* [/ s- z* L
- L2 @# r9 {6 k y" Y$ Z
时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;
- |% g X* A' X* R! ` |
|