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

单片机延时C语言程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-10-15 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
(晶振12MHz,一个机器周期1us.)4 L" ^+ S. e) c
一. 500ms延时子程序
4 ~1 t, U/ Y# G程序: ! D0 K" S% K2 |$ L# b! d8 j
void delay500ms(void){0 f/ V) l0 X* m# d8 j* h/ w
   unsigned char i,j,k;  Q  X6 L3 Q, w0 L# h$ _; H2 q
   for(i=15;i>0;i--)( ^: G6 X, d# R. E
     for(j=202;j>0;j--)) F1 s6 a0 A; p7 e; ^
       for(k=81;k>0;k--);+ m7 q. @$ z3 x2 s; _4 S' t
}
6 L  A# E" T, H  C4 W% I产生的汇编:* b- Y5 d6 z4 [$ x- H' t
C:0x0800     7F0F      MOV       R7,#0x0F5 U$ K" _; E6 K( L8 l1 K2 U0 J. N
C:0x0802     7ECA      MOV       R6,#0xCA9 u0 b; O4 L! {; Y$ c, ?, G
C:0x0804     7D51      MOV       R5,#0x51" e3 n  H: Y' a
C:0x0806     DDFE      DJNZ      R5,C:0806
4 a# I3 _' j9 Q) s( ]C:0x0808     DEFA      DJNZ      R6,C:0804
7 `: @: T2 ^8 @4 z  j+ iC:0x080A     DFF6      DJNZ      R7,C:0802
  t+ d4 x, k& D; C; n! ]C:0x080C     22        RET      
. f( @, X0 M0 ]7 ]# D  [" O计算分析:; t5 A6 ^5 n% t$ I, j) I( o2 \
程序共有三层循环
7 p; Y5 }1 v) U* _+ s一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us
9 \+ I  `" g# h) ~* T& h" O1 U$ c二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us
+ B* j6 T" T6 \2 g三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us
  ]! j# S/ E+ i  j  P( _/ U2 G循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us$ p2 J+ _' V0 W# `# s& R# X
延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
& p. N4 _6 z/ D" V* \0 l计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5) l+ d) Z2 M5 e4 x+ y# J+ a4 h
4 [0 l/ d2 K" J# i* i
二. 200ms延时子程序
1 z# |7 @" I0 k6 Y, |# B) o程序:
3 n; `4 n# C: Z0 Tvoid delay200ms(void){% W1 i  Z1 s! m
   unsigned char i,j,k;' J+ J$ F( s7 T
   for(i=5;i>0;i--), R$ T% F* ^" `. e3 b" S
     for(j=132;j>0;j--)
& F3 c# T) n7 `* B/ ]4 |' _6 T       for(k=150;k>0;k--);
; B3 y4 ^; S- M9 @- e% _- t}
( H/ I- K9 c2 {6 u( M3 D) D产生的汇编
  a9 I0 D5 g! l) OC:0x0800     7F05      MOV       R7,#0x05
& r, m! M* g4 R- d4 B- m( f& }C:0x0802     7E84      MOV       R6,#0x847 i  k7 `6 e, |
C:0x0804     7D96      MOV       R5,#0x96
/ Y& K; a, T6 z9 Z/ Q+ BC:0x0806     DDFE      DJNZ      R5,C:0806& E/ [5 N9 u; i' A0 `$ R5 Q
C:0x0808     DEFA      DJNZ      R6,C:08048 x/ C4 X( m7 x. d
C:0x080A     DFF6      DJNZ      R7,C:0802
: {6 Q) ~2 I7 o* FC:0x080C     22        RET
8 \3 U& P7 |' `. J$ K: W& W
: J9 ~- ?( m$ b. p' z1 k三. 10ms延时子程序
  C  b; |$ U# K程序:
5 {% e. p0 T3 K# C7 Dvoid delay10ms(void){
3 x5 e7 p# E5 @' |* @2 J& ^2 W   unsigned char i,j,k;/ f$ k/ s6 {+ z1 L6 e$ q* j5 P* m
   for(i=5;i>0;i--)
+ Z: V- x* E% w5 h, w" Z     for(j=4;j>0;j--)
& w4 t: J. g7 @1 \0 {/ b2 o5 A       for(k=248;k>0;k--);8 W. k* k6 U" m8 z9 C
}
% s" J% O+ i: \, @2 N产生的汇编
8 g' L4 |+ O7 k# H- GC:0x0800     7F05      MOV       R7,#0x054 l( r. q) x& M6 @) F+ k3 q
C:0x0802     7E04      MOV       R6,#0x04' B% W' g' Q. b) F. M- G/ x
C:0x0804     7DF8      MOV       R5,#0xF8' g* n. B# S6 f
C:0x0806     DDFE      DJNZ      R5,C:0806) {" n7 E  Y0 }$ |$ ?
C:0x0808     DEFA      DJNZ      R6,C:0804
) ]  z- J1 R6 i# ]; XC:0x080A     DFF6      DJNZ      R7,C:0802
3 R  r  x0 I! e# }4 wC:0x080C     22        RET      " j4 I  B  |3 o& o3 w5 B. r

; t; r- H; F. |3 M" U$ @四. 1s延时子程序1 g: Q! @6 l; y
程序:
5 s& ^7 V3 D2 uvoid delay1s(void){- t3 e8 b* O$ v: ~( g6 t# k
   unsigned char h,i,j,k;! j. C$ m, S6 ?& X
   for(h=5;h>0;h--)
( t+ d/ p. P9 |. \3 p     for(i=4;i>0;i--)
$ k) M4 u, c) H* W       for(j=116;j>0;j--)8 R1 |) L2 J5 @* z# S' C7 t
         for(k=214;k>0;k--);7 i- ]" ~4 D% ?. a2 \# y
}
9 W: j4 g  W6 ]+ \产生的汇编  t8 R/ U0 O) S  t5 i
C:0x0800     7F05      MOV       R7,#0x056 l) U/ y$ }; Q* o
C:0x0802     7E04      MOV       R6,#0x04
7 i8 f9 p8 j7 y" UC:0x0804     7D74      MOV       R5,#0x74( e, d( z5 J7 f7 q( }) G1 ?
C:0x0806     7CD6      MOV       R4,#0xD6
$ _2 l4 f3 [2 l( PC:0x0808     DCFE      DJNZ      R4,C:0808+ K- O2 X6 m  k, G
C:0x080A     DDFA      DJNZ      R5,C:0806' @' R. A' u( R& j. W0 a
C:0x080C     DEF6      DJNZ      R6,C:0804
* O* `2 g7 ^8 t3 xC:0x080E     DFF2      DJNZ      R7,C:08028 Q$ ?4 Z$ i; \* O

C:0x0810     22        RET


6 g  S) |! Q. Z) K' }1 M6 X3 A8 D% q

9 V/ z4 ^/ \# y2 Z" v+ o

时钟周期    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。   在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。但是,由于不同的计算机硬件电路和器件的不完全相同,所以其所需要的时钟周频率范围也不一定相同。我们学习的8051单片机的时钟范围是1.2MHz-12MHz。   在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。机器周期    在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。8051系列单片机的一个机器周期同6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。指令周期    指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。    通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。<h1 class="mb-5" style="margin: 0px; padding: 0px;"><span class="ask-title">当80C51单片机晶振频率为12MHz时,时钟周期.机器周期各是多少?</span></h1><pre id="answer-content-375512566" class="answer-text mb-10" name="code" style="white-space: pre-wrap; word-wrap: break-word;">答:1.时钟周期为晶振频率的倒数:1/12微秒;    2.机器周期为12个时钟周期:1微秒;. ~9 j: _% I3 \, q! g0 J1 w

该用户从未签到

2#
发表于 2020-10-15 13:15 | 只看该作者
来学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 05:13 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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