《单片机原理及应用A》实验指导书 南华大学 - 图文

更新时间:2024-04-11 00:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《单片机原理及应用A》实验指导书

《单片机原理及应用A》

实验指导书

袁锋伟 张莹编

适用专业:机械设计制造及其自动化

班级: 姓名: 学号:

1

《单片机原理及应用A》实验指导书

机械工程学院测控技术与仪器系

2

《单片机原理及应用A》实验指导书

第一部分、单片机实验系统功能练习及软件实验

实验一单片机指令系统学习实验(一)

1.1——寻址方式及数据传送指令

一、实验目的

1.使学生了解如何寻址及程序应如何编写,掌握从源程序编写、编译到仿真的基本过程及操作方法(程序编写。编译、程序运行、观察运行结果)。

2.掌握源程序的书写格式、初步养成源程序良好的书写习惯。 3.进一步熟悉“WAVE仿真开发系统”仿真软件的使用。

二、实验设备

微机一台(WINDOWS系统、安装好WAVE仿真开发系统等相关软件)

三、实验内容

练习程序输入和程序运行,体会寻址方式和数据传送方法。

(一).立即寻址方式

(1)打开文件文本编辑器,输入以下源程序,保存文件为EX1_1.asm。

注意:此程序的书写格式,开头四行是源文件说明,为了简便起见,在以后的例程中省去了这几行。但为了养成规范的编程习惯,要求同学在编辑所有源程序都必须按此要求书写,并应关键的语句后面加上注释。

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

;文件名:EX1_1.asm,功能:立即寻址 ;作者XXX, 日期:XXX

;说明:此程序无硬件要求,采用软件仿真

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

ORG 0000H LJMP MAIN

ORG 0030H MAIN: MOV R0,#30H SJMP $ END

(2)用WAVE仿真开发系统对源文件进行编译,编译无误后生成目标文件EX1_1.hex。 (3)运行WAVE仿真开发系统,装载刚才编译好的目标文件,选择运行\\开始,全速运行程序。

(4)通过寄存器窗口观察: 程序运行后,(R0)=。

3

《单片机原理及应用A》实验指导书

选作内容:打开ROM窗口CODE,观察程序机器代码及在程序存储器的存放位置,并从伪指令的功能上理解它。

★通过这段程序应理解:把一个立即数送人内部寄存器采用的方法。 (二).寄存器寻址方式

(1).编辑以下内容简单源程序,保存文件为EX1_2.asm。

ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R0,#30H INC R0

SJMP $ END

(2)编译并在WAVE仿真开发系统中运行此程序。

(3)分别全速运行和单步运行程序,观察结果(方法同上),并注意运行过程各相关单元的内容的变化:

R0单元的内容应为()。

★通过这段程序应理解:要对工作寄存器、数据指针加一减一所采用的方法。

(三).直接寻址方式

(1)编辑以下内容源程序,保存文件为EX1_3.asm。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV 30H,#0F3H MOV R0,30H SJMP $ END

(2)编译并在WAVE仿真开发系统中运行程序。 (3)观察结果:

R0单元的内容应为( ),30H单元的内容为( )。

★通过这段程序应理解:要将一个内部寄存器的内容复制到另一个内部寄存器所采用的方法,并了解单步运行程序与全速运行程序的概念和区别。

(四).寄存器间接寻址方式

(1)编辑以下内容源程序,保存文件为EX1_4.asm。 ORG 0000H

4

《单片机原理及应用A》实验指导书

LJMP MAIN ORG 0030H MAIN: MOV 30H,#2AH MOV 31H,#33H

MOV R0,#30H MOV A,@R0 MOV R2,A

INC R0

MOV 03H,@R0 SJMP $ END

(2)编译并在WAVE仿真开发系统中运行程序。 (3)观察结果:

R0单元的内容应为(),30H单元的内容应为(),31H单元的内容应为(),A累加器的内容应为(),R2工作寄存器的内容应为(),03H的单元内容应为()。

★通过这个程序应理解:间接寻址的含义,即以工作寄存器的内容为地址,将该

地址的内容作操作数。

1.2——数据交换、堆栈、逻辑操作指令

一、实验目的

了解如何进行数据的字节和半字节交换,如何进行堆栈操作,如何进行逻辑操作。首先输入给定的程序,继续体验程序的编写规则,观察基本数据交换、堆栈、逻辑操作程序的编写方式和运行结果,为掌握这方面程序的编制作准备。然后,根据给定的要求编写简单的这方面的程序并上机验证。

二、实验设备

微机一台(WINDOWS系统、安装好WAVE仿真开发系统等相关软件)

三、实验内容

体会数据交换。堆栈的入栈出栈、逻辑运算的实质含义。 (一).字节和半字节交换指令

(1)编辑一下内容源程序,保存文件为EX2_1.asm.

ORG 0000H

LJMP MAIN ORG 0030H MAIN: MOV A,#53H

5

《单片机原理及应用A》实验指导书

MOV R0,#30H

MOV R2,#39H MOV 30H,#0AAH MOV 40H,#5BH XCH A,R2 XCH A,@R0 XCH A,40H SWAP A

MOV R1,A SJMP $ END

(2)编译并在WAVE仿真开发系统中运行程序。 (3)观察结果:

A的内容应为(),R0的内容为(),R2的内容为(),30H单元内容为(),40H单元内容为()。

★通过这段程序应理解:要将内部存储器的内容进行交换必须借助累加器A,寻址方式可以采用直接寻址和寄存器间接寻址。而半字节交换仅能通过累加器A进行。

(二).堆栈操作指令

(1)编辑一下内容源程序,保存文件为EX2_2_1.asm。

ORG 0000H

LJMP MAIN ORG 0030H MAIN: MOV SP,#60H MOV R0,#53H

MOV R1,#30H MOV 30H,#0AAH MOV A,R0 PUSH ACC PUSH 01H PUSH 30H

MOV A,#0FFH XCH A,30H

6

《单片机原理及应用A》实验指导书

MOVE R1,A POP 30H POP 01H POP ACC SJMP $ END

(2)编译并在WAVE仿真开发系统中运行程序。

★单步运行观察入栈时,SP内容的变化,需入栈的内容压在那些单元?

(3)观察结果

累加器A的内容应为(),R1的内容为(),30H单元内容为()。问答题:如果R1入栈使用PUSH R1,出栈使用POP R1可以吗?试一试,想想为什么?在例程中(EX2_2_1.asm)是用什么指令实现R1入栈保护的,说明理由?

(4)编辑一下内容源程序,保护文件为EX2_2_2.asm。 ORG 0000H

LJMP MAIN ORG 0030H

MAIN: MOV R0,#53H

MOV R1,#30H MOV 30H,#0AAH MOV A,R0 MOV A,#0FFH XCH A,30H MOVE R1,A SJMP $ END

(5)运行后,观察结果

★思考:与上面的程序段(EX2_2_1.asm)比较一下,结果有什么不同(A/RI/30H)?为什么?

7

《单片机原理及应用A》实验指导书

(三).对A简单逻辑操作指令

(1)编辑一下内容源程序,保存文件为EX2_3.asm。

ORG 0000H LJMP MAIN ORG 0030H

MAIN: MOV A,#53H CPL A MOVE R0,A RL A MOV R1,A RL A MOV R2,A CLR C RLC A MOV R3,A CLA A RLC A MOV R4,A CLA A SETB C RRC A

MOV R5,A SETB C RR A SJMP $ END

(2)编译并在WAVE仿真开发系统中运行程序。 (3)观察结果:

A累加器的内容应为(),R0的内容应为(),R1的内容为(),R2的内容为(),R3的内容为,R4的内容为()R5的内容为()。

★左移、右移可以实现乘2、除2操作。

8

《单片机原理及应用A》实验指导书

(四)逻辑与、或、异或操作指令

(1)编辑以下内容源程序,保存文件为EX2_4。asm。

ORG 0000H LJMP MAIN ORG 0030H

MAIN: MOV A,#53H MOV P1,#55H MOV R0,#30H

MOV R1,#40H MOV 30H,#3AH MOV 40H,#83H

ANL A,P1 MOV R2,A ORL A,#26H MOV R3,A RLC A ANL A,@R0 MOV R4,A ORL 40H,A MOV R5,40H

ANL A,R1 MOV R6,A XRL A,#58H SJMP $

END

(2)编译并在WAVE仿真开发系统中运行程序。

(3)观察每步程序执行结果,指出R1,R2,R3,R4,R5,R6的内容。

★逻辑与、或分别可以用来对某些位进行屏蔽(即置0)或是置1。

9

《单片机原理及应用A》实验指导书

实验二单片机指令系统学习实验(二)

2.1——算术运算指令

一、实验目的

本课程是让学生了解如何运用算术指令进行数据加、减、乘、除运算操作。

二、实验设备

微机一台(WINDOWS系统、安装好WAVE仿真开发系统等相关软件)

三、实验内容

观察算术运算程序的编写规则和运行结果

(一).多字节加法以及减法基本运算程序

将98H与DAH相加再与C8H相加计算其和,将2384H减FCH求其差。 (1) 编辑以下内容源程序,保存文件为EX3_1.asm。

ORG 0000H LJMP MAIN

ORG 0030H

MAIN: MOV A,#98H

MOV R1,#0DAH MOV 32H,#0C8H MOV R0,#30H MOV 30H,#84H MOV 31H,#23H CLR C ADD A,R1 MOV R1,A CLR A

ADDC A,#00H MOV R2,A CLR C MOV A,R1 ADD A,32H

MOV R1,A CLR A ADDC A,R2 MOV R2,A MOV A,@R0

10

《单片机原理及应用A》实验指导书

INC R0 CLR C SUBB A,#0FCH MOV R3,A MOV A,@R0 SUBB A,#00H MOV R4,A SJMP $ END

(2) 编译并在WAVE仿真开发系统中运行程序。

(3) 调试程序,观察每步程序执行结果,指出R1,R2,R3,R4,在程序中的作用,以及运行程序后的结果.

★加减是数据运算的基本内容,使用时应注意标位的变化。

(二).乘法和除法基本程序

(1)编辑一下内容源程序,保存文件为EX3_2.asm。

ORG 0000H LJMP MAIN

ORG 030H

MAIN: MOV 30H,#34H

MOV 31H,#2AH MOV 32H,0FAH MOV 33H,#48H MOV R0,#30H MOV A,@R0 INC R0 MOV B,@R0 MUL AB MOV R1,A MOV R2,B INC R0

11

《单片机原理及应用A》实验指导书

MOV A,@R0 INC R0 MOV B,@R0 DIV AB MOV R3,A MOV R4,B SJMP $ END

(2)编译并在WAVE仿真开发系统中运行程序。

(3)指出程序完成的功能。

(4)观察并指出R1,R2,R3,R4在程序中的作用,以及运行程序后的结果。

(三).二—十进制调整基本程序

将2位压缩BCD码84H与2位BCD码28H相加得到新的压缩BCD码。 第一个BCD码放在内部存储器单元30H内,第二个BCD码放在内部存储器单元40H内,相加结果放在50H开始的连续的内部存储器单元内。 (1)编辑以下内容源程序,保存文件为EX3_3.asm。

ORG 0000H LJMP MAIN ORG 0030H

MAIN: MOV 30H,#84H

MOV 40H,#28H MOV R0,#30H MOV R1,#40H MOV A,@R0 MOV A,@R1 DA A MOV 50H,A MOV A,#00H

12

《单片机原理及应用A》实验指导书

ADDC A,#00H MOV 51H,A SJMP $ END

(2)编译并在WAVE仿真开发系统中运行程序。

(3)观察并指出50H、51H单元在程序中的作用,以及运行程序后的结果。

问答题:如果去掉源程序中DA A指令,运行程序后的结果有什么变化?

★二一十进制调整程序主要用在BCD码表示的十进制数加减运算处理方面。

2.2-控制转移和子程序调用指令

—、实验目的

了解如何利用控制转移指令和子程序调用指令进行程序转移。掌握利用控制转移指令、子程序调用指令编制程序的方法。

二、实验设备

微机一台(WINDOWS系统、安装好WAVE仿真开发系统等相关软件)

三、实验内容

观察控制转移和子程序调用程序的编写规则和运行过程。

(1).判断转移控制和子程序调用

以下程序功能是:

★控制“1”在累加器A中以一定时间间隔移动(低位向高位),移动十次停止。 (1)在WAVE仿真开发系统中输入以下程序,保存文件名为EX4_1.asm。 ORG 0000H LJMP MAIN ORG 0030H

MAIN:MOV SP,#60H

MOV R2,#10

MOV A,#01H

LOOP:LCALL YANSH

13

《单片机原理及应用A》实验指导书

RL A

DEC R2

CJNE R2,#00H,LOOP SJMP $

YANSH: PUSH 02H ;R2内容入栈,为什么? MOV R2,#2H YANSHI:MOV R3,#10H DJNZ R3,$ DJNZ R2,YANSHI

POP 02H ;R2内容出栈,为什么? RET END

(2)打开WAVE仿真开发系统,编译并保存文件。

(3)打开各观察窗口,运行程序。

★体会了程序调用的过程,断点地址的自动保护—数据的入栈和出栈(堆栈指针

设为60H,而第一个数压在61H—PC低8位数)。

问答题:1、计算延时子程序中延时的时间(设品振为12MHz)。 2、在延时子程序中,为什么要把R2的内存入栈保护?

2.3查表程序—设计变址寻址方式

(1)编辑以下内容源程序,保存文件名为EX1_5.asm。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A,#03H

14

《单片机原理及应用A》实验指导书

MOV DPTR,#TAB MOVC A,@A+DPTR MOV R1,A SJMP$

TAB: DB 30H,31H,32H,33H DB 42H,43H,44H,45H END

(2)编译并在WAVE仿真开发系统中运行程序。 (3)观察结果

A累加器的内容应为(),DPTR的内容应为(),R1的内容为()

★通过这个程序应理解:查表所采用的方法,DPTR中放的是表格首地址。

问答题:如果使用PC指针作为基址寄存器,怎么修改源程序?

15

《单片机原理及应用A》实验指导书

第二部分、单片机硬件资源实验

实验三、继电器控制

(一) 实验内容

利用单片机P1.0口线输出高低电平,控制继电器的吸合和断开,以实现对外部装置的控制。

(二)、实验目的

1.学习I/O端口的使用方法。 2.掌握继电器的基本方法和编程。 3.了解用弱电控制强电的方法

(三)、预备知识

现代自动化控制设备都存在一个电子与电气电路的互相联接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(电动机、电磁铁、电灯等),另一方面又要为电子电路和电气电路提供良好的电隔离,以保护电子电路和人身的安全,电子继电器便能完成这一桥梁作用。继电器电路中一般要在继电器的线圈两头加一个二极管以吸收继电器线圈断电时产生的反电势,防止干扰。

(四)实验电路及线路图

元器件清单 标号 CAPAPCITOR

元件名称 电容 16

型号或数值 33PF 数量 2 《单片机原理及应用A》实验指导书

CRYSTAL AT89C51 电容 晶振 单片机 22UF 1 2 1 2 1 1 2 1 1 LED-RED/LED-YELLOW 发光二级管 RELAY RESISTOR 74LS240 7407 (五)、实验步骤

小型继电器 二极管 电阻 集成芯片 集成芯片 1、按照电路原理图接线。把P1.0接JIN端,继电器的JZ通过接地GND。JK接L2,JB接L1。

2、编制程序,使P1.0电平变化(间隔1秒):P1.0输出低电平,继电器吸合,常开触点JK接上——L2点亮,L1熄灭;P1.0输出高电平时,继电器不工作,常闭触点JB闭合——L2熄灭,L1点亮。

3、编程要求:假设系统外接晶振fosc=11.0592MHz,采用定时、计数器T0,工作方式2,以查询、中断两种方式编程实现定时1秒。

(六)、预习要求

1、熟练掌握使用MCS-51单片机的指令系统;

2、熟练掌握WAVE仿真开发系统软件的使用及源程序调试的方法;并了解使用Proteus软件仿真单片机应用系统的工作;

3、掌握单片机中断系统与定时/计数器的工作原理、应用与编程;

4、掌握单片机的外围接口驱动电路(继电器控制电路)的设计与编程;

5、根据实验任务要求,具备查找相关资料、例程的能力,并学会修改、应用。

(七)、实验报告

1、在Proteus中画出电路原理图。

2、分析任务要求,确定算法,计算T0的计数初值,画实验程序框图。 3、编写实验源程序并上机软件调试。 4、硬件调试,观察实验并记录运行结果。

17

《单片机原理及应用A》实验指导书

实验四、外中断控制实验

(P3.3口线输入,P1口输出)

一、 实验目的

进一步掌握单片机开发的基本过程。

掌握单片机键盘接口技术,外部中断的编程应用。

进一步掌握单片机基本I/O口的输入、输出基本编程方法。

二、 实验设备

微机一台(WINDOWS系统、安装好WAVE仿真开发系统等相关软件),单片机实验箱一台。

三、 实验内容

按下列要求编写程序并上机调试,观察实际运行结果

P3.3口做输入线,外接输入开关K1,开关K1每拨动1次,P1口做输出口,编写程序,使P1口接的8个发光二极管L1-L8按十六进制加一方式点亮发光二极管。

1、 电路原理图:

1.元器件清单 标号 CAPAPCITOR CRYSTAL AT89C51 元件名称 电容 电容 晶振 单片机 18

型号或数值 33PF 22UP 6MHz、12MHz 数量 2 1 2 1 《单片机原理及应用A》实验指导书

74LS240 RESPACK-8 Button LED-RED/LED-YELLOW 集成芯片 排阻(9脚) 开关 发光二极管 680 红黄各4 2 1 1 8 四、 实验要求

1. 熟练掌握使用MCS-51单片机的指令系统;

2. 熟练掌握WAVE仿真开发系统的使用及源程序调试的方法,掌握使用

Proteus软件仿真的方法;

3. 预习单片机的外围接口电路(键盘与LED显示电路)的设计原理与编程方

法;

4. 根据实验任务要求,具备查找相关资料、例程的能力,并学会修改、应用。

五、 实验报告

1)、在Proteus中画出电路原理图。

2)、分析任务要求,确定算法,画实验程序图。 3)、编写实验源程序并上机软件调试。 4)、硬件调试,观察实验现象并记录运行结果。

19

《单片机原理及应用A》实验指导书

实验五、A/D转换实验

一、实验内容

利用实验系统上的ADC0809做A/D转换器,实验系统上的电位器提供模拟量输入,编制程序,将模拟量转换成数字,通过8位LED显示出来。

二、实验目的

(1)掌握A/D转换与单片机接口的方法; (2)了解A/D芯片0809转换性能及编程方法; (3)通过实验了解单片机如何进行数据采集。

三、实验接线图

实验步骤:把ADC0809的零通道INT0(ADDA/ADDB/ADDC接地)用插针接至电位器W1的VOUT孔,VIN接+5V,CS4接FF80H孔,/RD接P3.7,/WR接P3.6,JX0接JX6(D0~D7分别接P0.0~P0.7),P1.0~P1.7分别接L1~L8。运行程序,8位LED上显示相应的数字量——当前采集的电压转换的数字量,调节电位器W1,将随着电压变化而相应变化。

四、实验要求

1、掌握使用MCS-51单片机的指令系统;

2、熟练掌握WAVE仿真开发系统的使用及源程序调试的方法;掌握使用

20

《单片机原理及应用A》实验指导书

Proteus软件仿真的方法;

3、预习A/D转换与单片机接口电路设计原理与编程方法;

4、根据实验任务要求,具备查找相关资料,例程的能力,并学会修改,应用。

五、实验报告

1)、在Proteus中画出电路图。

2、元器件清单 标号 CAPAPCITOR CRYSTAL AT89C51 ADC0809/ADC0808 74LS373 74LS02/74LS28 RESPACK-8 POT 元件名称 电容 电容 晶振 单片机 集成芯片 集成芯片 集成芯片 排阻(9脚) 滑动电阻 型号或数值 33PF 22uF 6MHz、12MHz AD转换芯片 地址锁存器 与非门 680 红黄各4 数量 2 1 2 1 1 1 2 1 1 8 LED-RED/LED-YELLOW 发光二极管 2)、分析任务要求,确定算法,画实验程序框图。 3)、编写实验源程序并上机软件调试。 4)、硬件调试,观察实验现象并记录运行结果。

21

《单片机原理及应用A》实验指导书

[例一]预习实验:定时器查询方式、中断方式实现流水控制灯控制 一、实验目的

1、进一步掌握单片机开发的基本过程。

2、掌握单片机内部资源定时器及中断的使用(用中断方式实现定时)。 3、进一步掌握单片机基本I/O口的输入、输出基本编程方法。

二、实验设备

微机一台(WINDOWS系统、安装好WAVE仿真开发系统等相关软件),单片机实验箱一台。

三、实验内容

利用定时器控制发光二极管交替闪亮,每1秒钟交替闪亮一次。

1. 硬件电路

元器件清单 标号 CAPAPCITOR CRYSTAL AT89C51 LED-RED RESISTOR 2. 编写项目程序

(1) 定时器查询方式,控制流水项目

;*************************************** ;文件名:EX5_1.asm,

;功能:定时器查询方式,控制流水灯项目

;利用定时器控制发光二极管交替闪亮,每1秒钟交替闪亮一次。 ;fosc=11.0592MHz,1次定时0.05s,循环定时20次 ;*************************

22

元件名称 电容 电容 晶振 单片机 发光二极管 电阻 型号或数值 33PF 22uF 6MHz/12MHz 1 330 数量 2 1 2 1 1 2 《单片机原理及应用A》实验指导书

LED BIT P1.0 ORG 0000H

LJMP MAIN ORG 0030H

MAIN: MOV SP,#60H

MOV R7,#20 MOV TMOD,#01H MOV TL0,#00H MOV TH0,#4CH SETB TR0

WAIT: JBC TF0,LOOP

SJMP $

LOOP: MOV TL0,#00H

MOV THO,#4CH DJNZ R7,WAIT MOV R7,#20 CPL LED SJMP WAIT END

(2) 定时器中断方式,控制流水灯项目 ;********************************* ;文件名:EX5_2.asm,

;功能:定时器中断方式,控制流水灯项目

;利用定时器控制发光二极管交替闪亮,每1秒钟交替闪亮一次。 ;fosc=11.0592MHz,1次定时中断0.05s,循环中断20次 ;*********************************

LED BIT P1.0

ORG 0000H LJMP MAIN ORG 000BH LJMP R_SHOW ORG 0030H

MAIN: MOV SP,#60H

MOV R7,#20

23

《单片机原理及应用A》实验指导书

MOV TMOD,#01H MOV TL0,00H MOV TH0,#4CH SETB EA SETB ET0 SETB TR0 SJMP $

;********************************** ;定时器中断程序

;********************************* R_SHOW: MOV TL0,#00H

MOV TH0,#4CH DJNZ R7,LOOP MOV R7,#20 CPL LED

LOOP: RETI

END

3. 源程序的编译。 4. 软件仿真运行。

5. 在Proteus软件中画出电路原理图,然后完成软、硬件调试。 6. 单片机试验箱接线并观察实际运行结果。

问答题:1.在源程序中,定时器T0采用什么工作方式?为什么? 2.fosc=11.0592MHz,1次定时0.05s,计算T0的计数初值? 3.对比定时器查询方式,中断方式的源程序,有什么特点和区别?

24

《单片机原理及应用A》实验指导书

★【例二】预习实验:利用外部控制实现如下控制:当没有外部控制时,单灯按约5HZ

的频率自动循环移动,一旦有外部控制,发光二极管熄灭约1秒,退出外部控制后,单灯继续原来的循环。 实验说明:

1、 P1口是准双向口,它作为输出口时与一般的双向口使用方法相同,由准双向口结构可知:当P1口作为输入口时,必须先对它置“1”—高电平,使内部MOSFET截止,因内部上拉电阻是20KΩ—40KΩ,故不会对外部输入产生影响。若不先对它置高,且原来是低电平,则MOSFET管导通,读入的数据是不正确的。 2、 延时子程序的延时计算问题。 2.1按键开关抖动问题

按键开关在电路中的连接如图所示:

按键未按下时,A点的电平位+5V;按下时的电平位低电平;

由于按键是机械的弹性开关,在按下和断开时,触点在闭合和断开时,会引起A点电位的不稳定,一般有5~10ms的抖动,导致误信号,使CPU产生错误的处理。

这里采用软件去抖动:首次检测到按键按下后,先执行一段延时子程序,一般为10ms延时,再确认按键是否按下,达到去抖动的目的。

2.2、对于延时程序

DELAY:MOV R6,#00H ;1个机器周期 DELAY1:MOV R7,#80H ;1个机器周期 DJNZ R7,$ ;2个机器周期 DJNZ R6,DELAY1 ;2个机器周期

在6MHz晶振时,一个机器周期时间长度为12/6MHz=2us,

所以该段指令执行时间为:((128*2+1+2)*256+1)*2us=132.6ms

四、实验

1. 硬件电路/元器件清单见前P19. 2. 编写实验源程序

;*********************** ;文件名:EX6_1.asm,

25

《单片机原理及应用A》实验指导书

;功能:外部中断

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

ORG 000H

LJMP MAIN ORG 0013H

LJMP NOOP ;转到实际中断子程序处 ORG 0030H

MAIN: MOV SP,#60H

SETB IT1 SETB EA SETB EX1 MOV A,#0FEH

LOOP: MOV P1,A

LCALL DELAY RL A

SJMP LOOP

;************************************* ;一下为延时子程序

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

DELAY: MOV R7,#10

D1: MOV R6,#50 D2: MOV R5,#200 DJNZ R5,$

DJNZ R6,D2 DJNZ R7,D1 RET

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

;一下为中断子程序

;*********************************** NOOP:

PUSH P1 PUSH 05H PUSH 06H

26

《单片机原理及应用A》实验指导书

PUSH 07H MOV P1,#0FFH LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY POP 07H POP 06H POP 05H POP P1 RETI END

4.软件仿真运行

5.Proteus软件中画出电路原理图,然后完成软件、硬件调试。

6.单片机实验箱接线并观察实际运行结果。 问答题:

1、计算源程序中DELAY延时子程序的延时时间?

2、在中断子程序中,PUSH 05H PUSH 06H PUSH 07H POP 07H POP 06H POP 05H 这些指令是什么?

3、使用独立式按键扫描程序的应用,修改源程序,完成实验。

27

本文来源:https://www.bwwdw.com/article/4cyp.html

Top