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

单片机C语言精确延时

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

2 n0 ?( g4 e9 W(晶振12MHz,一个机器周期1us.)- g& x; l! |( `( X5 e0 U
    一. 500ms延时子程序
$ `7 R$ N5 R. k/ V" U  K* R) L0 z. q程序:$ C! c6 o8 g5 P' X3 T+ I) N) Z# {
      void delay500ms(void)
6 @( C' V: j2 d- h; t6 x         {9 b% d, T  a9 X' ?
              unsigned char i,j,k;) l" }/ I) y! P
$ e5 f: B7 y: z- a; N+ @! J# W
              for(i=15;i>0;i--), N3 u! `. H% `2 G
$ N  w# z4 `: `: V- Y" p6 `# u0 T
              for(j=202;j>0;j--)+ z) h2 Z8 E( T) Z3 g) I9 ]5 m! G# i

! [/ Z0 c/ O: d2 M- V              for(k=81;k>0;k--);$ u# S# {2 V* o. u% y" J# U
         }
6 M8 R" [$ s" n* z4 h! O( O* W" m; E; t. z5 U# k
产生的汇编:
  \: D  P6 ]9 s8 m; Y* {      C:0x0800      7F0F       MOV        R7,#0x0F8 T$ y. z+ C+ t9 n$ ?
' n/ t6 U2 F% q0 D6 D
      C:0x0802      7ECA       MOV        R6,#0xCA' t5 T% a; b" F4 v* ^7 ?, G

7 D$ \+ ~$ d1 O7 f& _: z: O9 F  t      C:0x0804      7D51       MOV        R5,#0x51
* _" A* D2 ^( R' t/ `& {! ^- X6 b& p$ _; c+ m# d
      C:0x0806      DDFE       DJNZ       R5,C:0806
) v3 j, \5 F9 w( y$ B2 l) Z) s2 T7 |6 n9 `( H3 k& C" b
      C:0x0808      DEFA       DJNZ       R6,C:0804
1 `0 P" i2 }% i6 e9 w4 `
0 }; w7 W3 W3 W9 k      C:0x080A      DFF6       DJNZ       R7,C:0802' ^( e/ g# s2 c' Q; f. G5 S

/ G6 w  j& d* J/ q      C:0x080C      22         RET      
9 O% m& M6 X) J" z1 r计算分析:+ H' R& r! x, R& J, {! B4 r' ~8 H9 B
    程序共有三层循环
, `% [; g# m" c9 a5 }- }  K    一层循环n:R5*2 = 81*2 = 162us                    DJNZ    2us
7 ^" B- D" w( c' _/ D    二层循环m:R6*(n+3) = 202*165 = 33330us            DJNZ    2us + R5赋值 1us = 3us
5 N8 V. i0 S1 e    三层循环: R7*(m+3) = 15*33333 = 499995us          DJNZ    2us + R6赋值 1us = 3us: S( Z: o) g; n5 q
    循环外:     5us            子程序调用 2us + 子程序返回 2us + R7赋值 1us    = 5us# {. O! F. {( x
    延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms# u8 o% Q5 C: Z" x  p& R6 c
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5: \' A. @: D* a, c( M) ?
) Z/ M1 B% ~  D# m5 \8 R
    二. 200ms延时子程序  f% ]; X0 z$ [) d9 ]
程序:% q3 j% m9 k! x: b1 k
void delay200ms(void)+ d7 {* |: K% m- d& @8 C9 }
{1 J: N2 w$ S% I: ]2 }4 G
         unsigned char i,j,k;$ c( \2 ~# H( ^  U1 M' @' P
0 h! q5 ]9 k+ B8 H' c
          for(i=5;i>0;i--)+ T! v3 d- [7 a7 u4 ^3 r
: \- A" z; r# h( l
          for(j=132;j>0;j--); ?1 N6 U7 a& C* E% z; S3 t  `7 w
8 j8 f' r  n6 D/ A1 _8 Z
          for(k=150;k>0;k--);2 L! }7 |) L0 l- J1 e* d# C
}
6 U3 [- i+ E) e  Y& h% L
7 k& }4 Q. `( M; @. s3 x产生的汇编
) s' C9 X4 w* h" ZC:0x0800      7F05       MOV        R7,#0x051 r2 y0 n* e) o- y0 Q, [$ U  s% s
C:0x0802      7E84       MOV        R6,#0x84% k; n; E" ^  m- M9 y
C:0x0804      7D96       MOV        R5,#0x96' L, j7 X3 x- T8 |; r6 T
C:0x0806      DDFE       DJNZ       R5,C:0806( V/ K- X4 F1 C' \
C:0x0808      DEFA       DJNZ       R6,C:0804
! c. F: V  @' i- z% HC:0x080A      DFF6       DJNZ       R7,C:0802
6 s/ g2 f. u- a6 w% HC:0x080C      22         RET, A. n) a, S( d4 E' X5 r9 q& [
    三. 10ms延时子程序8 x% m! w4 E6 ~% `3 H5 s
程序:
3 z" R0 n, c0 u3 a, mvoid delay10ms(void)% G  d6 I# |( u; {$ ^3 I
{* y1 M8 a/ r' G) \
          unsigned char i,j,k;) A: Z8 `. N( D) j$ C, T! N' X
          for(i=5;i>0;i--)
& F; k( G1 C3 n: d3 t/ A          for(j=4;j>0;j--)8 _: P% n9 K0 d, u) w" C# b
          for(k=248;k>0;k--);# e; E& b7 q7 Y6 Y' k
}7 s2 Z/ R* w9 e+ o8 }
产生的汇编
, G! ?! k8 [# }7 _! ?# q" `0 xC:0x0800      7F05       MOV        R7,#0x05/ L6 Y/ x/ p/ h+ d* o& H" J5 O
C:0x0802      7E04       MOV        R6,#0x04
4 s7 \& @& ]3 s- d: uC:0x0804      7DF8       MOV        R5,#0xF83 q# o; q, V/ W# D# S
C:0x0806      DDFE       DJNZ       R5,C:0806
- V9 E2 k8 r) u; kC:0x0808      DEFA       DJNZ       R6,C:0804: \9 Q2 t8 U) y4 m+ w/ D% G: T  o
C:0x080A      DFF6       DJNZ       R7,C:0802
6 t& }$ l0 J, d0 v. ~2 ~# d' FC:0x080C      22         RET      
0 E7 A; b& g3 C. b( t7 `    四. 1s延时子程序
$ ~0 c7 ~% k) |9 H  e# |程序:! a% V8 m% I6 c4 |1 v0 z1 i9 `$ {
void delay1s(void)+ k) j" C, w. X+ g. S& j
{  f5 B3 z1 z6 a. e/ w' G3 v
         unsigned char h,i,j,k;
8 {* g  `! l) [2 G  P
5 J- V! W: s( K9 e" A. |          for(h=5;h>0;h--)
7 D: @# \0 M+ @- d1 c5 o
& l: \: H+ Y( C6 n7 v          for(i=4;i>0;i--)/ v+ c$ J) H7 Y8 f) f! j: v& W
4 D# r+ f7 d9 x
          for(j=116;j>0;j--)% x/ ]" C' M% H* [' c/ O( \

. k' Q7 V4 O6 D" u$ h          for(k=214;k>0;k--);9 J) r5 Y3 O8 `9 p4 p# d  U
}

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 17:01 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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