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

单片机C语言精确延时

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
' ~; ?$ N- N; X% W
(晶振12MHz,一个机器周期1us.). O- _5 a- Y/ m$ F7 h0 Y2 y
    一. 500ms延时子程序4 V2 M, ^* a( z( ^2 D
程序:
: I# C" {' ?3 P2 S0 r$ y$ M      void delay500ms(void); Q9 z2 Y% F& d& P- {: @: D
         {
  Y; Z& H+ o! ]5 N+ M  H% l              unsigned char i,j,k;
! P# P8 N- X" K2 @/ ~+ N1 x7 `) Z, ?. ?0 w' W) \3 q; i9 V/ R
              for(i=15;i>0;i--), D& g. x- a8 Z# }3 P. p7 Q
/ h+ k3 z) G& e2 k
              for(j=202;j>0;j--)
8 A* Q: U" d* E7 d( g! Q8 i+ b, Q. s5 K+ z9 _  e0 y( c0 j2 A* D
              for(k=81;k>0;k--);$ L2 Z5 Q$ y0 [0 O* V% t
         }
3 k% |. A4 f, h, {  z( S4 I. s
$ s% a- ^. H5 b2 s6 M产生的汇编:6 I9 `0 m/ |9 m  `
      C:0x0800      7F0F       MOV        R7,#0x0F9 Q3 c8 ?6 y" s$ h4 S& v  f0 l
6 q0 r" k; g3 |6 `  f' V
      C:0x0802      7ECA       MOV        R6,#0xCA) f2 g7 P4 h# ?, A) Z/ K8 `9 e5 J

/ d1 T/ T  `' q4 Q      C:0x0804      7D51       MOV        R5,#0x51
9 O5 M: ~) e+ P  F: E' ~# J
0 V9 c4 b- I# O: [1 H      C:0x0806      DDFE       DJNZ       R5,C:0806$ d( H* E& N5 k" [6 H+ a3 U
: `* F7 D- U: @& _9 G) T% K/ f
      C:0x0808      DEFA       DJNZ       R6,C:08042 L) L: c1 j; r4 d" J
  s. o/ H1 n, n1 e& ?( L. I
      C:0x080A      DFF6       DJNZ       R7,C:0802
. r$ U$ ~0 I1 k% v- b2 b
6 j% Z6 M, b: K3 H# `      C:0x080C      22         RET      $ K( p+ H- j6 K( p
计算分析:$ f6 S; t3 V3 d7 `1 A; n- j+ x8 r  U" b
    程序共有三层循环
; d7 ~8 A+ |% B$ j    一层循环n:R5*2 = 81*2 = 162us                    DJNZ    2us; Z3 Z4 K1 ^3 x( N1 ~1 l
    二层循环m:R6*(n+3) = 202*165 = 33330us            DJNZ    2us + R5赋值 1us = 3us
$ F+ y' A: k: p' d2 f    三层循环: R7*(m+3) = 15*33333 = 499995us          DJNZ    2us + R6赋值 1us = 3us8 t0 b  n$ B& _' L7 _
    循环外:     5us            子程序调用 2us + 子程序返回 2us + R7赋值 1us    = 5us" A- f+ r) G% `% G( b
    延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
# S6 \5 }" n: U/ h3 T计算公式:延时时间=[(2*R5+3)*R6+3]*R7+53 ?3 [& a% l- d) K* ]" L

" w& k! A2 s4 @' ?: a+ I+ V: Z& D    二. 200ms延时子程序
7 q0 [4 J2 x4 T) r0 Z9 S, f! q程序:3 [$ w0 E1 ^8 L. n6 T' o$ _8 J
void delay200ms(void)7 h0 N* M! d" q3 \. _1 J% B
{
- [0 f0 c0 L. O/ {6 _  n* u         unsigned char i,j,k;' y( T$ C$ I0 ]2 t
" l" K4 k1 e1 r2 N& A# r- }% L
          for(i=5;i>0;i--)8 w  K* h0 a, `8 N- }+ w
' b" A8 i$ p, ~6 E' c8 r
          for(j=132;j>0;j--)
) c- R  l8 @2 E% o9 p6 m' C+ d% d9 {6 F$ s4 m% `2 E
          for(k=150;k>0;k--);
. r, d' W5 w( Y, f5 c}
% K# m2 i. R9 V, t# Y2 p* }
- y, _" s9 L4 b2 B- @$ R产生的汇编
$ m1 O5 ]$ u( L: v( a# bC:0x0800      7F05       MOV        R7,#0x05
' v* d; X- s4 y' E" V/ k7 u/ N( ]C:0x0802      7E84       MOV        R6,#0x84- k" a& f( C3 a# z. u
C:0x0804      7D96       MOV        R5,#0x96
6 `. v4 B; |9 Q  U4 RC:0x0806      DDFE       DJNZ       R5,C:0806, ~5 `3 t7 R) t( n/ T- q- Q, l& w
C:0x0808      DEFA       DJNZ       R6,C:08041 N; F0 B4 Z2 [4 W" I* {
C:0x080A      DFF6       DJNZ       R7,C:0802
0 t* d0 V& v  H9 g! FC:0x080C      22         RET
5 P/ w" t5 d+ {4 r; ^( ~6 Y    三. 10ms延时子程序
! H. z/ c* ]: T4 ?1 v$ c程序:
4 R& \+ b/ g! D$ A& B" t& g; |void delay10ms(void)
1 k+ i; `3 _+ o; \! Y. H{/ @- e. `: n( Q. k6 F, F8 V
          unsigned char i,j,k;
+ H- L9 |$ Y1 H" ~) A% ], A0 ?! r# u          for(i=5;i>0;i--)  D) J2 [% V% f$ O1 J% w9 T/ g
          for(j=4;j>0;j--)
. V# ~6 O" ^1 K& v$ r% q          for(k=248;k>0;k--);
: K  o6 z. y4 R2 q9 H# _' y4 ^}
! q4 m# F: a( V( \& {产生的汇编
; o5 ~/ U- _' ]# G: Q" n4 `. b7 T  P% ^C:0x0800      7F05       MOV        R7,#0x05
0 g) C8 @' u1 [5 AC:0x0802      7E04       MOV        R6,#0x04
: ~% H  Z& k; r8 u) v) G/ ZC:0x0804      7DF8       MOV        R5,#0xF8
2 M$ B4 X# a, G1 _5 |) @# mC:0x0806      DDFE       DJNZ       R5,C:08062 m7 r8 S: L0 Y$ a2 g
C:0x0808      DEFA       DJNZ       R6,C:08046 T0 i8 m1 f: c# u# l' J! m
C:0x080A      DFF6       DJNZ       R7,C:08020 V9 u/ S( y' \/ d" c
C:0x080C      22         RET      
1 w+ X+ @. r8 x    四. 1s延时子程序
+ F$ @9 ]7 C4 q  @' }9 f3 Q程序:5 T/ M$ j; d1 b# s: f
void delay1s(void)
/ E/ C& H1 E9 G( X+ I( ]{
; C$ m& Y: g: r5 y' ~7 U9 v3 G         unsigned char h,i,j,k;
4 r% H2 l, @0 B+ E9 h) C6 \: V# N) K
0 m4 U6 N% x8 K* x& g% c: h6 H          for(h=5;h>0;h--): O* \! t( [+ |" \6 l4 y# t

+ W$ h" O# y' O9 [          for(i=4;i>0;i--)* d! J) e7 N; ~. G

+ p: h+ X* v( s7 a" x8 m* p/ v+ A$ g$ O          for(j=116;j>0;j--)
! W9 E% N% p2 Y. _5 A" Y7 W5 t" Y4 S( B; ^
          for(k=214;k>0;k--);
- S& r# n- u! z. O. z}

该用户从未签到

4#
发表于 2015-5-14 11:41 | 只看该作者
单片机小精灵就解决了3 V# Z6 _+ C' q( T- r
另外 永定时器 数溢出周期 也能达到精确的延时
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-28 05:52 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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