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

单片机C语言延时程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-11-25 13:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x

5 q1 @. C  G8 _/ Q( n7 n
(晶振12MHz,一个机器周期1us.)
  h: f8 P* ~; h$ U一. 500ms延时子程序; p5 k1 }+ ^% P9 U' [0 k
程序:* f# ]+ O4 l* q) k8 Q9 \0 e  g
void delay500ms(void){
4 Z9 ^2 Y, D2 P/ R! p0 ~, U! q   unsigned char i,j,k;# l' m* [" h% F
   for(i=15;i>0;i--)
8 h5 F' T- L: Z     for(j=202;j>0;j--)8 ~. w- g( R0 W! M
       for(k=81;k>0;k--);
- s9 z$ g  q0 h& f6 }# E}
# s$ J( Q$ V( C" k& L4 f产生的汇编:
" v3 z- p& T' G. r+ z; lC:0x0800     7F0F      MOV       R7,#0x0F. \; [! ~. n. T1 S6 y( p
C:0x0802     7ECA      MOV       R6,#0xCA# @( ?5 J9 d9 g4 B0 Z! S7 X6 q
C:0x0804     7D51      MOV       R5,#0x51
+ A) I3 B% D9 c# F9 p, qC:0x0806     DDFE      DJNZ      R5,C:0806
. j- `1 N  ]8 J7 }. ]- pC:0x0808     DEFA      DJNZ      R6,C:0804
: z1 I7 Z3 T% v% aC:0x080A     DFF6      DJNZ      R7,C:0802
! i  W0 R% C2 ~; kC:0x080C     22        RET      
: b5 f6 }. T; L& X5 P. K! W计算分析:
+ R7 C3 L) Z, d5 Q3 p7 [程序共有三层循环$ L, ^% R2 x$ G  K' y3 i) y& m% m
一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us9 ?: y2 [- x/ L9 r
二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us
# E, m* P7 D& C+ G& {9 {三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us* o/ |. t% V: \2 c( D& u4 ^4 O
循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
) r  A6 k7 G4 q. m, I延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms6 R. k) M6 I1 J$ A8 w. K
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
$ l7 n" l  ?% O. ]1 [2 x
$ \  ?. q5 ~5 R. ~& N, K  h二. 200ms延时子程序) P/ K' _; L$ @- {8 N4 r
程序:
8 e! |2 h0 H" Y+ j# [. v! r* u) `8 _void delay200ms(void){
* d% W! R5 P* k9 S% g* Q2 o: C. m& g9 n+ c   unsigned char i,j,k;
7 ^/ N8 W" t& @7 J; O! v9 Z- {   for(i=5;i>0;i--)* Q, E1 h3 L$ |, _
     for(j=132;j>0;j--)
3 K: K; B$ l3 f' i       for(k=150;k>0;k--);
7 V0 i) f; r( B7 ?( B$ X6 e}
: l/ r9 e4 X: o: k! r产生的汇编
2 w5 |6 I: @; `  @, K' JC:0x0800     7F05      MOV       R7,#0x05  c) j0 n+ a: C" I, Q
C:0x0802     7E84      MOV       R6,#0x84  ]- _+ G- Q. t/ P4 i1 ?
C:0x0804     7D96      MOV       R5,#0x967 B" M, I( ~7 ^/ r% y+ g
C:0x0806     DDFE      DJNZ      R5,C:08067 P" q: L6 f* \+ B& {( v
C:0x0808     DEFA      DJNZ      R6,C:0804
. O, u# |$ A& I+ eC:0x080A     DFF6      DJNZ      R7,C:0802
" o' \! _& b% a$ E; XC:0x080C     22        RET
6 V! r6 T3 G* ?) Z7 {4 v7 n# \4 x4 O4 K1 t
三. 10ms延时子程序  w, c$ P, M# J: P: I
程序:1 J& D! h( [7 N
void delay10ms(void){3 ^9 P$ K+ X  W* B( E
   unsigned char i,j,k;
' v+ a2 e  G0 n! d: ^4 L: E   for(i=5;i>0;i--)9 J, B4 ^' C5 o# U
     for(j=4;j>0;j--). p% a8 h0 }' d, V/ z* z
       for(k=248;k>0;k--);5 i" L0 ^  S+ X  T% A
}0 P5 k3 ^5 c' Z) R
产生的汇编
$ v4 h! g) n9 f8 oC:0x0800     7F05      MOV       R7,#0x05
3 R" m. X  Z6 E* s  L% g" b5 MC:0x0802     7E04      MOV       R6,#0x04
4 Q: }% T9 |2 RC:0x0804     7DF8      MOV       R5,#0xF8# B: P, G, k- q- Q1 w+ W
C:0x0806     DDFE      DJNZ      R5,C:0806
- X' p0 ~# k5 zC:0x0808     DEFA      DJNZ      R6,C:0804
7 Z7 p1 V4 q! H  d# KC:0x080A     DFF6      DJNZ      R7,C:0802: U9 W% x, h3 q- S& }1 X8 d
C:0x080C     22        RET      : A* k6 \) f" Y5 M
0 l5 o8 ^/ |# I! f, F
四. 1s延时子程序" ^. }' H  v6 x. ?5 n3 N. a, ?% Y
程序:
4 L: K) t8 t; [  bvoid delay1s(void){9 r6 U4 z, x; F! g$ D. z, G
   unsigned char h,i,j,k;
1 \* `# {) o# `   for(h=5;h>0;h--)- s. _( M5 [1 n- b4 H" r$ T
     for(i=4;i>0;i--)
; }- I% u# u- N: f9 \       for(j=116;j>0;j--)
& z+ z. n5 D8 T1 ^* z- l) z         for(k=214;k>0;k--);
  o- M9 N& D- i, e% L8 p}
. ?6 ~& P$ n1 y4 _. b3 ]产生的汇编
5 g: {& j# O1 C( s. j8 @C:0x0800     7F05      MOV       R7,#0x05
0 B& J% d& j" s3 b" K7 EC:0x0802     7E04      MOV       R6,#0x04
! `& F5 Q( K( o. y# N2 q& @$ |' IC:0x0804     7D74      MOV       R5,#0x74
) b. \& |1 `# ?, k/ tC:0x0806     7CD6      MOV       R4,#0xD6
) Y$ G/ s# M0 u- c  o) \  M: s4 BC:0x0808     DCFE      DJNZ      R4,C:08088 g0 a( v; K. ?5 ]. K  w% K
C:0x080A     DDFA      DJNZ      R5,C:0806
  n. a5 o! t0 }$ q+ LC:0x080C     DEF6      DJNZ      R6,C:0804
& B5 I7 h; H0 B2 hC:0x080E     DFF2      DJNZ      R7,C:0802
1 ^( b1 ?: F$ `" g% xC:0x0810     22        RET4 e6 N+ k8 U. v2 [/ q
- p2 Y' [1 @5 V* G$ N- @

4 u/ W) I" R  n4 D; N- x: V4 s+ z! O6 z! c+ t; W
时钟周期    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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"><span class="ask-title">当80C51单片机晶振频率为12MHz时,时钟周期.机器周期各是多少?</span></h1><pre id="answer-content-375512566" class="answer-text mb-10" name="code">答:1.时钟周期为晶振频率的倒数:1/12微秒;    2.机器周期为12个时钟周期:1微秒;

' C1 O$ @0 P3 J9 R: q6 k( x! X$ |' R8 a) A0 ]6 }

: r" t* D+ G7 l& B4 [3 g
/ j- c. M( B# l+ O2 i
" ?0 e( D% K, q$ B" j9 h  }
( J( ~& l$ w% v, X3 N

1 o: U) {( \% ^' O( V4 k
! u5 x1 i: t9 d$ h

该用户从未签到

2#
发表于 2021-11-25 14:18 | 只看该作者
c语言就用循环,汇编用空语句

该用户从未签到

3#
发表于 2021-11-25 14:18 | 只看该作者
时钟周期也称为振荡周期

该用户从未签到

4#
发表于 2021-11-25 14:19 | 只看该作者
在一个时钟周期内,CPU仅完成一个最基本的动作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 07:53 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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