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

单片机C语言精确延时

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

+ V8 l0 l/ O3 ?  L" H7 |1 Z: b( `# U(晶振12MHz,一个机器周期1us.), v% t6 v# T# \" q. y, G
    一. 500ms延时子程序
, G9 c- g# d6 g. L9 O7 P3 N* U程序:
+ X1 ?3 @% c" q* ?/ d; m      void delay500ms(void)% ]; c4 i7 |$ [) K4 c
         {
. _5 V. A" E$ x) s7 F              unsigned char i,j,k;4 b% S! M8 o; _1 w* _
" C- W4 B6 N! Z) F1 T$ j
              for(i=15;i>0;i--)- C6 `, |4 h* ~2 Q; a$ Y; S% _

5 I' m& B, ?" w2 V& Q              for(j=202;j>0;j--)
1 {( G. W) Z7 \6 [8 a! c" Y1 u* P! i% M& Z( K2 v7 x
              for(k=81;k>0;k--);
" F) h0 O% z; r$ K) |# @         }
% j/ S. q$ \% ?. g8 O
7 c% ^8 x" r7 T产生的汇编:! T8 g- A, D: J! S
      C:0x0800      7F0F       MOV        R7,#0x0F
3 ~* {# j# h; v8 g4 P. X: A0 A8 t, @# d5 {- O1 H! a
      C:0x0802      7ECA       MOV        R6,#0xCA
7 C6 T/ z1 v9 Y
5 \: n, k8 a9 P      C:0x0804      7D51       MOV        R5,#0x51/ q4 d  P$ i. Q4 d! f

" y9 ?# M' H$ z/ \      C:0x0806      DDFE       DJNZ       R5,C:08064 d- N5 o0 Y2 C, G! ~+ @3 h7 ?

: R4 O8 l3 B" H9 f; h      C:0x0808      DEFA       DJNZ       R6,C:08046 B' z! p* v- L& d. S

. j+ q+ h; f% o      C:0x080A      DFF6       DJNZ       R7,C:0802' F8 y, F5 p! v

3 x! ]. Q+ C3 m- d' J7 z      C:0x080C      22         RET      
+ ]/ N8 o& |) k4 t$ J& D2 P6 A计算分析:$ a9 g; u+ q4 F( t/ ~3 H: v; f
    程序共有三层循环
; \& ^& i5 t+ ?7 D* v" K% o  h    一层循环n:R5*2 = 81*2 = 162us                    DJNZ    2us
9 A7 K! a+ m* [1 P    二层循环m:R6*(n+3) = 202*165 = 33330us            DJNZ    2us + R5赋值 1us = 3us3 R# h! j. \9 v# L7 O( H. T9 F0 ^
    三层循环: R7*(m+3) = 15*33333 = 499995us          DJNZ    2us + R6赋值 1us = 3us& {3 E- P  M/ X1 o% G
    循环外:     5us            子程序调用 2us + 子程序返回 2us + R7赋值 1us    = 5us+ F2 ?- q# @. B- z" l8 \/ \% e
    延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
5 D& f* C+ s, Y' B! K2 H计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
5 R! o5 Z: E$ T/ f$ `5 e- V) e& I1 l2 b" r& |: h/ }
    二. 200ms延时子程序
" D4 `2 C! P+ F* x程序:, |6 ~% |/ [: v) j' |
void delay200ms(void)3 _& r# x: l$ |3 t! N
{
" y& v, M1 {! f2 T5 a! h8 t         unsigned char i,j,k;
$ a4 P9 ~9 L+ k$ x# r# v% S+ F
  i3 Z- }* u0 ?$ o& A) G          for(i=5;i>0;i--); m; @0 z8 j! A( i7 n1 Z

, {) `8 p* H" J" t* @          for(j=132;j>0;j--)
- y- B) w2 i9 N: O+ [. U0 U: Y$ C; D2 `! u4 `
          for(k=150;k>0;k--);
: j  B" i: A6 F4 `( y% ~}. [& I) D0 G9 A- O
& @8 ~; V. y$ C) l  t
产生的汇编
# W" Y- B; P1 e, m5 aC:0x0800      7F05       MOV        R7,#0x055 b. E1 O# S- ]# d7 i7 N7 n
C:0x0802      7E84       MOV        R6,#0x84
, K: j6 |" b! q* O2 b, f# p# NC:0x0804      7D96       MOV        R5,#0x96
+ d0 I/ h7 A0 _) q( ~' t8 sC:0x0806      DDFE       DJNZ       R5,C:0806. \! Q+ a: H  s  |5 {5 v: d
C:0x0808      DEFA       DJNZ       R6,C:0804
8 X: K: Q  U% G  {C:0x080A      DFF6       DJNZ       R7,C:0802. c1 l; n( O$ [' O# b0 H6 R* N
C:0x080C      22         RET& G3 \  D% }) \, U# J
    三. 10ms延时子程序
2 g3 ?6 a0 r2 S5 S7 s9 b程序:
$ s9 d! b6 p; _) W0 x; wvoid delay10ms(void)
1 [* D. u. g/ I! p+ Q+ x7 R{, V" `% w! G2 k5 e
          unsigned char i,j,k;; M2 z7 `# g- v1 t  k  I1 n4 ?( e
          for(i=5;i>0;i--)6 _* x* x8 d; [+ o# w" X
          for(j=4;j>0;j--)
4 z3 Q% t9 q4 K# W2 `9 \          for(k=248;k>0;k--);
: P/ U# s+ j  r) u}5 h9 @$ R  |; G4 A
产生的汇编5 H% U. ~9 t9 v) O# |' M
C:0x0800      7F05       MOV        R7,#0x05* W/ n+ H  z% f  E' @
C:0x0802      7E04       MOV        R6,#0x04
& b2 G. q0 N. c! K$ q) `C:0x0804      7DF8       MOV        R5,#0xF8; L/ E* K! U& Q3 i$ ?4 a
C:0x0806      DDFE       DJNZ       R5,C:0806
: ?" Z) t, }1 x  p0 ?7 fC:0x0808      DEFA       DJNZ       R6,C:08040 e3 a0 ~, C: p4 U5 b
C:0x080A      DFF6       DJNZ       R7,C:08025 d/ e" ?  |8 d; U
C:0x080C      22         RET      3 A: E. P( m- x' y' a+ G3 ?
    四. 1s延时子程序
4 x' D7 u4 ]- @1 ?( W$ n& S5 F8 a程序:9 d& U; b2 z3 |3 J
void delay1s(void)
' T+ p2 G2 S# P( D{
$ |1 K0 r/ E* g" [% C( i& Q) `         unsigned char h,i,j,k;% u! o/ n6 R+ q; f- y! q

- Z, ^) S: e! ~$ t+ X) I          for(h=5;h>0;h--)& G% t9 b$ g3 y  I0 ^
! g, h* r- o5 D' g# s
          for(i=4;i>0;i--)
8 ^/ J* h0 ~) m# @7 o+ ?/ b
0 y" B! g  j- ]/ L: R& N% c4 S          for(j=116;j>0;j--)
4 E' @- H7 g6 P1 \
& ]' o; ]  u. f$ X8 s          for(k=214;k>0;k--);. i+ O, X8 Z9 \1 o2 t0 }+ K
}

该用户从未签到

4#
发表于 2015-5-14 11:41 | 只看该作者
单片机小精灵就解决了+ K* ?+ }2 U% J* h3 e
另外 永定时器 数溢出周期 也能达到精确的延时
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-5 07:49 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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