找回密码
 注册
查看: 473|回复: 1
打印 上一主题 下一主题

单片机延时C语言程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
(晶振12MHz,一个机器周期1us.)& L6 W4 b, v& M
一. 500ms延时子程序
- y: U+ t( K. C3 {* j程序: , O3 W$ w  q4 f9 y' N
void delay500ms(void){  D% n( z4 @' q% q
   unsigned char i,j,k;0 I$ j0 c8 }+ \8 z1 }. T
   for(i=15;i>0;i--)5 a; [: d3 o9 @  ?
     for(j=202;j>0;j--)! u$ e2 H2 R9 G1 L( Y, c
       for(k=81;k>0;k--);$ g2 B! V- ^& |% w) r( {
}
0 H. n7 F9 e! j产生的汇编:0 Q* ~7 Y4 c4 G6 y: ~
C:0x0800     7F0F      MOV       R7,#0x0F1 e- |1 x8 d3 Q7 a9 m
C:0x0802     7ECA      MOV       R6,#0xCA
! k" X4 G: _' ^) y) y, o3 t: eC:0x0804     7D51      MOV       R5,#0x516 f/ L+ {! _! f1 a
C:0x0806     DDFE      DJNZ      R5,C:08063 d, x0 i) v- v# ~7 t6 W
C:0x0808     DEFA      DJNZ      R6,C:0804
4 b% }, t3 A& K  a1 D; ^C:0x080A     DFF6      DJNZ      R7,C:0802" S, i7 x) D: W
C:0x080C     22        RET        h) D, u0 M1 z
计算分析:
' H. }: L7 D- z$ I3 U9 P1 K( G& G程序共有三层循环' R+ }9 W5 Q# a. D# }  U8 H
一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us: t2 H' L8 C6 ^3 ~& f3 h+ I# w4 @
二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us
2 B+ C) k; \% C2 l三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us" g- ]2 x: T( ~! d" O% w- g6 I- u
循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us0 c; Z/ ^! C" s/ {
延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms4 G! c. k& V, J) g
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
  A# E% t! S3 Z& W+ q7 K/ J  b& s: {' V
二. 200ms延时子程序
0 l7 c; n8 z5 D# F" z* N' a. o程序:
1 ~) M0 r/ e3 ^- _/ }void delay200ms(void){% Y4 U; ~+ F, E! r
   unsigned char i,j,k;6 |& p- [- x* y, i
   for(i=5;i>0;i--). o4 ]: A( N) ?. p9 n! X$ w
     for(j=132;j>0;j--)
+ ?$ |: y9 b1 B5 i8 Z- \0 @       for(k=150;k>0;k--);
8 @1 v$ L" I( _) y}
- B! h9 s, Q" l0 L产生的汇编
# }9 @# A  k* E. C# g( y" wC:0x0800     7F05      MOV       R7,#0x05, O; \/ H- e! h4 C/ q: T7 I; _
C:0x0802     7E84      MOV       R6,#0x84
; s4 s/ I8 ^# q& fC:0x0804     7D96      MOV       R5,#0x96
" |, L$ B. n' T) WC:0x0806     DDFE      DJNZ      R5,C:08062 c+ ^, T$ U8 e0 E5 u
C:0x0808     DEFA      DJNZ      R6,C:0804% v  b+ M1 v" }# t+ B7 z. }, Q
C:0x080A     DFF6      DJNZ      R7,C:0802
0 F2 c$ d% ?% u) T) L; v& `C:0x080C     22        RET
$ r$ s. ~6 J' F) ?  H  P" J9 r1 e3 U7 c, B( v
三. 10ms延时子程序" i1 b7 E; u* F& s
程序:
3 w- T3 H  \- u: R" ~- p% _# B2 Svoid delay10ms(void){8 Z' S0 R/ G! C( m6 w
   unsigned char i,j,k;
' Q8 j* e7 f% B3 l+ h# |2 Z   for(i=5;i>0;i--)
1 |; b. |7 B* D* n/ o     for(j=4;j>0;j--)9 s9 `1 a7 O' |
       for(k=248;k>0;k--);
8 g$ Y( G( W! Y. D}
" m  \$ t! j: a: u3 c) w产生的汇编
3 \6 p9 C( K' ?$ A6 N4 N' AC:0x0800     7F05      MOV       R7,#0x05$ k! V9 l. K" \2 L/ ^; i
C:0x0802     7E04      MOV       R6,#0x04
4 T5 j5 d) V7 gC:0x0804     7DF8      MOV       R5,#0xF8
" Z3 H1 c$ E# J$ j" RC:0x0806     DDFE      DJNZ      R5,C:0806
# \- n- O: o1 o% z  c$ y' a7 K% sC:0x0808     DEFA      DJNZ      R6,C:0804
* n" n3 Q2 _. EC:0x080A     DFF6      DJNZ      R7,C:0802" c6 b; U. O; H9 g
C:0x080C     22        RET      7 j+ D/ G. o- i! X' Z
5 u* z% O* A* I) a' m! T9 ~* k
四. 1s延时子程序' Y; I, a$ J  e, W& g& `, @
程序:
% ~% }% d# u2 J" c5 D1 Gvoid delay1s(void){
8 o2 j, R5 D+ L3 ^8 C; n   unsigned char h,i,j,k;) ?0 _( Y: q, I; m
   for(h=5;h>0;h--)# d0 m; C- Z' q8 v8 m
     for(i=4;i>0;i--)
1 @/ ~2 \1 t1 w; D8 p  A' O6 a       for(j=116;j>0;j--)( o; n. ^1 B0 m: o! R
         for(k=214;k>0;k--);9 l- B0 ~3 Y: k. s) Z9 a
}
5 s* g/ \, ]0 `: g- {. U9 z7 ^) u/ H产生的汇编
5 P- S. x, a" b+ _  v: V3 \C:0x0800     7F05      MOV       R7,#0x058 v5 c; P1 w" J8 l; @& {7 h4 Q8 M9 Y
C:0x0802     7E04      MOV       R6,#0x04! E" S. C9 {/ D$ M: o; s
C:0x0804     7D74      MOV       R5,#0x74
2 z+ ]- z0 {5 ~% A# s8 Z, wC:0x0806     7CD6      MOV       R4,#0xD6
6 T1 |6 t7 D: m% C5 ]8 XC:0x0808     DCFE      DJNZ      R4,C:0808" G) f5 B3 l/ H( p  Z  @5 l1 g
C:0x080A     DDFA      DJNZ      R5,C:0806
4 n4 I" s+ p3 @" b0 T$ _C:0x080C     DEF6      DJNZ      R6,C:0804
" @) A/ C1 d/ N6 S2 Y% iC:0x080E     DFF2      DJNZ      R7,C:0802
7 R4 U" s0 K0 |

C:0x0810     22        RET

- h! O" {; m  _* O+ R7 @0 f" v! J/ _

9 M: h! E  ~" h0 s) M0 t& ~

时钟周期    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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微秒;
& [8 x; h# d$ f4 N

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-5-26 02:28 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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