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

单片机C语言精确延时

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

0 |7 V/ _5 j) m: q! h- q2 M% _$ W(晶振12MHz,一个机器周期1us.)
% s+ @" n' f- V: S# n- ?" m3 k    一. 500ms延时子程序2 L) z" u6 z+ e' J
程序:
) i# Y" `6 G# Q" A8 ~      void delay500ms(void)
! i& H5 [; L" _: u2 p* J7 H         {
( G9 G2 }; q% n) `              unsigned char i,j,k;: i  v2 y: y1 ~) L4 k- ~

& h6 J! \1 R% C# o- v& N              for(i=15;i>0;i--)5 C; \: G# e+ \( ]
5 }8 V1 m, c( L# p  u5 e' R' q
              for(j=202;j>0;j--)3 _  I7 ~8 X( ]! s
, Y* \& u% W/ E/ a4 `
              for(k=81;k>0;k--);
  E% j" {( m* y& O/ T         }
! R7 l5 Y2 u+ d. \4 b( `6 }1 b# u
产生的汇编:# H1 K+ C7 W3 J/ f/ G& z  O
      C:0x0800      7F0F       MOV        R7,#0x0F& z$ P; K& x' L! P& c8 V/ K
4 b0 X4 @( m. m. D
      C:0x0802      7ECA       MOV        R6,#0xCA' Y! j6 H2 `* l# L0 C# q- ?
# M! c" E0 K7 L' a' |3 }: U
      C:0x0804      7D51       MOV        R5,#0x51. L2 ?, d! p- h  @# f* E& ^
7 e& Z5 N& I* w3 r# h
      C:0x0806      DDFE       DJNZ       R5,C:0806) T2 z/ r7 m) C1 d; _
3 n7 h- }: A4 Z- c  l3 r
      C:0x0808      DEFA       DJNZ       R6,C:08048 i& @  J& `. T6 A
( {# s" r) [* f' h  p5 y
      C:0x080A      DFF6       DJNZ       R7,C:0802. U0 P0 v0 n5 J3 H8 p$ q9 C
( Y, @, x+ y) E
      C:0x080C      22         RET      # y! E, \$ X5 w, i! ^
计算分析:
" S& J" l' l& _$ ?# b# p% }    程序共有三层循环) N! c& S# x  [" ]' s& `+ f, y
    一层循环n:R5*2 = 81*2 = 162us                    DJNZ    2us. C7 \$ J8 \: A$ N: Q7 c" k
    二层循环m:R6*(n+3) = 202*165 = 33330us            DJNZ    2us + R5赋值 1us = 3us
$ B, A% i( u% V' o    三层循环: R7*(m+3) = 15*33333 = 499995us          DJNZ    2us + R6赋值 1us = 3us
: `1 C' e! p$ f    循环外:     5us            子程序调用 2us + 子程序返回 2us + R7赋值 1us    = 5us
. _: [8 l( f' N3 w    延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms# T+ x+ a: _% z  C
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
5 E# a' R4 p8 u2 t; C$ D  \& |) T
5 I% }. o# [  P+ O3 n) n2 F    二. 200ms延时子程序
  _3 y0 k7 t' }. }7 {程序:
8 q9 v# x5 g# N" @1 Ivoid delay200ms(void)
% A; p1 M" r; x; c) s+ Z$ E4 @{
; {, G: A5 h! N0 N         unsigned char i,j,k;
9 |; h5 c4 v+ [. K- }) w, \6 V6 f- ]+ x
          for(i=5;i>0;i--)3 Z7 v  W- ^( I4 a+ ?7 a

8 g2 j9 H4 P' R- f# t( h0 p  z          for(j=132;j>0;j--)
; y& c2 `! Y# P8 X6 \0 d  z& @% @0 T  ^! V/ h  S9 M
          for(k=150;k>0;k--);- g5 a: ^! L- U- m8 \4 i, h0 G) {
}
# E5 B# ?% V4 C% Y/ n
" j  o+ A3 y: X" F$ n, i' b# a产生的汇编2 `, C& ^# J1 F' x
C:0x0800      7F05       MOV        R7,#0x05
# d$ H0 g+ N1 a" g1 OC:0x0802      7E84       MOV        R6,#0x84/ h' x2 n* S, J. u8 d! G7 l
C:0x0804      7D96       MOV        R5,#0x96% c& l' B* A4 l/ H. N
C:0x0806      DDFE       DJNZ       R5,C:0806
3 L; e4 u( X1 X( |7 _0 \6 W5 _C:0x0808      DEFA       DJNZ       R6,C:0804! @4 T6 s$ S% y2 H: n5 r8 }
C:0x080A      DFF6       DJNZ       R7,C:0802
; y! X6 T' _  E* S0 |8 M/ tC:0x080C      22         RET1 H  V, U3 A5 c" n. Y* [' c+ f  v
    三. 10ms延时子程序5 C% Q& ~5 O; b! t# Y& L( A+ W
程序:1 I% e' S3 B6 s" ^3 Y
void delay10ms(void)) ~: v- ?: m' L: j
{
% S6 l2 N/ Y- K2 N          unsigned char i,j,k;2 L6 }/ p- f9 |( t
          for(i=5;i>0;i--). h0 W' ]9 {4 ?1 k2 f8 d0 l
          for(j=4;j>0;j--)
( b" U# q- r# l6 c; \) ?          for(k=248;k>0;k--);# B. g$ _. j, }% j  W, t$ z
}: _$ M7 t  I& S/ w4 k
产生的汇编' e3 P" Z2 @5 @8 U) Q) ]
C:0x0800      7F05       MOV        R7,#0x05
/ J# |9 U! F' [0 Y  X- CC:0x0802      7E04       MOV        R6,#0x04& v/ j: T2 M8 E+ D# B0 Y8 D' G* Y
C:0x0804      7DF8       MOV        R5,#0xF8. M2 I" H( `8 ^( R( X" X' A  P. {
C:0x0806      DDFE       DJNZ       R5,C:0806$ U3 j5 S* W/ l) [+ g- r
C:0x0808      DEFA       DJNZ       R6,C:0804: w! s( W, |# ]) p/ ^
C:0x080A      DFF6       DJNZ       R7,C:0802& O0 f: v) M: D6 ~% |; G
C:0x080C      22         RET      
/ j# A. i3 \# b% T    四. 1s延时子程序9 D2 ?) I) W0 Z* A! x' o
程序:
# m* T5 Q. f) a3 [8 G' Y% |  Evoid delay1s(void); T6 K# o5 J6 b$ i$ I
{
! U& s$ _4 @! s8 t5 V# n9 r3 X         unsigned char h,i,j,k;! L( E* x' N/ k9 ^
# u; R# t. J6 N) K
          for(h=5;h>0;h--)" t8 g( ^: @! P3 J% \+ U+ L& `9 e! l
  @$ J; X1 q5 |) G
          for(i=4;i>0;i--)
) @$ X. c7 e( y" f; q2 b1 H  \9 f% a1 \6 r4 s" z' Y# Q
          for(j=116;j>0;j--)
  A, D& N) S4 Y
# Z/ F/ P: i+ f) M4 C& T          for(k=214;k>0;k--);
: w/ D. l6 V7 J9 Y. K8 H9 V+ \}

该用户从未签到

4#
发表于 2015-5-14 11:41 | 只看该作者
单片机小精灵就解决了
( }9 V. X7 j  l8 p" {8 p% Y另外 永定时器 数溢出周期 也能达到精确的延时
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 15:06 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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