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

单片机延时C语言程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
(晶振12MHz,一个机器周期1us.)9 r: [0 p+ |4 G/ e$ C# W
一. 500ms延时子程序2 J  d% t: W0 p+ i4 q; J3 g
程序:
- l& v) O3 ^9 ?* S( L  y3 E% Pvoid delay500ms(void){
* p, U8 A+ q# m( S) n   unsigned char i,j,k;
8 E: N1 J4 @$ B/ E4 \' h   for(i=15;i>0;i--)% X( @: ~/ i1 o) ?) f* M4 t4 _
     for(j=202;j>0;j--)+ e* P/ b; ?: N( {
       for(k=81;k>0;k--);
/ r" n/ e" }# |% B}) u- v  }- S+ ~( T
产生的汇编:
/ L+ t3 N2 Y7 d0 b* NC:0x0800     7F0F      MOV       R7,#0x0F
$ }, q* o  q! W7 T& \1 n% ZC:0x0802     7ECA      MOV       R6,#0xCA( Y- g. I7 |7 i: E+ T. \
C:0x0804     7D51      MOV       R5,#0x51
, A) _# Z8 p/ S3 `" c6 i: e9 BC:0x0806     DDFE      DJNZ      R5,C:0806
/ R8 G1 j) F9 d3 K( S& W2 kC:0x0808     DEFA      DJNZ      R6,C:0804
1 }3 X- F0 q* ?' I' b! i7 DC:0x080A     DFF6      DJNZ      R7,C:08025 P% R8 U7 _  H2 c" Z
C:0x080C     22        RET      5 `4 X) T/ [2 H) q5 h
计算分析:  j4 B2 t+ V+ n9 t: d
程序共有三层循环: {  g5 Z# }9 L) D5 h2 g( T9 T7 d
一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us' X, m+ z! X1 h8 U! |6 j
二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us
4 _3 p$ \9 {  J- N5 d3 d+ ~5 S4 O. q三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us
4 m" u0 F6 c; A+ |循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us' J  m9 v- A. P. Q& Y, X$ W
延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
; w9 h( }) N' |3 `2 r计算公式:延时时间=[(2*R5+3)*R6+3]*R7+51 E4 u0 `) m/ _2 a, d3 W0 W7 ]

+ ~: g* G7 V1 Q6 j二. 200ms延时子程序9 |  b3 D1 d+ l+ A0 L6 [$ V& Y
程序:2 b/ d" i, Y& B" U
void delay200ms(void){
( a' A% _0 t" k; W, ?8 w   unsigned char i,j,k;
+ F' W& [4 {0 e7 C6 z4 E3 n   for(i=5;i>0;i--)
# Z( x' b4 G% v" e: z     for(j=132;j>0;j--)" R' [: ?0 H1 ~
       for(k=150;k>0;k--);# a' [' `, O  J9 y: Y  m* x& q
}
, p% ~1 t* ^' b) z产生的汇编
0 b* q. M7 b) u4 `C:0x0800     7F05      MOV       R7,#0x05
* C: a7 R( V6 r  x' @8 ?4 r. E* OC:0x0802     7E84      MOV       R6,#0x848 U! Z) J9 P! s' ^) d
C:0x0804     7D96      MOV       R5,#0x96! n, _3 W/ Z5 Y2 Q( }- w
C:0x0806     DDFE      DJNZ      R5,C:0806
% Z) @" K, k4 R8 ^( mC:0x0808     DEFA      DJNZ      R6,C:0804
5 @. S+ N* V) f2 L5 Y" j& |C:0x080A     DFF6      DJNZ      R7,C:0802& P/ p! L' h; q5 C- l7 G3 n' S
C:0x080C     22        RET+ {& ~. a# k3 i) {2 l( m- k
9 ~8 `9 C* n4 ]; T( E' \0 P; z: T
三. 10ms延时子程序4 i/ j/ \+ l! U/ s1 I3 ^% |8 X8 U
程序:
8 `9 M, w9 D( Q. o# p7 N& Bvoid delay10ms(void){% A+ b5 G) C$ s0 _
   unsigned char i,j,k;
9 c& Y) }! h& m# ^: |   for(i=5;i>0;i--)" e1 G) S! L8 r' m9 k
     for(j=4;j>0;j--)
5 L# L2 i( V/ I/ e) u) d3 c0 E1 b       for(k=248;k>0;k--);
+ m  z7 I# G; P; U7 _}- B$ z) ]# n* M7 n
产生的汇编. o+ }: O( z" S2 E
C:0x0800     7F05      MOV       R7,#0x053 F# o! }1 ?1 y' b5 g  s6 v7 f/ }3 t
C:0x0802     7E04      MOV       R6,#0x04
0 y' ~6 a+ R9 yC:0x0804     7DF8      MOV       R5,#0xF8+ F3 I7 p! k1 M: N& [+ g& {- U' u
C:0x0806     DDFE      DJNZ      R5,C:0806* Q4 z8 Y- q/ r' I( b* x
C:0x0808     DEFA      DJNZ      R6,C:0804& T6 o% `; m2 B. G5 e) i
C:0x080A     DFF6      DJNZ      R7,C:0802' E- S7 Q, E8 R
C:0x080C     22        RET      
, j/ u9 ^; k& \! u1 s8 |
9 j9 r5 u  T2 x! ^四. 1s延时子程序& v4 m  t0 P# ^3 c0 p* f! A
程序:. c; }; B" b  x6 J4 o! O
void delay1s(void){
" d3 Z- u: e3 Y& H5 `! q0 ^3 o, u   unsigned char h,i,j,k;' ]/ a8 ]9 m/ y' q6 Y5 f  j2 q6 n. L
   for(h=5;h>0;h--)
! n$ j1 f' j, w' {     for(i=4;i>0;i--)
% K/ t# W" o2 H1 n) P       for(j=116;j>0;j--)
# s$ P2 K4 r! [! X2 D( m/ b         for(k=214;k>0;k--);
4 U$ W6 w( X2 |+ P}* W6 C- [. q. a
产生的汇编  b# V8 @' n: P1 D5 x* F; Z6 n6 R
C:0x0800     7F05      MOV       R7,#0x05) V! M+ L0 v+ g7 J8 |
C:0x0802     7E04      MOV       R6,#0x04- R! l$ W9 ], K5 ~1 h6 U
C:0x0804     7D74      MOV       R5,#0x740 o6 _# G# N1 _. `% _5 N, ?9 D
C:0x0806     7CD6      MOV       R4,#0xD6
- R4 c; {6 E0 D9 iC:0x0808     DCFE      DJNZ      R4,C:0808
' y4 e+ ?8 O8 N0 y+ yC:0x080A     DDFA      DJNZ      R5,C:0806
  N! x* s1 A  p; s7 E( MC:0x080C     DEF6      DJNZ      R6,C:08045 t. R7 Z$ c$ Q3 ^
C:0x080E     DFF2      DJNZ      R7,C:08023 J5 P$ [+ c5 @

C:0x0810     22        RET

7 m! P5 o" w& O/ f

" J, @8 J& J1 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" 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 T: f: U% s3 f% o  M: \/ o+ s

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-7 05:49 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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