找回密码
 注册
查看: 1075|回复: 3
打印 上一主题 下一主题

单片机C语言精确延时

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2015-4-19 18:21 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
9 I- t( P; X$ Z1 Q( k& v
(晶振12MHz,一个机器周期1us.)6 `- R  V2 F3 K$ L9 n+ `
    一. 500ms延时子程序
* q. h, A6 l& g. @- W/ z* k: @程序:' r$ W, g. M. B4 F( h
      void delay500ms(void)8 }+ N0 {7 E- X
         {
) V1 T$ z$ z0 J& l) n0 H              unsigned char i,j,k;  J( J3 O' @7 s1 s" o
2 X( m& R4 m" B- o. L5 f
              for(i=15;i>0;i--)
* E4 x$ m2 H5 _# z
) X7 t5 g; D9 s$ f              for(j=202;j>0;j--)
2 {& ?+ f. }' F6 V* h; I# e" g2 M% k$ W
$ k' U# p# l1 \9 A              for(k=81;k>0;k--);" g/ N8 H4 e4 ]: T7 v/ N9 K
         }
6 ]" J+ p" x. u& E5 \; o! C$ _% g3 ?6 h" ]2 g! G3 K3 G  S8 |
产生的汇编:
1 P' i, F% ~2 S2 }; K      C:0x0800      7F0F       MOV        R7,#0x0F
! ?$ k% J. s/ ?. E7 _+ u
4 e, w/ a0 W0 _" u4 c      C:0x0802      7ECA       MOV        R6,#0xCA
2 Y' \+ P) u0 H: P2 h& {2 M
3 |; Z( }/ v" A8 L' z& n9 A& F      C:0x0804      7D51       MOV        R5,#0x51/ M2 [# J" a) M/ |4 j) m8 D8 F; y

% U& z5 `( [; d- h      C:0x0806      DDFE       DJNZ       R5,C:0806: V3 o/ E# J! Z& ?2 I, e  D: P
* \0 y: _% C9 G8 c& N
      C:0x0808      DEFA       DJNZ       R6,C:0804
' U; o6 x8 q9 |6 o
: d( F& f- w6 R" A      C:0x080A      DFF6       DJNZ       R7,C:08027 R6 D1 @" @1 N

, E% J6 [, w/ t. d( S( u      C:0x080C      22         RET      ; A4 T! W) z! b' C) e
计算分析:
  j7 i4 }6 `- ~9 T, o  W6 w: r/ X  U    程序共有三层循环
( z. [- s3 T+ b0 k" _( c    一层循环n:R5*2 = 81*2 = 162us                    DJNZ    2us1 H6 h4 _0 Z* u! d) ~
    二层循环m:R6*(n+3) = 202*165 = 33330us            DJNZ    2us + R5赋值 1us = 3us4 l7 x& L5 N, Q( W- A
    三层循环: R7*(m+3) = 15*33333 = 499995us          DJNZ    2us + R6赋值 1us = 3us
$ [. |+ z' C) p  q    循环外:     5us            子程序调用 2us + 子程序返回 2us + R7赋值 1us    = 5us
. W$ \2 ~' A2 g8 r( p3 A9 V    延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
. d: {3 Y# H" O: E" L计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
+ d0 P; g+ r8 F; U( T; x2 @( c
  V  A" _7 V+ _# H    二. 200ms延时子程序+ M8 k: C4 L; B% ]
程序:: I3 e. Y, x/ ^* n
void delay200ms(void)+ K; i4 \8 o9 x& p; \) j
{
; _8 m" I7 m+ n1 [3 x& ]& c         unsigned char i,j,k;3 }" {& m- b' M: P/ x1 R6 b9 f6 ^

4 z( t, d0 ~: N( \+ K7 ~5 D          for(i=5;i>0;i--)* y- o$ K4 |2 l6 ~3 C0 t
! x& n; M% O5 f$ a* |7 K( H* `
          for(j=132;j>0;j--)
$ M0 k# Q* Y7 ~+ z) ^1 s, k' ?# m4 V0 r# B+ L+ }! V: e
          for(k=150;k>0;k--);# V! v8 Y: I5 J2 O2 A2 `/ @
}
+ C- Q8 K& C8 I# i1 ~
$ \1 Y6 Z  U- {6 {产生的汇编$ ~5 N0 v0 U( @; _
C:0x0800      7F05       MOV        R7,#0x055 |( d( ?& k# U- C2 e; p! ?  Y1 G
C:0x0802      7E84       MOV        R6,#0x84
$ R9 z0 D- t0 D& t$ m; g5 D  S4 Q8 cC:0x0804      7D96       MOV        R5,#0x96; q3 i. z+ h" ^7 F0 {* D& x$ H
C:0x0806      DDFE       DJNZ       R5,C:08063 K2 [7 B. F: g" c. k) Z- a
C:0x0808      DEFA       DJNZ       R6,C:0804) L% w6 a6 W% W9 y
C:0x080A      DFF6       DJNZ       R7,C:0802) B+ V  ]( Z# r- a6 n1 Y5 U
C:0x080C      22         RET- _9 Z! }9 }5 x5 \3 Q7 V
    三. 10ms延时子程序' v/ a8 z0 t  j  K" E, z# N
程序:2 R+ \6 g9 H) T$ u
void delay10ms(void)
% n/ I5 j% Q0 T# O{& n7 q6 [4 J; m' ^: S
          unsigned char i,j,k;
% p+ }  z; V. A          for(i=5;i>0;i--)( o" |, R0 g5 r' ~6 {/ f! I+ k
          for(j=4;j>0;j--)
, r: q+ H% G7 s: x: Q, |          for(k=248;k>0;k--);
) G. P/ j( L/ V2 L}" G: r$ F/ j# h; g
产生的汇编
3 E' M' _8 Y  }: O+ l; l& A: |C:0x0800      7F05       MOV        R7,#0x05
! E- O+ A8 ^0 ^C:0x0802      7E04       MOV        R6,#0x04# h" R& {# j' d$ Q- h
C:0x0804      7DF8       MOV        R5,#0xF8
* t! A, U, P- T& G& g7 ]& \' D- z+ SC:0x0806      DDFE       DJNZ       R5,C:0806* B# B# R$ d/ k" M3 Y
C:0x0808      DEFA       DJNZ       R6,C:0804
7 c/ B  Q  Z  q  p$ B% UC:0x080A      DFF6       DJNZ       R7,C:08022 X/ D6 x# o" M
C:0x080C      22         RET      
8 a6 x* O1 N8 w( |" r9 [% g    四. 1s延时子程序8 w' L6 j& P5 y$ A* x9 ^, b9 E
程序:' z+ D) j6 v% P7 p
void delay1s(void)& r, C" d  c" k# s) ?
{* r8 I9 c' X+ u- Q% ?; ?- v
         unsigned char h,i,j,k;
; J2 W, Z( a; g3 X) s) `* Z: t) @1 V* c) I
          for(h=5;h>0;h--)
8 W  l6 Q+ x/ V9 ]( O& s
, K+ B! X* k2 M: T; z4 N4 s          for(i=4;i>0;i--)5 V/ I5 q- V& U7 E" D

( h- e0 U! j6 b4 ^          for(j=116;j>0;j--)
' f: g' p% G: y! |: T" e& p7 Y
: f0 H% n1 f; u          for(k=214;k>0;k--);2 v8 H$ Y& P) T7 p* G
}

该用户从未签到

4#
发表于 2015-5-14 11:41 | 只看该作者
单片机小精灵就解决了+ W/ Z4 W" c9 O2 N- C# Z
另外 永定时器 数溢出周期 也能达到精确的延时
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-5-26 09:42 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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