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

单片机延时C语言程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
(晶振12MHz,一个机器周期1us.)
2 o! `$ V0 r4 \一. 500ms延时子程序
: I7 t1 _+ H1 |% C( W' k+ U* v程序:
( r  P* w1 R! Ivoid delay500ms(void){% m- U* W3 ~2 |) x! [* g
   unsigned char i,j,k;0 C2 x- K0 f( t
   for(i=15;i>0;i--)
  t4 |9 N9 i, y) I' ]     for(j=202;j>0;j--)
' P8 f2 `! @3 q8 k       for(k=81;k>0;k--);/ t, ^+ X! Z" V7 F8 C
}
& [: D4 m! f6 {0 {$ [产生的汇编:
) l& k# y1 R6 T+ NC:0x0800     7F0F      MOV       R7,#0x0F5 {* ~6 n: e7 c' a
C:0x0802     7ECA      MOV       R6,#0xCA
* }7 X( p2 h* G$ f. g- `5 ZC:0x0804     7D51      MOV       R5,#0x515 I) V5 v: D8 u7 y, o/ I0 _  Z
C:0x0806     DDFE      DJNZ      R5,C:0806
+ Z5 q/ |* c7 V- d, A$ @C:0x0808     DEFA      DJNZ      R6,C:0804
+ y' E) J+ g$ j; e! c6 ^6 qC:0x080A     DFF6      DJNZ      R7,C:0802
5 [3 G4 U1 c. Q& y' o9 B% GC:0x080C     22        RET      # ^% S4 l& o! N# @
计算分析:3 i  Y7 d6 A! |" U( R6 ^
程序共有三层循环3 ~& u6 P5 z7 s- D/ Q( _: H1 s
一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us! \9 A) c! \, P
二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us
# c8 j8 w9 k* W( R3 r; I9 Z三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us
/ |7 Z" q8 z# ^1 |2 h循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
! O: H0 o& a. M& P+ t延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
6 R) B: c. E* H计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
1 D4 x( X2 y: K/ p6 `5 X
7 B5 Z: ]( O! c" g) l" \二. 200ms延时子程序+ `0 \# ?4 u2 E2 c
程序:" c7 k0 F6 c5 @8 Y  g% `
void delay200ms(void){
. i6 t$ n" h. I" h8 ?, t: g   unsigned char i,j,k;
! Q$ }4 _9 y, L: o2 N" p9 }, o   for(i=5;i>0;i--)/ U! Y5 ?* `3 `1 ~
     for(j=132;j>0;j--)! t6 l# D$ `: L8 f. M& c/ K
       for(k=150;k>0;k--);5 h) u1 m# m2 b$ d/ m) N% Q
}2 U2 m5 R2 Z! i  T! D
产生的汇编
' ]' v; ]! l+ J0 t2 U) ?C:0x0800     7F05      MOV       R7,#0x058 l1 z4 r2 B) m. T* d$ E
C:0x0802     7E84      MOV       R6,#0x84& j  a& h+ Z. m9 @+ i: h1 _
C:0x0804     7D96      MOV       R5,#0x96
! p* }: S" [  x, ]# a( L0 O9 Z; o- NC:0x0806     DDFE      DJNZ      R5,C:0806* z" j, S, d! X8 D; `9 C
C:0x0808     DEFA      DJNZ      R6,C:0804
! I) q2 r" z8 @2 \+ T, L1 o* A7 [C:0x080A     DFF6      DJNZ      R7,C:08027 d8 I7 C' }6 X# O9 r7 h
C:0x080C     22        RET6 e6 l# O; [0 V* P% a

) I* @" J9 E8 ]9 J1 _* i! I7 O6 y/ K' C三. 10ms延时子程序+ a+ R" `# ?9 Z- _# [
程序:0 a8 k+ U* A9 p4 Z
void delay10ms(void){
0 w1 T4 [3 a% K3 x   unsigned char i,j,k;
& Q- N6 Y9 T, {# f   for(i=5;i>0;i--)1 v' N8 L+ N4 u; l6 V- |7 c
     for(j=4;j>0;j--)& A8 \+ t7 O3 R6 ]
       for(k=248;k>0;k--);! R) G) J7 J# j$ t: I
}! \0 {3 L  Q# y& C) v  s
产生的汇编- a: @) h9 z  @! L" {' \) j
C:0x0800     7F05      MOV       R7,#0x05
4 g4 u+ C5 A$ b0 u" U: nC:0x0802     7E04      MOV       R6,#0x044 I0 n5 c, Q7 ?0 p
C:0x0804     7DF8      MOV       R5,#0xF8
& O6 o# w+ r. W4 n- x% BC:0x0806     DDFE      DJNZ      R5,C:0806
) i9 E+ M& _. z- z+ q) VC:0x0808     DEFA      DJNZ      R6,C:08041 l# f( `$ }* w7 M
C:0x080A     DFF6      DJNZ      R7,C:08026 b0 a5 k0 ]: \* R
C:0x080C     22        RET      
9 f6 \& z5 W; q9 E! h9 y+ C0 r8 q/ W( Y2 A( q+ }
四. 1s延时子程序
- M' ^* H2 i7 l9 G程序:
8 U9 ~7 X( `: ]: |+ Jvoid delay1s(void){
4 P& y) v% k, ^! {: B/ |   unsigned char h,i,j,k;
, O- f! B$ O6 m9 T) B   for(h=5;h>0;h--)
( l. ]5 P& @5 i+ [; s& |: b& g     for(i=4;i>0;i--)
( Z( i4 T  D( V7 X  K; m+ g       for(j=116;j>0;j--)* n. N' x! ~  G
         for(k=214;k>0;k--);
" |% C$ B# K  t/ R) ]}
/ U) e3 \; C" n产生的汇编" W8 e9 T/ k2 H* I7 J( I- I
C:0x0800     7F05      MOV       R7,#0x05
# k+ c/ Q/ N8 PC:0x0802     7E04      MOV       R6,#0x04
8 f# G( S- R) J+ T; DC:0x0804     7D74      MOV       R5,#0x74
7 j/ x5 Q8 h! e1 e* m* nC:0x0806     7CD6      MOV       R4,#0xD66 C' }1 y# x4 ^
C:0x0808     DCFE      DJNZ      R4,C:0808# h4 \7 r  k" s7 q
C:0x080A     DDFA      DJNZ      R5,C:0806, a7 i, d) [$ d; {- o. j
C:0x080C     DEF6      DJNZ      R6,C:0804" d8 T  B3 I' U5 f9 Z. N
C:0x080E     DFF2      DJNZ      R7,C:0802) g, `6 z2 ]# T7 ?

C:0x0810     22        RET

" E% r4 I; n1 \9 d# |2 c


  \  B' I# O; M. b

时钟周期    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;
" E1 g+ q  J9 i$ ^" ^! @/ s

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-12 03:50 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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