找回密码
 注册
关于网站域名变更的通知
查看: 239|回复: 3
打印 上一主题 下一主题

单片机C语言延时程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-11-25 13:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

$ b7 t  S  j. J7 z/ `; E
(晶振12MHz,一个机器周期1us.)
7 x: @; ]8 n6 J, H0 g1 l$ G9 S一. 500ms延时子程序
+ ^& P  _5 `1 L: Z程序:8 F, A/ @( X" C2 V6 j* J9 `& v% m
void delay500ms(void){
$ p+ Y7 t% j9 z6 \8 v   unsigned char i,j,k;
  i" {% ~3 ?. n% R7 a   for(i=15;i>0;i--)
6 n3 c# z" B5 J' c     for(j=202;j>0;j--)
5 @# E# Z" A( `) N4 W       for(k=81;k>0;k--);
8 T4 S1 ^3 d: o7 g}
9 m; `3 ?4 F/ N) u, |产生的汇编:
$ O  g3 Y  X  e. `( ~9 m7 @9 MC:0x0800     7F0F      MOV       R7,#0x0F9 T" H# N' y8 {0 m; M+ R$ y" N. R
C:0x0802     7ECA      MOV       R6,#0xCA" r% z6 d* h$ i9 W5 Z
C:0x0804     7D51      MOV       R5,#0x51% ?$ ]. M. T8 X8 r
C:0x0806     DDFE      DJNZ      R5,C:0806
; `, q8 Y+ V+ G5 B! J3 Q5 w6 SC:0x0808     DEFA      DJNZ      R6,C:08041 z) i9 P$ N% V% P% T# a8 J
C:0x080A     DFF6      DJNZ      R7,C:0802/ p! d( r% s/ c" l
C:0x080C     22        RET      
. d- G7 ?" N. {计算分析:
) B3 g* b+ J2 d程序共有三层循环
& d0 Q  q% Z. R# i4 w一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us* A! Y5 a% p( h! L2 @$ k
二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us
3 K, D6 F! K# P+ w: y  F8 ~三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us& _, y+ }, w- P7 s* J' T
循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
3 _- n2 m: z9 S' m7 R0 M延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
/ a6 k8 M/ [7 }. {) I计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
" Y4 M4 c; ^! G  @' }; k& v! X1 u3 w# x; G: F, G+ S8 X; D
二. 200ms延时子程序1 ^. }2 {* P( Q3 S6 j9 l& M& I9 ^
程序:
6 P( h$ ]" D) d, Y) Rvoid delay200ms(void){- d7 o+ P  H9 c. r8 k4 N4 @
   unsigned char i,j,k;
8 w1 I" Q1 a4 ^2 |   for(i=5;i>0;i--)- |& C$ E# g; }3 D' V7 r- ?7 @
     for(j=132;j>0;j--): A. e. T6 f% H
       for(k=150;k>0;k--);
5 I5 `3 k7 r# D' @}) \  }6 Z- l0 ^! U  W
产生的汇编' D" Q& \# g7 V; i6 s9 L4 Z
C:0x0800     7F05      MOV       R7,#0x05
6 _7 Z% V$ x2 U8 B9 T# tC:0x0802     7E84      MOV       R6,#0x84
- K8 @2 Q7 g: C8 L8 EC:0x0804     7D96      MOV       R5,#0x96
0 w- e, z( b4 v! U5 BC:0x0806     DDFE      DJNZ      R5,C:0806& O9 _1 d# a- n# _" z+ W
C:0x0808     DEFA      DJNZ      R6,C:0804
. {5 W; ], U0 FC:0x080A     DFF6      DJNZ      R7,C:0802! o$ q* E* ]! b- ?- e
C:0x080C     22        RET, s' Q' e9 ~$ Z# ?

; d+ g" K" M6 o: y三. 10ms延时子程序; ^2 D2 v8 k$ O  U( v
程序:
2 T# C4 h' f9 }9 j5 y) Ivoid delay10ms(void){9 s/ [. F* ^9 I, j, r/ o, h
   unsigned char i,j,k;/ n! o2 E8 m" m4 a
   for(i=5;i>0;i--)- f& S/ n1 q' S2 ?7 o
     for(j=4;j>0;j--)& `! J: G& ?: K$ {( s
       for(k=248;k>0;k--);9 w! x3 u! J1 `
}
5 G5 V" U$ B! y4 f产生的汇编5 O6 A2 W2 x6 g+ ^+ S- b
C:0x0800     7F05      MOV       R7,#0x054 x2 C$ X2 q) L4 \5 {
C:0x0802     7E04      MOV       R6,#0x04) g9 n" f" o' G+ b7 I2 r5 M
C:0x0804     7DF8      MOV       R5,#0xF8$ n6 {1 h( m" q- R/ A" `. E3 N$ y
C:0x0806     DDFE      DJNZ      R5,C:0806
3 E" {+ f( d, Z. dC:0x0808     DEFA      DJNZ      R6,C:0804( ~# t. l! g" V) H! l6 g1 L8 J
C:0x080A     DFF6      DJNZ      R7,C:08028 `# b* e) J( P! G4 C: e
C:0x080C     22        RET      
; T) P; V& W3 k5 Z* S9 b( ]1 P& Q2 B3 I0 H# Q- x: V( H1 r
四. 1s延时子程序9 y8 b# h! I( n# l( o: D/ B% M
程序:
" d' Z- A: ?# ], L  ivoid delay1s(void){: U' e% L4 z( p& E; Q% }* i
   unsigned char h,i,j,k;# n1 W* X- X: m  u, i: z2 I4 f; p
   for(h=5;h>0;h--)4 k1 g. \3 i# ^0 n( s4 f6 g9 s
     for(i=4;i>0;i--)6 J3 h8 A! k& ^1 Q7 K
       for(j=116;j>0;j--)
3 R/ Q3 b( v8 }- _         for(k=214;k>0;k--);; n0 P3 X& \2 c/ \! Q; \5 A, b
}4 \% I: H1 H" L& p1 ~
产生的汇编
  E1 e8 |! l/ V# jC:0x0800     7F05      MOV       R7,#0x05
# N9 O0 R* w- u  P& ]9 BC:0x0802     7E04      MOV       R6,#0x04
% Q# _" a6 i: e/ j& cC:0x0804     7D74      MOV       R5,#0x744 X9 J9 r) `# u( N
C:0x0806     7CD6      MOV       R4,#0xD68 r7 ?3 r) x& W# a
C:0x0808     DCFE      DJNZ      R4,C:0808' l0 m& q# G% M5 o! ^6 P: M& E+ \
C:0x080A     DDFA      DJNZ      R5,C:0806
0 H) ^/ t5 x% x# I% }% lC:0x080C     DEF6      DJNZ      R6,C:08043 M" D6 B" C9 q9 O# i6 {
C:0x080E     DFF2      DJNZ      R7,C:0802: a. n8 |5 @6 t
C:0x0810     22        RET% T& c' Y0 }8 A+ D8 c, A2 u

0 V& x9 B' `3 U  H: B$ W5 x0 `- {) G1 m" L, g: C  p2 `

4 ~7 R3 x0 ]! \. g' O6 k时钟周期    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;
. w; f; E1 ~/ I
/ X& p# f& C9 e, K. Q0 l- y

/ y/ P* z6 P8 N7 \# H- k
2 G# K& ~6 W& E4 x  M2 F9 a6 q( R
5 A0 C- z; q: [; k) _- w- u
) |5 Z# F& s- v% @

7 i3 s/ q, v0 a7 a" q& h4 }0 m

- w: ?# B, L+ B2 Z

该用户从未签到

2#
发表于 2021-11-25 14:18 | 只看该作者
c语言就用循环,汇编用空语句

该用户从未签到

3#
发表于 2021-11-25 14:18 | 只看该作者
时钟周期也称为振荡周期

该用户从未签到

4#
发表于 2021-11-25 14:19 | 只看该作者
在一个时钟周期内,CPU仅完成一个最基本的动作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-18 09:25 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表