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

单片机延时C语言程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
(晶振12MHz,一个机器周期1us.)
$ N4 @$ D% ?; m. e  J一. 500ms延时子程序0 \/ j" }7 ?' c& o1 ]7 `2 Y6 Z; Z! O
程序: - L" H, s  b7 p
void delay500ms(void){
2 t5 m9 A& y$ W+ O* g- v   unsigned char i,j,k;
! Z1 z3 G6 Y; L3 q9 d: f; `   for(i=15;i>0;i--)
+ y- h- D& j0 m( V' j3 z& Q     for(j=202;j>0;j--)
& f" f0 n$ M- |; D! _       for(k=81;k>0;k--);/ \& z) A/ y  F! W; p
}
* P+ h# k+ Z5 A产生的汇编:% D8 f( R- A: r  r2 t
C:0x0800     7F0F      MOV       R7,#0x0F$ d# L) n" @# x4 c% A! S
C:0x0802     7ECA      MOV       R6,#0xCA
& i6 I1 ]3 G& \1 a8 i- |C:0x0804     7D51      MOV       R5,#0x513 ]3 C3 b- s- A& z
C:0x0806     DDFE      DJNZ      R5,C:0806# b! N2 y& v1 K* Y' A5 H& n
C:0x0808     DEFA      DJNZ      R6,C:0804
* l5 M; p" ?  S7 cC:0x080A     DFF6      DJNZ      R7,C:0802
& t* i! F# V2 cC:0x080C     22        RET      
  o! p4 Z  X! o# y7 H7 X0 g计算分析:
, B, {9 c5 p* z/ M程序共有三层循环
) Z; s1 i: h. N- x3 C一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us$ f6 P. Z) H4 D$ j
二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us
3 E$ i" W& B0 X! b0 d8 W% z- T三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us
  E( M* t8 d. }( d6 o! K- t5 {5 W循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
' H. I4 P9 `( D8 k& _$ I6 f8 q; I延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
6 T$ t) W3 y% f) Y+ D计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
) e( V/ }% s/ G1 g* S# Z$ X. S3 q7 `2 B) X0 B
二. 200ms延时子程序7 E- P9 w# [; G5 {% t
程序:
4 r3 K% H6 z& x' Svoid delay200ms(void){$ B9 J3 L5 Z+ z! _  ]
   unsigned char i,j,k;2 [2 X6 G- h8 I# _
   for(i=5;i>0;i--)
7 T$ v* U8 T3 Y+ V: W- ?     for(j=132;j>0;j--)0 E" H" B! t0 t8 K* c5 i
       for(k=150;k>0;k--);
  V8 ~/ p' x. ?}! J& B' p! _, c$ H2 V; S: K' }; n
产生的汇编/ C4 J/ N( D) h: }3 h
C:0x0800     7F05      MOV       R7,#0x056 w) s7 M4 v" a% e$ C" X
C:0x0802     7E84      MOV       R6,#0x84
: }$ ]9 }- p" \  N' b5 i* jC:0x0804     7D96      MOV       R5,#0x96
* M$ C/ `! ?6 ?; x' P5 {C:0x0806     DDFE      DJNZ      R5,C:0806
# L7 g) z+ O8 x4 EC:0x0808     DEFA      DJNZ      R6,C:0804
7 Z' l2 ]& W/ a* w& b" X$ o" YC:0x080A     DFF6      DJNZ      R7,C:0802
! k* n6 {% A. J, I! mC:0x080C     22        RET% N5 Y6 a$ x* S+ F* H! i

( X* {5 n1 A2 S0 g9 ~三. 10ms延时子程序  G' `- A4 r5 C* g( w6 `) j
程序:
0 v$ k! q- ]% u: m7 d% A6 C5 R; Evoid delay10ms(void){6 H7 r' _$ r/ Y- v7 I+ M
   unsigned char i,j,k;( }: A& Y2 z. Z7 {1 ?7 G
   for(i=5;i>0;i--)# S* i) p8 F9 |$ g( z  ?6 J
     for(j=4;j>0;j--)' c8 S( L9 O( G( u  C: t( s. S$ {* ?
       for(k=248;k>0;k--);
0 {+ {# X: [2 _  a}% ^4 l+ }- s% \
产生的汇编
5 v' W+ s  G# }* p6 Y8 H1 F, LC:0x0800     7F05      MOV       R7,#0x05* B/ F$ ~8 U, a# T# h
C:0x0802     7E04      MOV       R6,#0x04
/ G4 k0 k0 ]% A) ?$ [C:0x0804     7DF8      MOV       R5,#0xF8& E6 R( S' J5 m  t; ]2 a8 x
C:0x0806     DDFE      DJNZ      R5,C:0806% }! ^2 I; t0 N+ G* @, I  u; G6 d
C:0x0808     DEFA      DJNZ      R6,C:0804. J2 p3 O% R# L8 l. M
C:0x080A     DFF6      DJNZ      R7,C:0802# p2 M4 m; j( d3 F
C:0x080C     22        RET      0 k5 Q' p& f; f. `3 l, V" H# k

, t$ J( B' }1 Q6 W% c" j四. 1s延时子程序
. v6 `3 `$ K4 s( B- I6 l2 n  L" n9 W程序:
/ ]) s! J" J( w6 P8 I/ W; d5 nvoid delay1s(void){
( Q* |# o# @7 R# r' \% Y1 V: f9 x- t! [   unsigned char h,i,j,k;
' w/ ?7 V$ m: @   for(h=5;h>0;h--)
" M: r( y+ `+ x4 K- J     for(i=4;i>0;i--)
. e! l, _. @" _; S: {       for(j=116;j>0;j--)# y+ U6 v- a8 Q5 i. F' H
         for(k=214;k>0;k--);
" W2 F# ]2 J/ o9 D, h% E}
( _2 x9 o! s: `7 _- h8 _产生的汇编
% k2 t2 |1 _. w. h8 S) AC:0x0800     7F05      MOV       R7,#0x05
5 R1 ?8 r1 [* v. t- OC:0x0802     7E04      MOV       R6,#0x04) p4 s1 a" q  r6 Y3 B
C:0x0804     7D74      MOV       R5,#0x74) x" c" ^3 n5 b% q. K
C:0x0806     7CD6      MOV       R4,#0xD6
* [1 D$ Z* r( R- |' r" AC:0x0808     DCFE      DJNZ      R4,C:08082 O5 i1 q& ~3 L9 I
C:0x080A     DDFA      DJNZ      R5,C:0806' `0 D$ {% S7 ~# A6 w
C:0x080C     DEF6      DJNZ      R6,C:0804/ m7 B" @* l( Y. C# o
C:0x080E     DFF2      DJNZ      R7,C:08022 f- z, n3 g( R# Z; J# ]

C:0x0810     22        RET


3 b: |& q, r+ G7 n; e6 s' k- m! F. H


; o* r9 q+ |( j# s! b7 @

时钟周期    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;) g, k* i; v! G, h9 a9 O

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-30 17:04 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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