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

单片机C语言延时程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-11-25 13:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x

$ [0 `: S2 M. S! \" E
(晶振12MHz,一个机器周期1us.)+ w! S8 ?( q1 P0 V$ ?! s" j: ~
一. 500ms延时子程序( w" }# b# S, r9 {: x- i  ]$ Z
程序:7 {5 j* W4 P: l/ p) F9 w
void delay500ms(void){9 t) t9 n- C$ v2 e9 g" `
   unsigned char i,j,k;
: D# f6 T* m+ x3 a, L   for(i=15;i>0;i--)
) u& L" d5 P  L( N+ T" ?1 k! Z$ R     for(j=202;j>0;j--)
/ e8 g& D* p2 O3 C6 B       for(k=81;k>0;k--);
$ b  M1 r2 M% z9 I  V}
* p' ^* L1 ^$ k; Q, {产生的汇编:7 U+ ]* R: L: M
C:0x0800     7F0F      MOV       R7,#0x0F
" r+ j2 n0 j. Z7 G; i: YC:0x0802     7ECA      MOV       R6,#0xCA
" ]  N; m: P+ D, QC:0x0804     7D51      MOV       R5,#0x51
( q  Z7 e6 |/ B$ |C:0x0806     DDFE      DJNZ      R5,C:0806
1 A- L4 a3 o3 E' V. Y& pC:0x0808     DEFA      DJNZ      R6,C:0804
: |! i& j0 E6 Q+ f5 n$ c  N' EC:0x080A     DFF6      DJNZ      R7,C:0802
# U& f. Q) @9 ~/ i+ gC:0x080C     22        RET      
8 [! W0 T# X& v6 L/ H计算分析:% s2 X* C1 r) E) m1 l' X4 k
程序共有三层循环: [  w% R. _# _+ l7 m* b  I
一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us! B8 F# z" P5 V. G
二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us, {. `: Y) X2 s5 S5 n( `
三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us
/ [7 K* e, i* _5 W2 |循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
" e9 A& `& M( k5 T3 A延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms7 S& ^1 h; Z% E* Y9 {
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
4 \: E+ N2 G$ M6 V
, u1 e: i# m' `+ X2 D* K二. 200ms延时子程序
  c/ }1 f% J, o4 p! H  y/ p$ q! I程序:
, R, y) p' j9 [2 v; J/ Evoid delay200ms(void){  j) K  d6 e4 y/ O( f
   unsigned char i,j,k;
+ h; I0 p+ D' n. E" I& s   for(i=5;i>0;i--)
" S/ g0 e2 j5 l3 ^8 E     for(j=132;j>0;j--)
& A& R% B) I1 w       for(k=150;k>0;k--);$ _/ N# E8 y! P4 \* Z$ ~, }/ e8 V
}
/ W  ^% o' ]1 a, U产生的汇编
9 f0 t. A( ]% i1 E# IC:0x0800     7F05      MOV       R7,#0x05/ ~* w2 a/ S1 z# G2 k& A; ], q: \
C:0x0802     7E84      MOV       R6,#0x84
2 m$ h; j% f, y) i9 f9 wC:0x0804     7D96      MOV       R5,#0x96
9 `) R# Z5 D2 q7 c9 z; G9 y! {C:0x0806     DDFE      DJNZ      R5,C:08062 n5 w; n$ l" e
C:0x0808     DEFA      DJNZ      R6,C:0804; W$ H! t) s4 g7 x7 g' X. s1 l# h  t
C:0x080A     DFF6      DJNZ      R7,C:0802
4 O' E( w1 I# o1 G$ U; D4 ]C:0x080C     22        RET+ I3 R8 Y3 c; k$ A' e& l3 N
7 F% t) z1 n" F
三. 10ms延时子程序
# {1 ^9 D7 A9 j3 I程序:
# ^, U! i5 S; d9 y, r4 G- [* p+ gvoid delay10ms(void){+ p& ]; X2 O: [
   unsigned char i,j,k;
$ |: `0 A0 v  ]5 ?8 ]' `) f. j   for(i=5;i>0;i--)9 z& r' P# P# h# `: B7 D$ \
     for(j=4;j>0;j--)8 v  Z/ Z& a) y1 d2 L/ z3 i& l
       for(k=248;k>0;k--);
( E0 C; W0 \9 Y% a}/ U( S. K7 c/ c7 d& s! j
产生的汇编
1 `6 A9 D! x, DC:0x0800     7F05      MOV       R7,#0x05; N! O2 G! q5 Y- @3 }) a+ ?% N
C:0x0802     7E04      MOV       R6,#0x04- X) h/ s/ g4 r+ ~& Z5 R6 ]# a3 O
C:0x0804     7DF8      MOV       R5,#0xF8* E9 J8 Y, H  X' f) C, k
C:0x0806     DDFE      DJNZ      R5,C:0806
8 i6 p( ]& H8 w8 b* _% rC:0x0808     DEFA      DJNZ      R6,C:0804
) k. n' D$ U' S4 Z" i7 @. BC:0x080A     DFF6      DJNZ      R7,C:0802
( c9 w# ~5 V+ ?1 QC:0x080C     22        RET      3 l( Q* c6 j2 a
& m  x3 M  W' H/ ~0 n# A
四. 1s延时子程序& k% ?# ?. L2 I# z' d
程序:5 S* E; A$ w) j! e! _" X
void delay1s(void){" f' a0 N% u5 N# P
   unsigned char h,i,j,k;7 w* w3 m6 M9 O% l2 i8 h+ l
   for(h=5;h>0;h--)
$ \2 D3 J5 C" g9 I5 a) f" I& c     for(i=4;i>0;i--): U2 h8 N( L1 Y# z: C
       for(j=116;j>0;j--)& X2 u: c  C! m' h0 t( y) R
         for(k=214;k>0;k--);  D  @/ C$ \3 b! g
}
0 r5 I6 c$ g8 I) ?2 ~7 z& n; f" J0 S# H产生的汇编
+ r8 O# x3 a* S. s; T; AC:0x0800     7F05      MOV       R7,#0x05
9 E9 z# w5 v, z' g% EC:0x0802     7E04      MOV       R6,#0x04
# Y" A# _' [! f( R, q1 yC:0x0804     7D74      MOV       R5,#0x74
* z4 B* f) h8 j- \C:0x0806     7CD6      MOV       R4,#0xD6* W9 F( ~: }: g( J; l4 C
C:0x0808     DCFE      DJNZ      R4,C:0808/ S9 o5 V+ O) z- m' h/ O& B& m- G
C:0x080A     DDFA      DJNZ      R5,C:08069 W& ~0 r3 x3 z5 @, K; |, o5 }
C:0x080C     DEF6      DJNZ      R6,C:0804
' H7 _9 u- |; P' c6 n1 g4 {' E0 y# XC:0x080E     DFF2      DJNZ      R7,C:0802
! H- s3 R2 y* o) ?* c* yC:0x0810     22        RET
5 K+ j: g1 x  V! `
" c6 @% S$ q) y3 H4 S, K- K! ~2 m  ~

# E6 r' i% k/ ]$ U! R5 U; r# l时钟周期    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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"><span class="ask-title">当80C51单片机晶振频率为12MHz时,时钟周期.机器周期各是多少?</span></h1><pre id="answer-content-375512566" class="answer-text mb-10" name="code">答:1.时钟周期为晶振频率的倒数:1/12微秒;    2.机器周期为12个时钟周期:1微秒;

% i+ O% F  t' Z
9 G1 g/ Z6 ?- z* E$ p# u: `# L
0 A. w$ N3 s, w8 B
0 I1 V! w$ w* z; F& A- h
' P+ F- V0 s) J( _/ Q" R

' X; m/ @3 U6 J' Z6 r: M3 X6 Y7 g: Q. m# s4 i: v

0 A2 U1 ^# U9 m2 _: N

该用户从未签到

2#
发表于 2021-11-25 14:18 | 只看该作者
c语言就用循环,汇编用空语句

该用户从未签到

3#
发表于 2021-11-25 14:18 | 只看该作者
时钟周期也称为振荡周期

该用户从未签到

4#
发表于 2021-11-25 14:19 | 只看该作者
在一个时钟周期内,CPU仅完成一个最基本的动作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-3 15:09 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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