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

单片机C语言延时程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

( X! k8 O  W- r. N
(晶振12MHz,一个机器周期1us.)
1 M3 r  c) K) e' T一. 500ms延时子程序
- [3 D1 _7 u* P- ]程序:: C1 M' Y6 }& X* i
void delay500ms(void){( B+ B1 G7 r/ ^1 b! x* O# j
   unsigned char i,j,k;
* _& Z- o; b" I' h. T2 S   for(i=15;i>0;i--)9 M" @+ r# Y9 L4 ~7 |
     for(j=202;j>0;j--)/ v: P0 G' E9 J* s; P" y
       for(k=81;k>0;k--);
2 f' n) q+ S9 \% e7 P* f' o3 B}
8 L- n, w& B& ]' o/ ]产生的汇编:; Y& X4 Q3 G# o  |
C:0x0800     7F0F      MOV       R7,#0x0F
/ k; \9 I. S& t2 M2 ^9 Z* rC:0x0802     7ECA      MOV       R6,#0xCA
$ h- a5 Z$ Z: sC:0x0804     7D51      MOV       R5,#0x51) v' A" ]5 F5 A
C:0x0806     DDFE      DJNZ      R5,C:0806" L! s& ]9 t* j7 J
C:0x0808     DEFA      DJNZ      R6,C:08045 z) ]7 `# r: y0 l# \
C:0x080A     DFF6      DJNZ      R7,C:08020 T* |. \; A+ r/ _1 }
C:0x080C     22        RET      
/ I& _: |3 t% u; A6 k计算分析:5 w9 o# r7 H2 X) q* \
程序共有三层循环8 K2 r8 w' D; O: r
一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us
1 Q) v/ O% `' R3 |% z二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us
% L/ q2 I( `4 E# n1 {$ i8 T三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us7 k% k* R& L1 P* C
循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
$ y5 J1 D- \, q8 c延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms  ]3 z" t. G3 `& }# E; Q
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5; g# H- o1 b, a) z$ K$ x! T# }( O

; p( _$ j5 d5 ?1 l二. 200ms延时子程序4 E9 u& |  Z1 h) w* `% B
程序:
2 @+ O+ [8 C* \' j0 Vvoid delay200ms(void){
" j6 @, v& e, I4 r. N   unsigned char i,j,k;
$ R5 V$ n0 ^( Z, A& |8 P   for(i=5;i>0;i--)& H. r$ Z- E" d! d- `; o. g
     for(j=132;j>0;j--)) }" T- G( S  j( N
       for(k=150;k>0;k--);$ R5 M- Q. @' k
}+ u8 }' a* v/ P1 l
产生的汇编$ H! [( O6 r0 `
C:0x0800     7F05      MOV       R7,#0x05& Q( N" f' \" j4 I' [: ~
C:0x0802     7E84      MOV       R6,#0x844 n, w2 v* C9 I- g4 h
C:0x0804     7D96      MOV       R5,#0x96
  t$ e3 }- {1 |1 ?6 A5 l! J. i5 e  ]2 `C:0x0806     DDFE      DJNZ      R5,C:0806
' z5 ]) x7 e: P/ q- s. u) Z: }7 EC:0x0808     DEFA      DJNZ      R6,C:0804
- |6 h3 s  X4 n' x# }' {1 s* xC:0x080A     DFF6      DJNZ      R7,C:0802" ^  e" q- n1 [5 P( {
C:0x080C     22        RET
2 @2 ~2 J  l* {5 D5 @
; Y3 _/ X* ]; |) `' g, @0 n三. 10ms延时子程序
3 P# o# U, L) D. w( p% K: E程序:) _! v( U8 P3 N' d
void delay10ms(void){
$ K8 Y- {) r0 D6 m) u& ?   unsigned char i,j,k;
* j6 t3 x8 W( n6 S  \2 ~   for(i=5;i>0;i--)8 @6 X0 K! D5 ?. P' y) K9 P- T
     for(j=4;j>0;j--)
, I3 J; c0 [7 ~- J" s       for(k=248;k>0;k--);9 Z- d. ?( k' A# R' a* H% C% N! }
}
5 Q4 o0 ?" j8 ]产生的汇编
' z7 o0 [; R5 O( F6 U- X1 HC:0x0800     7F05      MOV       R7,#0x05
2 n/ j3 V2 |+ R0 C. z( mC:0x0802     7E04      MOV       R6,#0x04
" @) l9 }3 G9 o; c) n0 XC:0x0804     7DF8      MOV       R5,#0xF8
& ?6 y# W# {' W% o' x- KC:0x0806     DDFE      DJNZ      R5,C:08065 o0 ^( W  p' ?
C:0x0808     DEFA      DJNZ      R6,C:0804* F- Y4 b- e0 u  e0 }: v
C:0x080A     DFF6      DJNZ      R7,C:0802
1 q' l0 m$ ?# }  Y& FC:0x080C     22        RET      
5 {7 _& }: R+ K" Y- H- b3 ^( W3 k* g" o% M( y
四. 1s延时子程序
7 N! V. |' m1 G, Q' E; V/ R# ?程序:
* w" O$ H2 {% ~) e. Zvoid delay1s(void){4 ]0 L" S) ]! t+ b
   unsigned char h,i,j,k;( s+ d8 k% a, A) l7 b; c# K
   for(h=5;h>0;h--)
0 k0 }8 R6 C  C, L     for(i=4;i>0;i--)0 M  z. L" t( U" g
       for(j=116;j>0;j--)  C' @1 S1 A" w9 d
         for(k=214;k>0;k--);( l3 J% d( x7 ?+ n# \
}# b  t1 {( i. s/ m! F4 X
产生的汇编( h$ B7 K* X$ w$ e9 H
C:0x0800     7F05      MOV       R7,#0x05
( b$ t2 E. y; ^( a9 n2 y% LC:0x0802     7E04      MOV       R6,#0x043 D9 W- i: v* e8 A4 M
C:0x0804     7D74      MOV       R5,#0x74
! T- e% N# D; _' A. ~! @C:0x0806     7CD6      MOV       R4,#0xD6
! E$ U6 }. O! @3 kC:0x0808     DCFE      DJNZ      R4,C:0808
1 f- q; J0 v9 X# R% P# J5 [' kC:0x080A     DDFA      DJNZ      R5,C:0806
8 u0 s8 m3 N6 U- P, l( _C:0x080C     DEF6      DJNZ      R6,C:0804; g/ j) n  v, z! O4 _
C:0x080E     DFF2      DJNZ      R7,C:0802
9 C' A' m* f# P, @C:0x0810     22        RET
; o0 v; P: |0 f+ y& `, ]4 }
' E8 R( _; o6 S; B$ H: B1 a; P( B  L3 C; B
6 g; w0 V/ O7 z3 A& K. f
时钟周期    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;

1 ?. U- O& y  p
: U; u* }  H# y: S! G" b4 F+ w
0 V  h) h: v! j3 Y# P0 R1 y- E8 V( U; h/ R: `& U9 m, c; u7 @
$ F7 R; _9 u, P! a* I! v& V

4 S; H0 }5 k* e# G" W4 J  b# G5 `$ w
8 Q- v9 Z3 I1 L7 U, u( E- g1 N1 ^

3 b' f6 }2 L# ^/ A' C8 @$ c; o3 V

该用户从未签到

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-10-6 23:03 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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