EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
(晶振12MHz,一个机器周期1us.)& L6 W4 b, v& M
一. 500ms延时子程序
- y: U+ t( K. C3 {* j程序: , O3 W$ w q4 f9 y' N
void delay500ms(void){ D% n( z4 @' q% q
unsigned char i,j,k;0 I$ j0 c8 }+ \8 z1 }. T
for(i=15;i>0;i--)5 a; [: d3 o9 @ ?
for(j=202;j>0;j--)! u$ e2 H2 R9 G1 L( Y, c
for(k=81;k>0;k--);$ g2 B! V- ^& |% w) r( {
}
0 H. n7 F9 e! j产生的汇编:0 Q* ~7 Y4 c4 G6 y: ~
C:0x0800 7F0F MOV R7,#0x0F1 e- |1 x8 d3 Q7 a9 m
C:0x0802 7ECA MOV R6,#0xCA
! k" X4 G: _' ^) y) y, o3 t: eC:0x0804 7D51 MOV R5,#0x516 f/ L+ {! _! f1 a
C:0x0806 DDFE DJNZ R5,C:08063 d, x0 i) v- v# ~7 t6 W
C:0x0808 DEFA DJNZ R6,C:0804
4 b% }, t3 A& K a1 D; ^C:0x080A DFF6 DJNZ R7,C:0802" S, i7 x) D: W
C:0x080C 22 RET h) D, u0 M1 z
计算分析:
' H. }: L7 D- z$ I3 U9 P1 K( G& G程序共有三层循环' R+ }9 W5 Q# a. D# } U8 H
一层循环n:R5*2 = 81*2 = 162us DJNZ 2us: t2 H' L8 C6 ^3 ~& f3 h+ I# w4 @
二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us
2 B+ C) k; \% C2 l三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us" g- ]2 x: T( ~! d" O% w- g6 I- u
循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us0 c; Z/ ^! C" s/ {
延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms4 G! c. k& V, J) g
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
A# E% t! S3 Z& W+ q7 K/ J b& s: {' V
二. 200ms延时子程序
0 l7 c; n8 z5 D# F" z* N' a. o程序:
1 ~) M0 r/ e3 ^- _/ }void delay200ms(void){% Y4 U; ~+ F, E! r
unsigned char i,j,k;6 |& p- [- x* y, i
for(i=5;i>0;i--). o4 ]: A( N) ?. p9 n! X$ w
for(j=132;j>0;j--)
+ ?$ |: y9 b1 B5 i8 Z- \0 @ for(k=150;k>0;k--);
8 @1 v$ L" I( _) y}
- B! h9 s, Q" l0 L产生的汇编
# }9 @# A k* E. C# g( y" wC:0x0800 7F05 MOV R7,#0x05, O; \/ H- e! h4 C/ q: T7 I; _
C:0x0802 7E84 MOV R6,#0x84
; s4 s/ I8 ^# q& fC:0x0804 7D96 MOV R5,#0x96
" |, L$ B. n' T) WC:0x0806 DDFE DJNZ R5,C:08062 c+ ^, T$ U8 e0 E5 u
C:0x0808 DEFA DJNZ R6,C:0804% v b+ M1 v" }# t+ B7 z. }, Q
C:0x080A DFF6 DJNZ R7,C:0802
0 F2 c$ d% ?% u) T) L; v& `C:0x080C 22 RET
$ r$ s. ~6 J' F) ? H P" J9 r1 e3 U7 c, B( v
三. 10ms延时子程序" i1 b7 E; u* F& s
程序:
3 w- T3 H \- u: R" ~- p% _# B2 Svoid delay10ms(void){8 Z' S0 R/ G! C( m6 w
unsigned char i,j,k;
' Q8 j* e7 f% B3 l+ h# |2 Z for(i=5;i>0;i--)
1 |; b. |7 B* D* n/ o for(j=4;j>0;j--)9 s9 `1 a7 O' |
for(k=248;k>0;k--);
8 g$ Y( G( W! Y. D}
" m \$ t! j: a: u3 c) w产生的汇编
3 \6 p9 C( K' ?$ A6 N4 N' AC:0x0800 7F05 MOV R7,#0x05$ k! V9 l. K" \2 L/ ^; i
C:0x0802 7E04 MOV R6,#0x04
4 T5 j5 d) V7 gC:0x0804 7DF8 MOV R5,#0xF8
" Z3 H1 c$ E# J$ j" RC:0x0806 DDFE DJNZ R5,C:0806
# \- n- O: o1 o% z c$ y' a7 K% sC:0x0808 DEFA DJNZ R6,C:0804
* n" n3 Q2 _. EC:0x080A DFF6 DJNZ R7,C:0802" c6 b; U. O; H9 g
C:0x080C 22 RET 7 j+ D/ G. o- i! X' Z
5 u* z% O* A* I) a' m! T9 ~* k
四. 1s延时子程序' Y; I, a$ J e, W& g& `, @
程序:
% ~% }% d# u2 J" c5 D1 Gvoid delay1s(void){
8 o2 j, R5 D+ L3 ^8 C; n unsigned char h,i,j,k;) ?0 _( Y: q, I; m
for(h=5;h>0;h--)# d0 m; C- Z' q8 v8 m
for(i=4;i>0;i--)
1 @/ ~2 \1 t1 w; D8 p A' O6 a for(j=116;j>0;j--)( o; n. ^1 B0 m: o! R
for(k=214;k>0;k--);9 l- B0 ~3 Y: k. s) Z9 a
}
5 s* g/ \, ]0 `: g- {. U9 z7 ^) u/ H产生的汇编
5 P- S. x, a" b+ _ v: V3 \C:0x0800 7F05 MOV R7,#0x058 v5 c; P1 w" J8 l; @& {7 h4 Q8 M9 Y
C:0x0802 7E04 MOV R6,#0x04! E" S. C9 {/ D$ M: o; s
C:0x0804 7D74 MOV R5,#0x74
2 z+ ]- z0 {5 ~% A# s8 Z, wC:0x0806 7CD6 MOV R4,#0xD6
6 T1 |6 t7 D: m% C5 ]8 XC:0x0808 DCFE DJNZ R4,C:0808" G) f5 B3 l/ H( p Z @5 l1 g
C:0x080A DDFA DJNZ R5,C:0806
4 n4 I" s+ p3 @" b0 T$ _C:0x080C DEF6 DJNZ R6,C:0804
" @) A/ C1 d/ N6 S2 Y% iC:0x080E DFF2 DJNZ R7,C:0802
7 R4 U" s0 K0 |C:0x0810 22 RET - h! O" {; m _* O+ R7 @0 f" v! J/ _
9 M: h! E ~" h0 s) M0 t& ~
时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;
& [8 x; h# d$ f4 N |