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

单片机C语言精确延时

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

# P* F2 W* Q0 O) G" f. q(晶振12MHz,一个机器周期1us.)) P9 @. N, R3 f$ E
    一. 500ms延时子程序
5 V4 |6 q# U6 @程序:, `8 }* W$ e. Z$ U8 g
      void delay500ms(void)) Z: M1 Z1 s9 _9 c
         {
& x2 K( W" v& _! z( b              unsigned char i,j,k;) M/ W/ Z( r# \% \

% H) L- [/ k6 ?& U              for(i=15;i>0;i--)
. ^+ x# `& c; A: ^1 H: M2 k( S; y9 ?6 g6 e8 {$ a; P( j# o$ x+ {
              for(j=202;j>0;j--)4 C: O  v9 X& \& f0 g

! b. n1 r  P, I4 d+ K              for(k=81;k>0;k--);" o6 K' ^7 V$ F! j/ G
         }
& `" y$ h! N$ i$ \- l& G6 d* O2 s# a) E; v8 {' [) P# K. J( W
产生的汇编:
6 g9 B1 c+ D$ ^- q      C:0x0800      7F0F       MOV        R7,#0x0F7 e: a8 l/ t% Y3 x

) h; O; y% ~/ ]- O4 \# \      C:0x0802      7ECA       MOV        R6,#0xCA4 w5 X  N' N# ~0 T

9 i5 b6 F  n% r) j# ^) M      C:0x0804      7D51       MOV        R5,#0x511 }# M1 S' Y' `& D; I

4 S0 O9 ?* s& r& F      C:0x0806      DDFE       DJNZ       R5,C:08067 ^" E* L! V: z" b) u0 t! v
) w7 Y3 A  K, Y- \3 Z
      C:0x0808      DEFA       DJNZ       R6,C:0804
0 O. p* g" _6 P0 Y$ A: P) k" {2 S! x. a* S/ W( H2 V2 h
      C:0x080A      DFF6       DJNZ       R7,C:0802
- Z( S& ?; m- j4 ^" _8 I% A9 R& {5 q. r; C3 K
      C:0x080C      22         RET      
, }3 ]# X; {2 u$ x3 [; z& v计算分析:- N+ _5 C5 l" N) @
    程序共有三层循环
; T) z! s* l* W, i# ]) h    一层循环n:R5*2 = 81*2 = 162us                    DJNZ    2us5 _5 ^$ Y7 z: s0 W$ x2 n
    二层循环m:R6*(n+3) = 202*165 = 33330us            DJNZ    2us + R5赋值 1us = 3us
* y) W+ d# s! ~- \) [7 Z1 z4 w    三层循环: R7*(m+3) = 15*33333 = 499995us          DJNZ    2us + R6赋值 1us = 3us
1 r- U  A! C. P- x: J    循环外:     5us            子程序调用 2us + 子程序返回 2us + R7赋值 1us    = 5us# h: h; G+ t; A8 c9 `- P' Z0 X
    延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms2 A8 T5 P8 c& F- {$ ^
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5+ J3 e, i1 u0 W# K1 y
8 Q# i, _1 R3 A* I. K
    二. 200ms延时子程序
" X# \# r2 t& m, f% ]2 T8 L程序:
# v- j1 I" h. R# O8 s- @' Q1 J/ v& Mvoid delay200ms(void)1 Q" [/ o0 m) Z; u! V  w' `2 X5 t- f2 ?
{- X. v+ A. W5 M
         unsigned char i,j,k;
, p" Y* B, [% [7 q: n; ]! j  ]' d$ R( I. M
          for(i=5;i>0;i--)
  y+ j) V, U" e; F7 G5 m, i3 ]
2 B; V, q3 @6 H" @          for(j=132;j>0;j--)
, Q1 h0 I% d: ^( B) T3 w6 ^+ _
          for(k=150;k>0;k--);
  }! e6 V/ N2 t+ j' f! Z4 c}- p9 x  l: o( |& W
$ W% Z9 ?2 v' T4 q% V7 `
产生的汇编0 a* y: o5 {1 ~: {
C:0x0800      7F05       MOV        R7,#0x05* Q0 f2 S( s: G
C:0x0802      7E84       MOV        R6,#0x84
; Q) R# E3 R( V& c. p" TC:0x0804      7D96       MOV        R5,#0x96
+ J& s- ?5 S7 ?, TC:0x0806      DDFE       DJNZ       R5,C:0806
% ?, O8 t  Q6 pC:0x0808      DEFA       DJNZ       R6,C:0804% N2 a- j- e+ M
C:0x080A      DFF6       DJNZ       R7,C:0802
% ^# b  K" H8 mC:0x080C      22         RET' f: Y8 o; S) G. S
    三. 10ms延时子程序5 W/ _% B( X0 Z
程序:
9 e+ ~) q& A& jvoid delay10ms(void)1 h1 o5 J4 O8 t
{
6 b: Y; Z4 r- i% I, g7 ?          unsigned char i,j,k;
9 B4 p2 V8 L" ]! D0 e% W          for(i=5;i>0;i--)
" S  C" Z' ]* D4 L          for(j=4;j>0;j--)1 \1 X' v/ u0 g0 r! P
          for(k=248;k>0;k--);9 m% ?; ]0 ~1 K# R6 q
}" X4 {/ b+ ^: ]4 k
产生的汇编
; S2 e3 c  ^. K, @C:0x0800      7F05       MOV        R7,#0x05
9 `; ]$ l8 x( j5 O1 z9 a  o6 PC:0x0802      7E04       MOV        R6,#0x04
1 B5 O( M+ @2 D) Q" FC:0x0804      7DF8       MOV        R5,#0xF8# ?# R2 J; c3 E6 j3 [
C:0x0806      DDFE       DJNZ       R5,C:0806
: v& v2 R: }9 `( W# ZC:0x0808      DEFA       DJNZ       R6,C:08048 K% z# R% o4 [3 R% N9 V% S8 @
C:0x080A      DFF6       DJNZ       R7,C:0802, z3 c: W" l% r, a
C:0x080C      22         RET      3 U5 g* Y6 u- I) K2 f# q# @5 w2 L2 x/ Y
    四. 1s延时子程序8 ~* @1 m& L5 _" t- }3 ~! w9 g8 Q
程序:3 g  ?$ w' w3 B% B
void delay1s(void)  S9 h4 n' I% ~9 q
{: a, O0 e: T; X
         unsigned char h,i,j,k;
* \& c9 t8 {: u. L. P* N; G, H/ G; K$ N7 o$ U1 W9 H8 P
          for(h=5;h>0;h--)5 ~1 m  a9 \& o% Q! V  A3 a3 R: ^3 g

4 @$ y1 T- C1 \" T$ b          for(i=4;i>0;i--)5 G* K4 m0 D+ Q# o: R) E
' M8 _! G/ [& R& D
          for(j=116;j>0;j--), b0 C& ?: Q8 A- E5 N
. c7 f( v. f* Q* n  V# c, G
          for(k=214;k>0;k--);( c) ?( m# P) ^0 B# Q# S5 }- b2 H
}

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-18 13:49 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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