微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 谈谈51单片机延时子程序

谈谈51单片机延时子程序

时间:11-26 来源:互联网 点击:

ms:movr5,#05h;2.496ms

time2_5ms_1:movr6,#0f8h;497us

djnzr6,$

djnzr5,time2_5ms_1

ret

;*****************************************************************

;延时10mS

;*****************************************************************

time10ms:movr5,#14h;10.262ms

time10ms_1:movr6,#0ffh;511us

djnzr6,$

djnzr5,time10ms_1

ret

;*****************************************************************

;延时50mS

;*****************************************************************

time50ms:movr5,#63h;49.996ms

time50ms_1:movr6,#0fbh;503us

djnzr6,$

djnzr5,time50ms_1

ret

;*****************************************************************

;延时100mS

;*****************************************************************

time100ms:movr5,#0c3h;100.036ms

time100ms_1:movr6,#0ffh;511us

djnzr6,$

djnzr5,time100ms_1

ret

;*****************************************************************

;延时200mS

;*****************************************************************

time200ms:movr5,#02h;250.351ms

time200ms_1:movr6,#0f4h;125.173ms

time200ms_2:movr7,#0ffh;511us

djnzr7,$

djnzr6,time200ms_2

djnzr5,time200ms_1

ret

;*****************************************************************

;延时500mS

;*****************************************************************

time500ms:movr5,#04h;500.701ms

time500ms_1:movr6,#0f4h;125.173ms

time500ms_2:movr7,#0ffh;511us

djnzr7,$

djnzr6,time500ms_2

djnzr5,time500ms_1

ret

;*****************************************************************

;延时1S

;*****************************************************************

time1s:movr5,#08h;1001.401ms

time1s_1:movr6,#0f4h;125.173ms

time1s_2:movr7,#0ffh;511us

djnzr7,$

djnzr6,time1s_2

djnzr5,time1s_1

ret

12M晶振 机器周期为1US  NOP为单周期指令 DJNZ为双周期指令.

3)

;;晶振12MHZ,延时1秒

DELAY:MOV72H,#100

LOOP3:MOV71H,#100

LOOP1:MOV70H,#47

LOOP0:DJNZ70H,LOOP0

NOP

DJNZ71H,LOOP1

MOV70H,#46

LOOP2:DJNZ70H,LOOP2

NOP

DJNZ72H,LOOP3

MOV70H,#48

LOOP4:DJNZ70H,LOOP4

4);延时1分钟子程序,F=6MHz

;程序已测过,延时时间60,000,000.0uS

delay60s:mov r3,#228

mov r2,#253

mov r1,#219

loop1:djnz r1,$

djnz r2,loop1

djnz r3,loop1

nop

ret

5)计算机反复执行一段程序以达到延时的目的称为软件延时,单片机程序中经常需要短时间的延时,但是相当一部分人对延时程序很模糊,对延时程序的算法不够了解,在这里我以12MHz晶振和两个经典延时子程序为例,详细分析单片机汇编延时程序。

何为时钟周期、机器周期、和指令周期?

时钟周期:也就是振荡周期,以12MHz的时钟脉冲为例,那时钟周期就为(1/12000000)s=(1/12)us;

机器周期:1个机器周期=6个状态周期=12个时钟周期=1us;

指令周期:CPU执行一条指令所需要的时间称为指令周期,指令周期是以机器周期为单位的,不同的指令所需的机器周期不一定相同,可参考51单片机指令速查表。

由上可得:CPU执行一条单周期指令,需要1us;执行一条双周期指令需要2us。

下面是具体的延时子程序分析:

0.1s延时子程序(12MHz晶振):

MOV R7,#200;单周期指令(1us)

D1:MOV R6,#250;单周期指令(1us)

DJNZ R6,$;双周期指令(2us)//该指令自身执行R6次

DJNZ R7,D1;双周期指令(2us)//D1执行R7次

RET;双周期指令(2us)

T=1+(1+2*R6+2)*R7+2

=100603us

≈0.1s

0.5s延时子程序(12MHz晶振):

MOV R7,#5;单周期指令(1us)

D1:MOV R6,#200;单周期指令(1us)

D2:MOV R5,#250;单周期指令(1us

DJNZ R5,$;双周期指令(2us)//该指令自身执行R5次

DJNZ R6,D2;双周期指令(2us)//D2执行R6次

DJNZ R7,D1;双周期指令(2us)//D1执行R7次

RET;双周期指令(2us)

T=1+[1+(1+2*R5+2)*R6+2]*R7+2

=503018us

≈0.5s

6) 51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。

ORG0;程序从0地址开始

START:MOVA,#0FEH;让ACC的内容为11111110

LOOP:MOVP2,A;让P2口输出ACC的内容

RRA;让ACC的内容左移

CALLDELAY;调用延时子程序

LJMPLOOP;跳到LOOP处执行

;0.1秒延时子程序(12MHz晶振)===================

DELAY:MOVR7,#200;R7寄存器加载200次数

D1:MOVR6,#250;R6寄存器加载250次数

DJNZR6,$;本行执行R6次

DJNZR7,D1;D1循环执行R7次

RET;返回主程序

END;结束程序

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top