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

单片机C语言精确延时

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
6 F3 Y) {- _% h' t
(晶振12MHz,一个机器周期1us.)& H' d/ e7 O% @* m8 A8 }8 Z
    一. 500ms延时子程序. U; U# h* o$ t
程序:
/ |+ B, u) w2 M# I2 z. l1 n      void delay500ms(void)
: ^, Q9 i) b$ Y( k- |9 T         {) c$ \+ u% W# m9 u  q9 X8 H. i6 l
              unsigned char i,j,k;, f. O& _, Q4 M  x

  z6 V3 Z" _5 V5 [- G              for(i=15;i>0;i--)
, f+ Q8 E2 e7 j4 M! Y
  S4 F7 l2 }0 @& K1 z% e              for(j=202;j>0;j--)
. {# g! ^$ ]- @" l0 K8 @
$ \$ T. z& b1 F9 b# j, ?              for(k=81;k>0;k--);  [  ]* i$ b; ^6 [( \( H2 ^$ B
         }
  t4 z8 h( ]) q' F! g2 S' N9 S% B1 x0 `6 Q
产生的汇编:
+ A: |, ?# N1 y      C:0x0800      7F0F       MOV        R7,#0x0F  }8 x1 B7 Z' }+ }4 b* a
, ?) ]. T; R! r  L1 V: ]: u. B8 C9 S: M
      C:0x0802      7ECA       MOV        R6,#0xCA8 ~& t( p7 \  f( O

9 ^' l  i2 y4 V, ]! d# a2 \6 Q      C:0x0804      7D51       MOV        R5,#0x51
9 g  B6 c, U% r5 u- v- M
; A: U( y1 ~' c% g( ~      C:0x0806      DDFE       DJNZ       R5,C:0806
; D. M4 U# [9 u) @  t: O
) k: ?& d: w2 ]5 A3 T2 c      C:0x0808      DEFA       DJNZ       R6,C:0804& y( t+ P  f" B  A+ B

8 e! C- n# A. N9 n4 ]6 V      C:0x080A      DFF6       DJNZ       R7,C:08029 N4 U+ e$ U- I) f6 _* L
! N, S0 c' X0 A; r7 x& p; ~
      C:0x080C      22         RET      4 [" j% f; R- i7 o/ Y
计算分析:( O1 Y8 d* S& G3 \2 f
    程序共有三层循环
% R2 `# S, \" I9 O$ \; ^    一层循环n:R5*2 = 81*2 = 162us                    DJNZ    2us
. K  e7 E) Y  m5 M/ f1 V& y6 C    二层循环m:R6*(n+3) = 202*165 = 33330us            DJNZ    2us + R5赋值 1us = 3us
4 x: O2 z- M9 C; o% E' X# |    三层循环: R7*(m+3) = 15*33333 = 499995us          DJNZ    2us + R6赋值 1us = 3us
4 ?( |7 {0 p5 ]5 d! k    循环外:     5us            子程序调用 2us + 子程序返回 2us + R7赋值 1us    = 5us
4 }5 `! R6 K' x8 U    延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
* [/ o  k  \( L. E( v0 J5 O计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
3 g# n% O( s: w. Y* T. q6 T9 V
! P- F) S7 U# V  `    二. 200ms延时子程序
! w5 E$ B0 S( M0 z9 \! u" f* J程序:
* u) R" F. v1 r2 n& q7 i; I# `void delay200ms(void)+ x+ F1 o. j" g. f' Z( t) I3 j
{
6 ^0 Q( |$ X& s3 H% {3 l; f" I3 ]         unsigned char i,j,k;2 }& s2 W& n8 L0 f) `6 [9 y$ E
1 w5 f- v6 h( P5 V+ M
          for(i=5;i>0;i--), q7 ^) f! G$ @

# V) y4 D$ D1 \+ }& x4 C* e          for(j=132;j>0;j--)+ l- e5 K4 J# S7 @

" j) L0 r: W/ H          for(k=150;k>0;k--);: L* c  g9 P1 r" c' {
}
0 |- e" {9 j5 W$ M* @7 ~' S( z' W* b  d( [
产生的汇编$ C$ G0 k/ E. Y1 K
C:0x0800      7F05       MOV        R7,#0x05
" l# D- z2 y- h' Y# M; X* W; QC:0x0802      7E84       MOV        R6,#0x84
- F2 `0 y8 T  ]4 X* ]+ G. u: V+ \C:0x0804      7D96       MOV        R5,#0x96
+ K- f0 c" K9 zC:0x0806      DDFE       DJNZ       R5,C:08061 F' l. ~- G4 R/ y# v/ l5 a
C:0x0808      DEFA       DJNZ       R6,C:0804  ~, q1 e2 {/ a! ]' l$ A! ^7 a
C:0x080A      DFF6       DJNZ       R7,C:0802
2 `( m, V& Z  Q8 C- q. P3 TC:0x080C      22         RET
. U" [& Y* Q. k* O. i, |    三. 10ms延时子程序
3 a5 s4 @+ B& c3 z" s* n0 c程序:9 l7 A- N0 i$ X' c8 {4 x
void delay10ms(void)  b# k3 O7 J" }% S6 E
{( p; t1 ~& A. `9 O
          unsigned char i,j,k;( ^% r( m. ^% |( |
          for(i=5;i>0;i--)# m+ X$ }: h9 X" \% j
          for(j=4;j>0;j--)
# b7 l' j& U; G; ~; f' C          for(k=248;k>0;k--);
& X, G# X, n& G5 ?8 A}+ D. U4 w7 x7 `! j3 t/ u& e# i2 p
产生的汇编; }3 ?+ v0 E7 g$ G) Q- E6 q' i
C:0x0800      7F05       MOV        R7,#0x05
7 B' P$ Z% n. [' _; HC:0x0802      7E04       MOV        R6,#0x04
9 x  v. K: C' [  m5 l6 GC:0x0804      7DF8       MOV        R5,#0xF8
. s8 ]3 p" W8 M4 M1 RC:0x0806      DDFE       DJNZ       R5,C:0806
( T# G) [! J! j% E( c6 r" k/ T  MC:0x0808      DEFA       DJNZ       R6,C:08047 E( q- W- L2 |) q0 }% Z
C:0x080A      DFF6       DJNZ       R7,C:0802. J. r- O' z4 g5 F
C:0x080C      22         RET      , |" P9 L4 E* n; o! R  Y
    四. 1s延时子程序: Y. L) U4 p" w; U4 L
程序:
$ r4 w5 f4 w' M7 c& Kvoid delay1s(void)" c- }  `6 [, g& n: i6 k" w" v5 k
{0 X8 x3 n# Y# ?& i$ B
         unsigned char h,i,j,k;
2 X3 j# o! _6 q" i* m
2 ]* Z; o9 s' ]; g3 ^          for(h=5;h>0;h--)! X; k5 C( a1 W* z

1 s% Y  _3 X* P          for(i=4;i>0;i--)
  ?4 D7 w7 L2 D1 J+ V$ n3 C) n: B$ D, Q; o6 S
          for(j=116;j>0;j--), Q+ I7 I& M/ b2 i3 i, N+ w  _2 h
2 J& ~3 Q# r' d
          for(k=214;k>0;k--);0 T. v$ D- ^; u) ~8 J. a
}

该用户从未签到

4#
发表于 2015-5-14 11:41 | 只看该作者
单片机小精灵就解决了$ ~7 s3 t% Z, p8 J$ o8 L6 o- `- S, F
另外 永定时器 数溢出周期 也能达到精确的延时
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-20 10:48 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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