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

单片机C语言精确延时

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

) T! s1 }& r/ V) y  E3 d& [! M* x(晶振12MHz,一个机器周期1us.)9 @9 k2 G+ e$ V& h" U! g; q
    一. 500ms延时子程序
* N4 q9 E4 Q- l5 F: N程序:
" @/ i& C2 g7 f      void delay500ms(void)& M: X. l8 C( r1 w; m
         {. \1 `2 |8 k6 D! w7 o/ c( _4 U
              unsigned char i,j,k;
4 ^% r. M# l/ _. _7 Q
. C" U' T$ _7 R# O+ P7 }              for(i=15;i>0;i--)
* p) q# x7 D0 J4 ^
( J: k  |$ B. @$ G              for(j=202;j>0;j--)1 X* O. \9 I6 |0 c- M
) V5 \9 Z- j2 Z/ J: z$ l
              for(k=81;k>0;k--);
: A" K1 s8 R& b7 T6 Z         }
# q: W* i8 ~" |# F
1 t( B/ x+ o6 k, ~- F9 `产生的汇编:* R8 `2 |+ k5 c/ O3 i+ ^" i/ u& J
      C:0x0800      7F0F       MOV        R7,#0x0F
0 H: C6 ~8 c1 s& I. I0 V0 W! |+ q4 ~. V" {" r
      C:0x0802      7ECA       MOV        R6,#0xCA
, q- a2 P7 }4 {) ~/ @+ Y
- S& ^5 t; z5 ~      C:0x0804      7D51       MOV        R5,#0x51+ [' ]2 @2 }7 _) f

9 e( R( n& K% C1 u2 Z8 M) _      C:0x0806      DDFE       DJNZ       R5,C:0806" c$ G  _3 P- {% J. h( c; @
) p9 u9 i$ t! L, G- _! O6 Y3 \
      C:0x0808      DEFA       DJNZ       R6,C:0804! k* a1 ~5 j1 G7 \
) W0 ]( D& r( X- A- Y0 P& o
      C:0x080A      DFF6       DJNZ       R7,C:0802
% L$ o6 R( ]9 y9 V. m  j8 e8 u. Q! p# N, O, ?8 q3 I
      C:0x080C      22         RET      6 s+ v% {+ E) G) K# y6 n0 s" B% U/ c
计算分析:
8 I! v. P4 l4 [3 `& R7 v9 m    程序共有三层循环
% j" K2 b8 f! [% @3 n! C0 p& B    一层循环n:R5*2 = 81*2 = 162us                    DJNZ    2us
1 ^; {! N9 M6 O+ z    二层循环m:R6*(n+3) = 202*165 = 33330us            DJNZ    2us + R5赋值 1us = 3us
, z. F2 z$ h' x% g    三层循环: R7*(m+3) = 15*33333 = 499995us          DJNZ    2us + R6赋值 1us = 3us( m# y, `. P# }# R4 u9 _
    循环外:     5us            子程序调用 2us + 子程序返回 2us + R7赋值 1us    = 5us
/ N9 Y8 Z1 u0 P- v    延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
* R/ a& m, m" M2 k: j7 u计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5/ P3 e) _5 }) n% @- G
( v8 a4 ^3 y* ^* a1 [
    二. 200ms延时子程序4 H+ G' f( {0 E1 R2 D* o! s
程序:
+ \1 L$ I" a  f3 M0 f* Z2 ]& ]% wvoid delay200ms(void)8 M4 G) S) s9 H& L9 E
{0 q4 Y; s7 E7 C; J8 i" l2 y
         unsigned char i,j,k;5 Q/ a, x8 j8 l; W

4 [7 ^8 \" Q2 v9 |2 G          for(i=5;i>0;i--)
1 i+ G% W- F0 N% M+ T* v  P# L" q' P8 a7 i9 H7 u8 W
          for(j=132;j>0;j--)
2 H: ?7 W+ m: |: Q; l2 F; d
( J7 {& s% c, t) u+ Z! J          for(k=150;k>0;k--);
) m0 C5 c% s9 l! u* g' T+ |" G}
/ h& Q( t: l5 ~) ]4 M1 b
; F# Z$ X5 g/ q; `# n7 ]  V5 D产生的汇编
" u# w8 Y$ m! C& m' SC:0x0800      7F05       MOV        R7,#0x052 a- ?0 b8 a1 w$ R  ?% O
C:0x0802      7E84       MOV        R6,#0x84
0 [, r( v+ s% JC:0x0804      7D96       MOV        R5,#0x96, R2 X  y4 j5 Y+ }' i4 z; G
C:0x0806      DDFE       DJNZ       R5,C:0806
3 }5 K5 S; T/ k0 P% sC:0x0808      DEFA       DJNZ       R6,C:0804, g6 E' c% Y8 F) a
C:0x080A      DFF6       DJNZ       R7,C:0802/ }5 q( p# q% t; C/ v
C:0x080C      22         RET8 r* a# U* @% P& G" b1 `* F! B
    三. 10ms延时子程序7 e7 Y' l. V/ Y0 D$ Q/ Q
程序:' D1 @$ R+ X( s% P! Q; ^
void delay10ms(void)
. ~2 h6 m. e, ^8 h, q( n3 h{; n. Z: f' ?4 X+ Q
          unsigned char i,j,k;
. g% h" w: |' d$ l; ^7 P& e          for(i=5;i>0;i--)( W# ~1 g$ P7 w7 y+ z
          for(j=4;j>0;j--). F0 A5 c0 \5 q% U# k. R7 t! e
          for(k=248;k>0;k--);( q4 q2 E, k( [; s% ~+ F
}& {: I" Z; }* r, `) o6 X
产生的汇编
3 {  S$ n9 @6 r. \) ^C:0x0800      7F05       MOV        R7,#0x050 j5 z7 O% T$ U9 _* S0 @
C:0x0802      7E04       MOV        R6,#0x04
5 S3 I0 _2 s+ A" YC:0x0804      7DF8       MOV        R5,#0xF8
/ Y7 m' K/ R$ Y. f- Q, i. w1 [C:0x0806      DDFE       DJNZ       R5,C:0806
5 E/ J9 K  v3 K/ \C:0x0808      DEFA       DJNZ       R6,C:0804; A9 j) d: S2 I( Y5 Y
C:0x080A      DFF6       DJNZ       R7,C:0802
' B8 @' X. y# SC:0x080C      22         RET      
1 X+ e8 ]5 F2 O7 V8 p    四. 1s延时子程序# u. G0 B7 e% }2 D
程序:
0 L4 }; H' @3 j4 {7 Q. @3 |void delay1s(void)$ d0 r* w1 M5 c8 Z8 w
{& g) [( c/ N5 G. G* Q0 C' k+ C
         unsigned char h,i,j,k;
5 w2 W( ]0 ]. u& {- E, o) m. O
. q) D* L/ e- O, }          for(h=5;h>0;h--): W: C( l2 X9 `7 A, t4 b0 ]
. ^/ ?1 L' G2 `8 F+ w+ f- ^
          for(i=4;i>0;i--)- l4 {9 `$ ~3 H' G1 F' D
, j( c1 T0 ?+ S) ?
          for(j=116;j>0;j--)  Z  H2 Z% w1 T, G$ K2 C# d

' P. R! ]$ G, r1 e1 T3 z          for(k=214;k>0;k--);6 Z  I0 `+ d6 U1 Y- `
}

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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