|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
(晶振12MHz,一个机器周期1us.)! G/ x* v! K1 d( q% D4 o2 ~
一. 500ms延时子程序- }" r: P2 F$ \9 G3 ]: r( @! b
程序: # k, ~ ^# r* M( F$ |9 c8 J( F
void delay500ms(void){8 F$ L) ?4 f* H* h
unsigned char i,j,k;
( o. |+ X }2 V" p* y, h: q5 E/ W' v for(i=15;i>0;i--)3 H1 H; b- V# x3 w- X8 X
for(j=202;j>0;j--)2 d$ {) E& f: N7 H5 ^ L' n# v3 k
for(k=81;k>0;k--);
9 U" n; ?9 n7 q& O/ {* B}
9 k2 F/ L! G1 L+ a产生的汇编:
, U! T. g) X+ d6 B5 _' dC:0x0800 7F0F MOV R7,#0x0F( U. ?) B" ^8 O" f$ E
C:0x0802 7ECA MOV R6,#0xCA
' O7 U' d* q0 \; q8 vC:0x0804 7D51 MOV R5,#0x51
4 w2 I0 J- Q O7 k; D/ E" VC:0x0806 DDFE DJNZ R5,C:0806
; W# W( ?/ @3 ?" N) oC:0x0808 DEFA DJNZ R6,C:0804 B1 d, w7 A) G5 }$ ]
C:0x080A DFF6 DJNZ R7,C:0802
. E# `& L% g9 ^8 K& A+ m1 K, aC:0x080C 22 RET 1 ]# ?" F0 O# i# b& s0 J* ^
计算分析:- y# Q7 `1 x6 N( B% D: V
程序共有三层循环
: W2 H# {$ D/ C; u9 E3 _- M一层循环n:R5*2 = 81*2 = 162us DJNZ 2us: n/ @' C1 l3 e8 d+ `3 X
二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us5 h4 l2 U7 E: a7 ]6 p/ V7 {8 h
三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us
6 f0 } _* @' _0 O& R循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us6 @: a& `* m1 M/ ?
延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
* ~, p. s' p4 q+ O) [! j' x b计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5" P' Q( G/ p" ?/ I+ X
8 R5 `- W9 l/ H* G9 a+ {& j; I二. 200ms延时子程序" I) s& e( S: n* J
程序:
. ?+ |' Y" H8 c! F. C+ o; k1 a" @void delay200ms(void){" H* a8 S" e% e( b0 f
unsigned char i,j,k;4 O j$ p$ V9 v U) j5 Z9 `
for(i=5;i>0;i--)
+ u' G5 i& L. a for(j=132;j>0;j--)9 ]& V* @2 A4 Q2 X
for(k=150;k>0;k--);2 t& u, [/ K9 w/ j6 z
}+ ?# @5 G: n5 A8 N
产生的汇编
" h) U! [, q% ~$ {: RC:0x0800 7F05 MOV R7,#0x05: I* [9 d P4 k
C:0x0802 7E84 MOV R6,#0x84
8 a+ Q- m5 R8 f' _/ tC:0x0804 7D96 MOV R5,#0x965 M. k; l& @) n2 ?4 `
C:0x0806 DDFE DJNZ R5,C:0806- Y* q% d; s7 J: S/ G
C:0x0808 DEFA DJNZ R6,C:08044 T$ {9 A+ U$ Y% _* |
C:0x080A DFF6 DJNZ R7,C:0802
]( E5 p9 l( @4 G( ~; BC:0x080C 22 RET1 [5 u2 k+ @! L3 C) w# Q
8 a& o& E e5 j& _" \$ \
三. 10ms延时子程序1 S$ ~" e; F" h1 Z
程序:% f* B0 r$ Q8 Z/ v, t1 I3 o
void delay10ms(void){* V! E% J. H% r0 }) `& T
unsigned char i,j,k;$ J* ?4 E9 e' ]$ m! {9 I
for(i=5;i>0;i--)9 J. |" Y6 h T. U; _
for(j=4;j>0;j--)
) J1 Y; ? n6 K; y! `4 W2 k; a for(k=248;k>0;k--);. F) e4 j. e9 @8 }' p3 }% i6 H6 B; H
}- b& p9 {# ]3 f* |5 W
产生的汇编/ z+ g& {7 l8 x6 r" R% u
C:0x0800 7F05 MOV R7,#0x05
5 ^7 S. a3 H7 s& RC:0x0802 7E04 MOV R6,#0x04" i5 g( d- i$ g9 M0 Y
C:0x0804 7DF8 MOV R5,#0xF8
# R! D! v, B h/ S! J& MC:0x0806 DDFE DJNZ R5,C:0806
: n0 i) Q% i# |! w1 HC:0x0808 DEFA DJNZ R6,C:08046 ?4 P8 {/ m: _6 D2 i+ |: H D3 O6 o
C:0x080A DFF6 DJNZ R7,C:0802
% G, t' e) m4 m6 KC:0x080C 22 RET 5 y- m# W" s6 W: q
7 t+ {0 U; Z2 V* S. G
四. 1s延时子程序 ~; T' A9 U" k5 I
程序:1 j! x, d7 \/ ?1 e! t! R
void delay1s(void){2 Z( G+ \4 ~# |9 h
unsigned char h,i,j,k;- A9 f6 |( ~; Y/ ~& Y$ V
for(h=5;h>0;h--)" P! R" X6 U- E4 ~
for(i=4;i>0;i--)
/ l. V1 E) |, f# Q& {2 h for(j=116;j>0;j--)
' x" u* F3 H7 }, T; F+ Z for(k=214;k>0;k--);8 r+ d4 V/ R( W( t K
}0 m% ]' L: {: [/ I4 f* e
产生的汇编
' f) K; G! ?% O& BC:0x0800 7F05 MOV R7,#0x05
m( l9 D, @2 y, P, x' XC:0x0802 7E04 MOV R6,#0x04, D9 J. A) v7 z+ U) ~* p
C:0x0804 7D74 MOV R5,#0x74
4 A# n- O) ?" l E7 N3 @) nC:0x0806 7CD6 MOV R4,#0xD6
" d/ k* d. v" n2 Y( v; N3 T' Z* RC:0x0808 DCFE DJNZ R4,C:0808
: |* t- k' |+ Z7 n* zC:0x080A DDFA DJNZ R5,C:0806
) `5 O+ }% `4 \! J/ P, QC:0x080C DEF6 DJNZ R6,C:08046 ^! H, Z, {% _' r
C:0x080E DFF2 DJNZ R7,C:0802- C; t7 [ e7 O' N+ U1 T' g4 P
C:0x0810 22 RET 4 g3 D P4 \* p# P" ^' L1 k9 }: z( q
+ o8 ^6 Y% E! \9 R( c! R
时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;- K# A' c* u" T& U- C& \
|
|