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

单片机C语言延时程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

# ^: L' F2 ~  ]) r% y
(晶振12MHz,一个机器周期1us.)! A3 i% B1 _) `; b* Y7 z
一. 500ms延时子程序
. f, N1 p. v) l0 u程序:
! q: v+ U# ?& t) A5 Kvoid delay500ms(void){
/ O; ]' Q: M; P   unsigned char i,j,k;! a9 u) E/ X$ I3 F; d3 W1 x: ]
   for(i=15;i>0;i--)
9 d8 g0 G: c! {4 `: S9 M     for(j=202;j>0;j--)
2 N( Y7 _7 _! x. P. k       for(k=81;k>0;k--);
) R0 G* ~0 K; P5 t  B2 @0 {}, ?% J, ~! ?9 P1 R# S. y9 a- b; A
产生的汇编:
' ^4 l( v1 R, OC:0x0800     7F0F      MOV       R7,#0x0F7 \7 S' B8 l* w1 x; U3 z9 o
C:0x0802     7ECA      MOV       R6,#0xCA
  Z9 ?% s9 v! w6 R5 m: t$ yC:0x0804     7D51      MOV       R5,#0x51
+ u8 l6 b# f/ k7 }' |' xC:0x0806     DDFE      DJNZ      R5,C:08064 E* }: x% n, r% _5 s! N. S" n$ J0 n
C:0x0808     DEFA      DJNZ      R6,C:0804
9 z0 v$ h& ^6 l" j& GC:0x080A     DFF6      DJNZ      R7,C:0802
+ q. W4 K8 L9 N  iC:0x080C     22        RET      
0 E! x7 A& H& I% b计算分析:' n5 l5 U& l! i" Y$ l; @
程序共有三层循环
5 |5 i# t8 @) z7 f8 U一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us
5 f# A8 x) A- Y7 V2 |, p* ]5 F" b二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us. N, x: N3 a/ B2 c6 [
三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us
& q6 E; O" D8 D* y! Q循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
2 L4 p0 T4 q/ F4 l8 S3 Q, Q延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms5 I9 m  K; x, S5 b8 f
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+55 }+ D7 o! s" V3 u% q  Z

3 v. H- B2 A: D7 F) m二. 200ms延时子程序$ ]! b3 d* a& K5 `3 I
程序:% u  Y/ W) F+ q
void delay200ms(void){
$ K# O. Q+ Z- e6 [- L   unsigned char i,j,k;- `; M1 o0 Q, |) B+ D
   for(i=5;i>0;i--)- p, F" T2 ^8 w. G  d8 R7 e3 H
     for(j=132;j>0;j--)8 \, ^+ ^8 @% N7 R
       for(k=150;k>0;k--);
1 v. T- k( ^  E6 b7 b" y}
! c. x7 B+ t- P产生的汇编/ E; C5 U" r: E( l
C:0x0800     7F05      MOV       R7,#0x05. V4 v" t  |  ]* M0 ]
C:0x0802     7E84      MOV       R6,#0x84
' s: \% p8 W) D0 `C:0x0804     7D96      MOV       R5,#0x96. U3 a* |9 t: C7 @! n1 n6 c. N/ x
C:0x0806     DDFE      DJNZ      R5,C:0806) B$ |6 a8 W! C" T% ?
C:0x0808     DEFA      DJNZ      R6,C:0804# ~$ {0 ~6 Y% ]8 x
C:0x080A     DFF6      DJNZ      R7,C:0802, {/ _" f1 e) r( ^* b( ~4 m
C:0x080C     22        RET" M8 w0 b, U: t
% e- _6 B9 e2 q% N
三. 10ms延时子程序, _7 ^. e8 i; i7 t3 L4 t$ B
程序:6 \3 ?: T; i' z! L' D, Y* F
void delay10ms(void){( B9 d+ Y2 c! `& q
   unsigned char i,j,k;2 B, g* I! Z5 v
   for(i=5;i>0;i--)
$ ]: s* d# n  e) [3 y9 ^     for(j=4;j>0;j--)$ d% W3 d0 h5 q& ?* O6 ?2 Z
       for(k=248;k>0;k--);
) `6 M( Z2 S; q6 E% ~! V+ T2 g% s}" w! `. M  u+ T  I+ H; h
产生的汇编, z8 H3 O* [  z" V4 j! k$ w# _
C:0x0800     7F05      MOV       R7,#0x05) D3 Z+ f8 |$ U! J* g' z
C:0x0802     7E04      MOV       R6,#0x04  w6 b$ i' k$ \
C:0x0804     7DF8      MOV       R5,#0xF8
- j$ c3 g: `3 `. v! LC:0x0806     DDFE      DJNZ      R5,C:0806% H2 ?0 Y, b' ^( c) L
C:0x0808     DEFA      DJNZ      R6,C:08046 `! {9 ^4 G4 k4 M; y4 S
C:0x080A     DFF6      DJNZ      R7,C:0802
; [# l' Y+ a( ]3 {, V' [C:0x080C     22        RET      % B" W/ u- W4 \- q9 W
4 {. |: Q. y9 g! g: l  d9 x
四. 1s延时子程序/ d* V2 ^" j' b
程序:/ l4 E; a2 ?( Y. y) e$ b1 c
void delay1s(void){9 M1 R( e% o% D0 o/ ?* W6 ~0 e
   unsigned char h,i,j,k;1 D( Q7 ~/ w. q" A. G  q/ \
   for(h=5;h>0;h--)5 B. D6 p' H7 i
     for(i=4;i>0;i--)
- Y! _: v8 V7 A% D1 K       for(j=116;j>0;j--)" N; B6 j9 Z$ @6 d) x' ^% d
         for(k=214;k>0;k--);
  V/ h" O( L/ r: C6 e4 ^4 {7 V}. {: K) B& R. g0 |. o: H* ]
产生的汇编
& B/ y* r8 {* o; N4 I  M& IC:0x0800     7F05      MOV       R7,#0x05  y5 G6 w1 G3 G0 H. R6 r
C:0x0802     7E04      MOV       R6,#0x04+ ~+ S2 i8 {5 h1 O
C:0x0804     7D74      MOV       R5,#0x74
; d( M3 D8 c8 c9 f. ?: @C:0x0806     7CD6      MOV       R4,#0xD6
" o' h; G4 t8 M1 y; g6 DC:0x0808     DCFE      DJNZ      R4,C:0808
+ C5 ~5 D: v4 a0 z: |( EC:0x080A     DDFA      DJNZ      R5,C:0806
& L% P# B) u, p$ ]  @& \C:0x080C     DEF6      DJNZ      R6,C:0804& b# y7 ?5 Z7 w' r1 ]' H2 J
C:0x080E     DFF2      DJNZ      R7,C:0802' v2 ~2 ~) [+ N" Z4 j& N) H) Q- A
C:0x0810     22        RET
" [' e+ I6 A+ R
% u% d7 }: v, w# s
& t/ a( z1 t2 @5 c7 `4 U2 Q. J* U1 \0 y6 x1 I7 m
时钟周期    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;
% R' f& z- P  T8 J( I4 s# b
. C+ w" h/ S/ \2 e8 p; _
3 b- l7 a9 c+ _1 k& F. c/ j

1 P' Z6 i  \  A& j9 d2 R% G& o6 D8 p' i) M

! ]+ a0 H; B7 |$ q! a- |7 @
# ?% _5 t) S; V( T: a8 S
8 C3 ^& Y, C5 T2 ~. V$ P4 b

该用户从未签到

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-10-12 13:14 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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