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

单片机延时C语言程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
(晶振12MHz,一个机器周期1us.)
- O2 T& E! G6 |" P: W一. 500ms延时子程序
/ l& s6 D4 {5 N: r$ N  [程序:
" G. q, b. P: }  @# Vvoid delay500ms(void){
; S. t( w3 ~$ E) u4 a2 J4 h0 }   unsigned char i,j,k;
2 e, t1 l$ _( y% k' |& e   for(i=15;i>0;i--), T; u* u( o; \. o6 C- P0 M6 M$ t
     for(j=202;j>0;j--)5 \% u  f5 a, B! d# }
       for(k=81;k>0;k--);5 [/ D+ [8 N' M1 L) n% U, b. b
}6 l# H$ [5 ~1 g# K, K% P# }
产生的汇编:
1 G( d+ x; K4 z5 |. g/ WC:0x0800     7F0F      MOV       R7,#0x0F" k$ t9 _7 f$ R
C:0x0802     7ECA      MOV       R6,#0xCA
& I8 O: ]8 n3 [' QC:0x0804     7D51      MOV       R5,#0x515 K7 S7 K/ o. V* w
C:0x0806     DDFE      DJNZ      R5,C:08060 \- {7 {  [$ U0 D6 o1 f
C:0x0808     DEFA      DJNZ      R6,C:0804- O& n. D& ]6 x
C:0x080A     DFF6      DJNZ      R7,C:0802
8 c6 N9 s, p# }* W4 U: ]0 a) r8 cC:0x080C     22        RET      2 i  A; q  E' r4 z( I, G
计算分析:0 W& R# C8 P/ w7 s# P0 ~4 J% P6 A* q
程序共有三层循环
5 A# ]' J7 h8 P一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us2 s. ?1 r3 z9 W! e8 r, l
二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us6 H3 R' n$ d2 y1 r& l- d
三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us
7 z/ L8 x/ C" _/ z循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us$ o/ S4 S7 S3 J# d
延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
' P4 F0 [* C' q- v计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
6 |  F! c! V8 F6 @- k8 M4 {- V# d: a
二. 200ms延时子程序& O! }+ V) g5 D2 r6 D0 v; C
程序:$ X5 x" p+ A  u1 J) g8 U
void delay200ms(void){
, ?! p+ V1 y2 }- L   unsigned char i,j,k;
3 r( l1 a4 p* M8 O6 c   for(i=5;i>0;i--)
% `' X* L1 [$ D- w1 ~$ z0 q- ~7 J3 c     for(j=132;j>0;j--)6 J3 x# L; N. K; }8 i
       for(k=150;k>0;k--);. B. d$ Q; x9 Z5 `+ c
}
& c1 z: b2 _9 d; A1 k- \产生的汇编: j& v8 w/ k+ ?/ I% Q: l; M+ r: z/ }" f
C:0x0800     7F05      MOV       R7,#0x05, H( x  {1 L6 V0 K* C5 E
C:0x0802     7E84      MOV       R6,#0x84
9 J; Z9 d3 _" m( i+ G& B  ~C:0x0804     7D96      MOV       R5,#0x96) F1 N. a3 ^) }9 K
C:0x0806     DDFE      DJNZ      R5,C:0806) c% G( H, M4 {- p" D( [* |) X1 |9 ]
C:0x0808     DEFA      DJNZ      R6,C:0804
' v1 j7 I- P/ Y1 G; |C:0x080A     DFF6      DJNZ      R7,C:0802
; ?" c% j% W: v& W" Z8 B, g" k1 ]C:0x080C     22        RET/ Y3 o" ^! E3 w) n. O" X

! Q% V- F' A% p9 O三. 10ms延时子程序
5 F. D6 ]( x9 f程序:
4 z* h3 @" C5 i! \+ \' Y7 nvoid delay10ms(void){0 E$ \+ _3 M( I' M* E* i) p
   unsigned char i,j,k;
& g; V' ^9 c6 B6 o( ^& m& B   for(i=5;i>0;i--)# [3 n/ y' _) o7 `$ y
     for(j=4;j>0;j--)+ z) |9 x/ j; j4 C
       for(k=248;k>0;k--);
( x. V6 X! a5 k$ g3 r* ~}
  b* n( ]2 t; l2 w7 f产生的汇编
' \7 v: A0 e0 t2 N9 K5 QC:0x0800     7F05      MOV       R7,#0x05  o; \' c  a! a% ?  S
C:0x0802     7E04      MOV       R6,#0x04
- M9 d4 ]- Z& A$ t# SC:0x0804     7DF8      MOV       R5,#0xF8. h) I5 R+ e* G
C:0x0806     DDFE      DJNZ      R5,C:08060 v/ D3 Y+ y- S  L  P
C:0x0808     DEFA      DJNZ      R6,C:0804
2 W  k& D# q) G0 G5 ^. ]# R9 O  u+ AC:0x080A     DFF6      DJNZ      R7,C:0802
9 @) P6 |  o7 `3 I2 D* JC:0x080C     22        RET      
' _8 [7 j: N1 |: _7 G8 J: x  Q* `3 f9 K5 ?8 j
四. 1s延时子程序( [) t. q# k( z' b. i
程序:$ i9 C6 j1 X+ j
void delay1s(void){+ [% u/ l% W: R  G
   unsigned char h,i,j,k;
0 i8 L& Q8 f5 b& T! Y   for(h=5;h>0;h--)
5 V, H& m6 R: a7 g. Q+ L     for(i=4;i>0;i--)* w/ M' y6 O7 r4 n1 y. N  d
       for(j=116;j>0;j--)
# p. y8 \) K3 [5 p* j* X3 I5 A" n         for(k=214;k>0;k--);& m$ V" O2 l7 [
}$ [. C& q- A" p# f- \. _
产生的汇编
0 a( {, d4 K0 R3 i6 ~C:0x0800     7F05      MOV       R7,#0x055 t# n. `9 Y4 h3 c
C:0x0802     7E04      MOV       R6,#0x04
& s' O, R) H1 d9 D) RC:0x0804     7D74      MOV       R5,#0x746 h- Z/ L7 X9 V3 I! E
C:0x0806     7CD6      MOV       R4,#0xD6
7 t6 j4 c3 d2 G0 vC:0x0808     DCFE      DJNZ      R4,C:0808
- t- m. p8 r, vC:0x080A     DDFA      DJNZ      R5,C:0806
1 f' n+ O% q3 y- L4 @C:0x080C     DEF6      DJNZ      R6,C:0804
3 i- \# X& ?% E3 @% xC:0x080E     DFF2      DJNZ      R7,C:0802
( v+ H1 _: U4 s3 F" |0 Q

C:0x0810     22        RET


- J* B% K, z5 S5 |

0 A$ w2 n; Z) X0 O& |+ Q# I, {

时钟周期    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;
& f( x& G" h& V& B- g$ {4 Y

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-19 23:02 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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