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

单片机C语言精确延时

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
5 d! v" C* ~/ N! J
(晶振12MHz,一个机器周期1us.)
( M, ?$ A9 E, l5 e) v( Y9 ]    一. 500ms延时子程序; |1 M5 \& l$ l& x7 K
程序:6 X/ `: E6 X) e: L0 y# Q% Z
      void delay500ms(void)
5 p5 Z) Y) M! j. F$ n         {
4 v8 U$ w6 V: f5 r# N7 X              unsigned char i,j,k;4 n" ^7 y- p9 p4 d+ d

8 M+ c, \+ O4 x8 z' ^* z4 ~2 \2 S              for(i=15;i>0;i--)
" R5 A+ T3 U' n6 _) l
5 j5 Q* r& ]# p              for(j=202;j>0;j--)
; I9 ~- o1 u3 R3 Z/ _0 o, `% o  G
              for(k=81;k>0;k--);9 Q: j( M5 B+ T" L% s
         }
) Q3 o' @: k0 {1 }, x8 _; D7 S
$ K, `1 P- C: D# E. Z1 k- q* [8 v产生的汇编:
1 g$ X' ]' X; j8 ?: O: G      C:0x0800      7F0F       MOV        R7,#0x0F+ N; m: s, u2 v' H/ q) p

5 k( r( u$ ?4 f; L! u" C      C:0x0802      7ECA       MOV        R6,#0xCA- i$ b, ~& R* R
% h' ~+ h$ _" w
      C:0x0804      7D51       MOV        R5,#0x51
" Z: @' N7 d" Z2 w7 ]& T% ^' S2 L
      C:0x0806      DDFE       DJNZ       R5,C:08060 y8 T. U& U& ~. B9 q

# p- z/ L/ ]4 ~9 d' C      C:0x0808      DEFA       DJNZ       R6,C:08041 P3 X7 @; f# P2 u
6 H& ]4 f$ ]2 E, F. H9 Y- I
      C:0x080A      DFF6       DJNZ       R7,C:08021 n4 q% ]/ H+ ~

$ T) `% V/ u! Y  F" ]      C:0x080C      22         RET      ( N2 x" `5 w7 T: V! V) W
计算分析:
2 i$ w* ?7 n; y% S    程序共有三层循环
0 C# T+ J& j+ m0 J    一层循环n:R5*2 = 81*2 = 162us                    DJNZ    2us% o' g0 {) |& e
    二层循环m:R6*(n+3) = 202*165 = 33330us            DJNZ    2us + R5赋值 1us = 3us' |# z& |( D% Z  }! e
    三层循环: R7*(m+3) = 15*33333 = 499995us          DJNZ    2us + R6赋值 1us = 3us5 q" i0 B) U1 R- V2 h1 `2 p3 B
    循环外:     5us            子程序调用 2us + 子程序返回 2us + R7赋值 1us    = 5us; v2 E0 a: w4 ?6 n2 P% q1 u+ {
    延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms  b% ?4 z- i$ F9 ?* W4 a' J
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5+ t3 d% b2 z# i0 T" [
7 q+ g+ S' ?8 E- x' ^1 O1 O
    二. 200ms延时子程序6 y4 N  f) M6 o
程序:
+ E2 ^6 J' T( D/ s7 t2 Y2 ivoid delay200ms(void)
# y* w& F7 X: o" B- E. ^0 f{, }4 J( h7 ~- m  T6 R
         unsigned char i,j,k;$ [; c1 j7 X% E9 R! W6 [2 C% A1 X5 h1 T

+ O' g% e2 A2 q+ T. n, l/ G" n; A) |* |          for(i=5;i>0;i--)8 B" b# E5 \, ]7 b* Y8 }  y

: t% i9 L8 _8 z! n$ B          for(j=132;j>0;j--)
; l0 d; `* q$ ~9 h  A; Q/ G9 h
' T3 G3 o7 I# q5 I/ l          for(k=150;k>0;k--);2 U/ c7 ?1 ?4 U( T7 H, ?
}* x$ U  }( b  y& S
$ j/ p1 A  t& _: W' C& x1 a
产生的汇编0 [# g$ t- {9 g8 E, o+ l6 H
C:0x0800      7F05       MOV        R7,#0x05; D$ ^: e, A; b4 q- {/ Q
C:0x0802      7E84       MOV        R6,#0x84
- I3 [4 x" T2 X! hC:0x0804      7D96       MOV        R5,#0x968 X2 f; R3 `. Z! {) r
C:0x0806      DDFE       DJNZ       R5,C:0806
1 u! m2 \* H- q9 U9 Q' LC:0x0808      DEFA       DJNZ       R6,C:0804
9 W8 E7 }  }/ ?, \4 MC:0x080A      DFF6       DJNZ       R7,C:0802
: c7 H+ Z3 ^! L- V6 RC:0x080C      22         RET- K4 @+ J7 D$ W; f& i7 q0 y$ X/ Z
    三. 10ms延时子程序
. z! S7 |0 o+ Y* A; A7 n" x2 b) W5 @程序:
6 h6 [# N% g/ T( s4 ivoid delay10ms(void)- r5 ^. _; u/ J3 {  Z  g" T6 r, H
{
8 E! l% {2 X2 \6 x$ c! i; p3 M          unsigned char i,j,k;: U$ U1 i# M0 Z9 F- y* P- d
          for(i=5;i>0;i--)
. z- u; ^8 L  t+ x2 c$ a          for(j=4;j>0;j--)7 i" q! f' e' Q% P1 P7 d% [+ I
          for(k=248;k>0;k--);. \, p$ P  W. t& L; I8 f" J
}2 v) B3 U' f+ y% L, m
产生的汇编
  Z$ K) ^' m2 i8 ]! iC:0x0800      7F05       MOV        R7,#0x05
! ^/ O6 Y3 O9 r" GC:0x0802      7E04       MOV        R6,#0x04
) e5 d! o: m  I9 o7 P" r3 aC:0x0804      7DF8       MOV        R5,#0xF8  c1 M; f' T# g6 [4 A* ~$ u; z
C:0x0806      DDFE       DJNZ       R5,C:0806
- F- X; S  [5 r" e2 IC:0x0808      DEFA       DJNZ       R6,C:0804! q) n, F# f5 w' K$ u# w
C:0x080A      DFF6       DJNZ       R7,C:08021 l) ^" P: A& ~; G3 e5 f# L* o
C:0x080C      22         RET      
5 y8 d. Q& q3 j4 k$ n1 x4 h' {    四. 1s延时子程序# n% }- f/ r, S# x! q3 b" q
程序:
& ^- t) N6 N! P1 U  |0 C! m3 \void delay1s(void)! n3 ~6 G( I' s
{  x& W; ~& E- Q; o
         unsigned char h,i,j,k;
$ M& s8 P; y5 ?& f# F( e4 r$ Y4 h7 a! N* ]* N/ G
          for(h=5;h>0;h--)9 ~- w* p, y0 I! n) w

5 l# t8 _: Z% I% s" J# C          for(i=4;i>0;i--)
1 R* k6 y& f( S, F6 _$ o) A
) Q, N0 Q: f3 Q$ M5 w# M+ L          for(j=116;j>0;j--)% O0 U- b! Q' w* d6 w; L

' n9 ]! q5 l3 d+ T          for(k=214;k>0;k--);* w* P- k( D8 d; K( G$ g
}

该用户从未签到

4#
发表于 2015-5-14 11:41 | 只看该作者
单片机小精灵就解决了* Q; R% M/ Q) b; R4 v
另外 永定时器 数溢出周期 也能达到精确的延时
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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