|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
) ?* L4 d5 c: i6 k& B4 p5 O
| (晶振12MHz,一个机器周期1us.)
* M: u* b0 Q: S* J4 w: w一. 500ms延时子程序# f Q& ]$ d3 W( {
程序:
, S3 `! w: x# Y: B- _: h5 Pvoid delay500ms(void){
# n' C/ r2 J' x' U5 P" i unsigned char i,j,k;* E: T. F$ _; l
for(i=15;i>0;i--)% @% A0 Y$ N* ^9 l. S% ^
for(j=202;j>0;j--): \5 L1 W6 d. H" o. a; k# D
for(k=81;k>0;k--);
$ x" T) `7 k+ S- _4 h) n}
6 y. [, h/ |" n# Q8 J4 D1 [产生的汇编:, K9 j! ^. h* K: j
C:0x0800 7F0F MOV R7,#0x0F
* o$ X; w5 Y; G/ C2 RC:0x0802 7ECA MOV R6,#0xCA4 G9 t6 S- f1 p( ?0 f- V
C:0x0804 7D51 MOV R5,#0x51
# M! t; ^- K0 x! [# a3 A, `# KC:0x0806 DDFE DJNZ R5,C:0806; d$ C" Y3 `) D* n6 Y3 L5 N; H
C:0x0808 DEFA DJNZ R6,C:0804
$ d* H5 e. J3 ]- h! eC:0x080A DFF6 DJNZ R7,C:0802 G. z5 v- N5 D: C' y0 @
C:0x080C 22 RET
, a/ p2 C( O- ]计算分析:
/ ]$ G. R# x! {9 |; ?. k1 h- n程序共有三层循环7 ~$ p$ W3 T: s/ m' f
一层循环n:R5*2 = 81*2 = 162us DJNZ 2us, ^* _" q! [" s Y
二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us$ E3 S' p& A" {. Z1 }: G8 R
三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us8 c, m7 @' _$ c( H' e* q
循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
$ u" `' y( Y" Y" T8 N延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms, F8 K8 ]# R5 [$ k, N. }* P. N
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5; A8 O. l: u, O% A& N
9 [5 e4 g2 ^& i5 H* q" }( `二. 200ms延时子程序2 R# A. p" Y; W! Z- J; f' s/ e
程序:; c0 B g* z; [+ a
void delay200ms(void){
$ f" H% |' B1 ]: a7 R, A unsigned char i,j,k;" m$ U/ m: n( g1 a5 w
for(i=5;i>0;i--) h" h' j/ H+ Y: b1 ]3 Z
for(j=132;j>0;j--)
* I- \, t" N6 A* o for(k=150;k>0;k--);8 A5 `' U6 x$ U+ i, o& _: ?& l. C
}3 u2 Z3 K4 R# L
产生的汇编
: b$ S. w7 S" O! @ CC:0x0800 7F05 MOV R7,#0x05
6 D* |7 T$ N W: N5 u$ [- NC:0x0802 7E84 MOV R6,#0x84/ T0 W, z' [: s, \2 R8 ^. y& f
C:0x0804 7D96 MOV R5,#0x962 x: I1 B7 m" w1 ?: H7 z
C:0x0806 DDFE DJNZ R5,C:0806
2 b6 x J8 I4 n- kC:0x0808 DEFA DJNZ R6,C:08041 s2 q! ^+ Z8 r- K
C:0x080A DFF6 DJNZ R7,C:08025 e, k: {' |7 Z! _) q! y
C:0x080C 22 RET
- X0 C) w/ [! a. E# Q# c- W$ C
) o0 e- ]# a& d$ F+ x, N; l9 b三. 10ms延时子程序- C; o# M9 t( l
程序:+ L0 z8 ~$ {* O* c6 r# w( F
void delay10ms(void){
: e# z" X6 v5 p- B unsigned char i,j,k;
/ P, x" g. H, b7 T1 m0 [3 Y for(i=5;i>0;i--)& o1 S5 f7 B. u* w/ M
for(j=4;j>0;j--): S' X* t4 z2 E" {- Q
for(k=248;k>0;k--);" k3 i+ }+ ]: Z/ b
}4 u, T$ U. k; s0 J/ p
产生的汇编) p/ h) r. y& f% F3 Q5 U% n; q
C:0x0800 7F05 MOV R7,#0x05. Y; B. X! W: m9 b# V
C:0x0802 7E04 MOV R6,#0x048 ~% Z% y* y( v' ?, L' n8 J& C
C:0x0804 7DF8 MOV R5,#0xF8
4 |- S* b1 i! Y! P5 NC:0x0806 DDFE DJNZ R5,C:08060 ~; Y/ A p) u! t" h, i
C:0x0808 DEFA DJNZ R6,C:0804# @; Q2 W- d1 u. @0 d8 |
C:0x080A DFF6 DJNZ R7,C:0802" `& _0 m O4 j4 U c1 h" A- s3 R* O' O
C:0x080C 22 RET
$ x6 S1 @) Z! p4 F
/ ? ~5 l/ X& e6 ~$ s" p7 C四. 1s延时子程序
+ f0 e7 p$ L5 J, _程序:8 o1 i7 r! c; ^
void delay1s(void){
) p/ g6 O5 P$ {( a. I unsigned char h,i,j,k;
+ x" V4 m: ?% S% A for(h=5;h>0;h--)9 u- R& s# p$ V% b6 H h) Q1 Q$ `
for(i=4;i>0;i--)
% X3 U# l4 z) q N for(j=116;j>0;j--)" [6 X6 z, F' h" g2 ?8 i9 _
for(k=214;k>0;k--);
3 y/ u# P# n5 @3 _% C0 M$ H# G' r}* k7 o% e9 e2 f% `
产生的汇编
6 b& i9 G# M5 p* ?C:0x0800 7F05 MOV R7,#0x05
N$ \4 n3 Z8 m! D3 K- w& W, Y7 CC:0x0802 7E04 MOV R6,#0x04# A! q* H; B @6 q1 A8 H
C:0x0804 7D74 MOV R5,#0x749 j( E! D* `" ` Y
C:0x0806 7CD6 MOV R4,#0xD6! \! s5 s% N$ t/ J& j
C:0x0808 DCFE DJNZ R4,C:0808
# [' T- s8 S) m& ?( YC:0x080A DDFA DJNZ R5,C:0806
9 e+ c% P4 j3 u: L5 rC:0x080C DEF6 DJNZ R6,C:0804) t7 O+ R+ h" ~. S
C:0x080E DFF2 DJNZ R7,C:08024 G7 S' F# v& ~( m! t2 s
C:0x0810 22 RET4 o2 t- ~" b% T' ~( f8 V& I' l" F
. p7 B3 P8 {' r- @& B6 X
. {/ j r2 ?- B
/ ^2 L/ D. E N2 @* Z w% q时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒; |
) I! q% T% f: \5 p' _ K; T# ^/ C% g% Z4 l! |$ {: ^
' @# T6 ^7 T X1 ]- `5 Q2 J. ~2 z; n7 Y5 T
- J, a y; u$ U% P9 d | $ r" t& z2 V' k1 x; Z
9 D0 i- @- j2 G5 {) k& Y, J |
- K) L' D3 Z4 e: I' z |
|