延时程序设计
单击此处编辑母版标题样式
实验四
软件延时程序设计
明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强
单击此处编辑母版标题样式
明德、博学、求实、创新
2014年6月2日星期一8时2分30秒
刘强
单击此处编辑母版标题样式
延时设计方法
1、软件延时--Байду номын сангаас采用程序实现
特点:灵活性,消耗CPU资源
;1TM ;1TM ;1TM ;2TM ;2TM ;2TM ;2TM
明德、博学、求实、创新
2014年6月2日星期一8时2分30秒
刘强
单击此处编辑母版标题样式
∵ fOSC=6MHz ∵ 1TM=12TOSC, 又∵ TOSC=1/fOSC ∴ TM=12/fOSC=12/6MHz=2µs
总TM = 1+[1+(1+2×248+2)×200+2]×100+2 =9980303
二、实验原理
软件延时利用了指令的时间属性编制的一段 循环子程序来空耗CPU的时间以达到延时的目的。
明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强
单击此处编辑母版标题样式
三、相关知识
1、时钟周期(振荡周期)、状态周期、机器周期和指令周期的关系 1TM=12TOSC、1TS=2TOSC、1TI=(1、2、4)TOSC 2、指令的执行时间(查询指令表) 3、时间和频率单位换算
总TM = 1+[1+(1+2×200+2)×20+2]×20 +2 = 161263 ∴t=161263×2μs
明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强
单击此处编辑母版标题样式
分析以下C语言实现的延时程序
void Delay(void) { unsigned char i, j, k; for (i=0; i<20; i++) for (j=0; j<20; j++) for (k=0; k<200; k++); }
单击此处编辑母版标题样式
3、三重循环延时子程序
DELAY: MOV DL3: MOV DL2: MOV DL1: DJNZ DJNZ DJNZ RET R5, #100 R6, #200 R7, #248 R7, DL1 R6, DL2 R5, DL3 ;1TM ;1TM ;1TM ;2TM ;2TM ;2TM ;2TM
明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强
通过反汇编 —转换为了汇编语言 单击此处编辑母版标题样式
C:0x0003 C:0x0004 C:0x0005 C:0x0006 C:0x0007 C:0x0008 C:0x0009 C:0x000A C:0x000D C:0x000E C:0x0011 C:0x0012 C:0x0015 Delay: E4 FF E4 FE E4 FD 0D BDC8FC 0E BE14F6 0F BF14F0 22 CLR MOV CLR MOV CLR MOV INC CJNE INC CJNE INC CJNE RET A R7,A A R6,A A R5,A R5 R5,#0xC8,C:0009 R6 R6,#0x14,C:0007 R7 R7,#0x14,C:0005
2、硬件延时—采用电路实现
特点:时间比较准备,不占用CPU资源
明德、博学、求实、创新
2014年6月2日星期一8时2分30秒
刘强
单击此处编辑母版标题样式
一、实验目的
1、掌握循环程序(多重循环程序)的设计方法。 2、掌握软件延时程序的时间计算方法和设计方法; 3、学会如何利用KEIL来调试和观察时间。
;1TM ;2TM ;2TM
t=( 1+2*R5+2)*TM
单击此处编辑母版标题样式
2、双重循环延时子程序
DELAY: MOV R5, #10 DL2: MOV R6, #100 DL1: DJNZ R6, DL1 DJNZ R5, DL2 RET ;1TM ;1TM ;2TM ;2TM ;2TM
注意:C语言文件(*.c)、汇编语言(*.asm)
4、配置工程属性
设定将默认的晶振33.0改为11.0592,将Creat hex file选项打勾。
5、编译,改错(Build / Rebuild All)
生成目标代码(*.Hex、*.Bin)
6、调试(软件Debug、硬件Debug、 Proteus 仿真)
t=[1+(1+2*R6+2)*R5+2]*TM
void Delay (void) { unsigned char i, j; for (i=10; i>0; i--) for (j=100; j>0; j--) ; }
晶振为12MHz,130mS以内延时采用! 明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强
刘强
单击此处编辑母版标题样式
已知STC89C51单片机使用的晶振频率为6MHz,请阅读下 面这段程序,分别计算如下程序段总机器周期 和总执行时间t。 ORG 0000H
DELAY: MOV DL3: MOV DL2: MOV DL1: DJNZ DJNZ DJNZ RET SJMP END
R5, #100 R6, #200 R7, #248 R7, DL1 R6, DL2 R5, DL3 $
分析以下C语言实现的延时程序
void Delay(void) { unsigned char i, j, k; for (i=20; i>0; i--) for (j=20; j>0; j--) for (k=200; k>0; k--); }
明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强
t={1+[1+(1+2*R7+2)*R6+2]*R5+2}*TM
void Delay(void) { unsigned char i, j, k; for (i=100; i>0; i--) for (j=200; j>0; j--) for (k=248; k>0; k--) ; }
晶振为12MHz,33S以内延时采用! 明德、博学、求实、创新 2014年6月2日星期一8时2分30秒
Over!
明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强
单击此处编辑母版标题样式
如果只是看代码,不实践操练的话,看过东西 一下就忘了。一步一步走过的“脚印”将牢记于 心。 那么赶紧动手实践吧!
明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强
单击此处编辑母版标题样式
好参数,请记下来,以后享用!
明德、博学、求实、创新
2014年6月2日星期一8时2分30秒
刘强
单击此处编辑母版标题样式
软件延时子程序 (循环结构)
单重循环延时子程序 双重循环延时子程序 三重循环延时子程序
明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强
单击此处编辑母版标题样式
1、单重循环延时子程序
∴t=9980303×2μs=19.960606S
明德、博学、求实、创新
2014年6月2日星期一8时2分30秒
刘强
Keil软件操作步骤 单击此处编辑母版标题样式
1、准备
注意:建立工程文件夹。
2、打开Keil新建工程
(1)为工程指定路径 (2)为工程命名 (3)为工程指定CPU
3、新建源代码文件并保存,添加到工程。
1ms=10-3s,1us=10-6s 1MHz=103 KHz=106Hz
1s= 103ms = 106us = 109ns = 1012ps
4、循环程序结构
明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强
单击此处编辑母版标题样式
三、实验内容(任选一)
1、利用汇编指令编程实现5ms的延时子程序; 2、利用汇编指令编程实现10ms的延时子程序; 3、利用汇编指令编程实现15ms的延时子程序; 4、利用汇编指令编程实现20ms的延时子程序; 5、利用汇编指令编程实现1s的延时子程序。
DELAY: MOV R5, #10 DL1: DJNZ R5, DL3 RET
void Delay(void) { unsigned char i; for (i=10; i>0; i--); }
晶振为12MHz,500uS以内延时采用! 明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强
通过反汇编 —转换为了汇编语言 单击此处编辑母版标题样式
Delay:
C:0x0003 C:0x0005 C:0x0007 C:0x0009 C:0x000B C:0x000D C:0x000F 7F14 7E14 7DE6 DDFE DEFA DFF6 22 MOV MOV MOV DJNZ DJNZ DJNZ RET R7,#0x14 R6,#0x14 R5,#0xC8 R5,C:0009 R6,C:0007 R7,C:0005
明德、博学、求实、创新
2014年6月2日星期一8时2分30秒
刘强
单击此处编辑母版标题样式
如果只是看代码,不实践操练的话,看过东西 一下就忘了。一步一步走过的“脚印”将牢记于 心。 那么赶紧动手实践吧!
明德、博学、求实、创新 2014年6月2日星期一8时2分30秒 刘强