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

单片机C语言精确延时

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

- B6 L. U" S, t- r& G5 _(晶振12MHz,一个机器周期1us.)
5 z% g4 a4 a: k& r    一. 500ms延时子程序1 v8 g5 k9 T) s0 i# ~* }3 |
程序:
; ?% p+ n% Q$ V! W$ r      void delay500ms(void). d6 }4 @" \9 f, X* F9 q
         {
$ q: K; `0 A1 |! Y0 B              unsigned char i,j,k;2 J+ k* q! l4 o7 _: q( R  v
* y  m( P# P* n6 E3 I: d2 X( o
              for(i=15;i>0;i--)+ D. z$ L: |% |0 d1 E
0 K6 u% d; w7 |! Z2 g
              for(j=202;j>0;j--)# s- A/ r9 _# d8 ^2 H2 N

3 t( G+ ~7 ?- L0 m/ u* a% [! V              for(k=81;k>0;k--);
( `5 K8 J: {6 D' N         }
# v/ S. \) U" Y1 b9 d# G3 ~- Z$ v( g, i( U, m4 y1 U) z
产生的汇编:( s) C& V. u- y# d: g
      C:0x0800      7F0F       MOV        R7,#0x0F9 |- _0 n$ V; u  t; B
5 m+ U, ^$ u7 v  Q
      C:0x0802      7ECA       MOV        R6,#0xCA6 _7 Y! n, p4 S) u4 T" \
; R! T/ T: F5 t- _0 a( Y
      C:0x0804      7D51       MOV        R5,#0x51, F3 l5 |1 A) Q( n: t
" y: `# J/ \" a( F0 L' g9 o; r
      C:0x0806      DDFE       DJNZ       R5,C:08061 H' Z6 C3 J7 F
1 j  Q. C7 g# Z& z
      C:0x0808      DEFA       DJNZ       R6,C:0804/ Z% u1 x8 C# W0 ~2 X* r) x3 ~2 g

7 w. Y' X0 y" N7 l  O. u      C:0x080A      DFF6       DJNZ       R7,C:08020 B- b. J# V- M$ S2 |; M; Q* x

5 u# q0 w. k/ [7 h( P$ q      C:0x080C      22         RET      $ J. ?) b2 n) U) k# V' h
计算分析:4 J: [1 |' k& K) @2 W6 B8 ^5 N8 s
    程序共有三层循环+ e: ]1 M3 C% K# ^) X* n
    一层循环n:R5*2 = 81*2 = 162us                    DJNZ    2us7 c7 p; ~  N, E1 i
    二层循环m:R6*(n+3) = 202*165 = 33330us            DJNZ    2us + R5赋值 1us = 3us" u' L8 a0 z6 q5 `1 p
    三层循环: R7*(m+3) = 15*33333 = 499995us          DJNZ    2us + R6赋值 1us = 3us* x. d4 S! f, W9 F! Q
    循环外:     5us            子程序调用 2us + 子程序返回 2us + R7赋值 1us    = 5us
& n9 p  D! g/ ]9 O' z( Q& G    延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
; O( |% m9 I; u8 z6 ]计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
9 A4 X, `+ y0 f, d, h0 Q
5 e$ Z# S: f) z  n' Q! t0 l: T1 N    二. 200ms延时子程序0 e3 \1 R- L; Q2 X4 |9 y$ [
程序:
/ l! B) r! d3 e0 u0 nvoid delay200ms(void)4 ~! B* N6 F: v4 r# m
{
7 f9 I/ u! d5 ]: Z         unsigned char i,j,k;2 _+ m( r& l+ K. J0 U

' i; d9 a6 l) ]' d          for(i=5;i>0;i--); e2 b  G6 o! B3 z, U- q, U0 \

  @" r# C3 H: K" c. c7 J8 e          for(j=132;j>0;j--)
: R4 \4 M: x3 H$ U. @- a( X, v" J+ g9 _$ m4 E4 j" Y
          for(k=150;k>0;k--);( F2 M& F4 P6 M& }
}) F+ S* ?5 j) o! R0 e. W

9 c) x5 U9 W" q" H1 o产生的汇编& t  F' e' K, o% v
C:0x0800      7F05       MOV        R7,#0x05
& o1 P+ b! |5 W- j# PC:0x0802      7E84       MOV        R6,#0x845 l7 _, Y/ U& u, T) ^( T( f- n
C:0x0804      7D96       MOV        R5,#0x96- n5 x, q0 b6 m2 t% G
C:0x0806      DDFE       DJNZ       R5,C:0806
3 c  F* a) P/ U) CC:0x0808      DEFA       DJNZ       R6,C:0804
. T! w6 d5 _" ]/ k8 U8 w! O+ ^C:0x080A      DFF6       DJNZ       R7,C:0802! J& W( N( c& Z! b" o) @. p
C:0x080C      22         RET
+ C) j5 M6 ?8 o2 Q1 j5 f. v, L: e    三. 10ms延时子程序) i" a: q1 w) G. i! [% Y
程序:. T3 L( z. A. z" W
void delay10ms(void)
0 |; E8 Y6 B* q{
" B6 f# f( S5 {) J          unsigned char i,j,k;
% v( e8 V$ I- f5 M( {" ?          for(i=5;i>0;i--)$ M& O, H/ a0 D2 R" r7 @* S5 a
          for(j=4;j>0;j--)$ ~# s1 ^/ c* c
          for(k=248;k>0;k--);
. s/ z$ p) L) B% X}( k+ O) |# ?8 i2 @5 b5 W" j7 d
产生的汇编
# H* W! S) T, }7 V6 _. \% e2 |, }C:0x0800      7F05       MOV        R7,#0x05) R% J9 T( x0 T, k8 R
C:0x0802      7E04       MOV        R6,#0x045 L/ K+ ^& V1 x9 v$ G* i
C:0x0804      7DF8       MOV        R5,#0xF8
1 q3 q) t/ u2 v' M6 Y  pC:0x0806      DDFE       DJNZ       R5,C:0806
: i- j* P% O; _" q# r( V! oC:0x0808      DEFA       DJNZ       R6,C:08040 A1 @! [; Q( p. z6 r
C:0x080A      DFF6       DJNZ       R7,C:0802
, j6 w5 E- \. C! v; }; G& `1 D" [C:0x080C      22         RET      
8 o. l8 _% B' L: D: T    四. 1s延时子程序
+ o/ D* i" ]( p' n4 t# R程序:/ T- j# g- ~0 ^+ f4 K2 S
void delay1s(void)
$ f7 v: k& O/ W+ T4 M{
; d/ i/ ~! d9 `; i: r$ h6 y  b         unsigned char h,i,j,k;0 S5 U# k9 V3 p# L/ H

3 E7 Y- p' U) v" L: Y/ {          for(h=5;h>0;h--)
- B: u1 k1 d7 W% _/ P; B
( {/ E8 w) G" v! _# u6 Y          for(i=4;i>0;i--)9 M. E' F9 |+ k
* ~$ H" ]' A0 c& [' a
          for(j=116;j>0;j--)
, G2 w- J& U5 w: |0 y
0 L2 F2 _- o, X6 X6 ^$ {5 ], j          for(k=214;k>0;k--);9 L+ ^9 G+ k, h$ t
}

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-1 06:21 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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