koorio.com
海量文库 文档专家
当前位置:首页 >> 工学 >>

单片机原理实验指导书(4)

2.1 实验四
一、 实验目的

中断实验

加深对 MCS-51 单片机中断系统基础知识的理解。

二、 实验设备
Keil C 单片机程序开发软件。 Proteus 仿真软件 DP51-PROC 单片机综合实验仪。

三、 实验内容和步骤
内容: 内容:
利用外部中断输入引脚(以中断方式)控制步进电机的转动。要求:每产生 1 次中断, 步进电机只能步进 1 步。

实验程序: 实验程序:
使用 INT0 的中断服务程序控制步进电机正向步进;使用 INT1 中断服务程序控制步 进电机反向步进。 设计思路: ① ② ③ ④ 主程序在完成对 INT0 和 INT1 的设置后,可进入死循环(等待中断请求) 。 为便于实验观察和操作,设 INT0 和 INT1 中断触发方式为边沿。 步进电机的转动控制由外部中断的服务程序来实现。 当前步进电机的相位通电状态信息可以使用片内 RAM 中的一个字节单元来存储。

设计参考: ① 主程序需要设置的中断控制位如下: IT0 和 IT1 外部中断触发方式控制 0=电平 1=边沿(下降沿) EX0 和 EX1 外部中断允许控制 0=屏蔽 1=允许 PX0 和 PX1 中断优先级级别控制 0=低级 1=高级 在同级别(PX0=PX1)时 INT0 的优先级高于 INT1 EA 中断允许总控制 0=屏蔽 1=允许 ② 外部中断服务程序的入口地址: 0003H 外部中断 0 0013H 外部中断 1

预习: 预习:
1) 编写好实验程序。 2) 根据编写的程序和实验步骤的要求制定调试仿真的操作方案。

实验单元电路: 实验单元电路:

1) 步进电机驱动电路。 步进电机共有 4 相,当以 A→B→C→D→A→B…的顺序依次通电时,电机就会正转,若 → → → 按相反的顺序依次通电,电机就会反转。每顺序切换一相(1 步) ,电机旋转 18°,切换的 频率决定电机的转速(切换的频率不能超过电机的最大响应频率) 。根据图 2.4 中的电路, 当 BA BA(插孔)输入为高时,对应的 A 相通电。 ULN2003A BA BB BC BD IN 1 OUT 1 IN 3 OUT 3 IN 5 OUT 5 IN 7 OUT 7 COMMON B C V+ D STEP V+ A

图 2.4 步进电机驱动电路原理图

2) SW 电路 开关 SWX 拨在下方时,输出端 SWX 输出低电平,开关 SWX 拨在上方时,输出端 SWX 输出高电平。其中 SW1 和 SW3 具备消除抖动电路,这样,SW1 或 SW3 每上下拨动一次, 输出端产生单一的正脉冲(上升沿在前,下降沿在后) 。
SW1 R SW3 R

SW1 +5V R

SW3 +5V R

图 2.5 单脉冲电路原理图

3) LED 和 KEY 电路
+5V +5V

×8

KEY1

×8

KEY8

LED1

LED8

图 2.6 LED 和 KEY 电路

步骤: 步骤:
1) 在 S: \ STUDY \ Keil 文件夹中新建 Ex04 文件夹(该文件夹用于保存本次实验的所有 内容) ,通过网上邻居将服务器上本次实验共享文件夹下的所有文件拷贝到 S: \ STUDY \ Keil \ Ex04 文件夹中。 2) 在 Keil C 中创建一个新工程, 新工程保存为 S: \ STUDY \ Keil \ Ex04\Ex04.uv2, 然后 选择单片机型号为 Generic 中的 8051。 3) 设置工程选项,将工程选项设置如下:

Target 页夹: Output 页夹: Debug 页夹: BL51 Locate 页夹:

Xtal= 12 MHz Create HEX File 根据步骤的需要正确设定(参见实验 1 中步骤 5、6、7) 取消 Use Memory Layout from Target Dialog 设置 Code Range 属性为 0x40-0xFFF 如用 C51 编程,才需设置此页夹。

4) 创建新文件并输入编写的实验程序,然后保存在与工程相同的文件夹中(文件名为 Ex04 . ASM 或 Ex04 . C) ,最后将其加入到工程中并通过编译。 5) 按预习制定的调试方案利用 Keil 自身的软件仿真功能调试程序,确认实验程序能够 运行(操作方法参见实验 1 中步骤 5,此步骤建议在预习时完成) 。 6) 利用 Proteus 调试程序,确认实验程序能够实现功能(操作方法参见实验 1 中步骤 6, 此步骤建议在预习时完成) 。 7) 利用实验仪运行程序,观察真实环境的工作现象。 ① 检查实验仪与计算机之间的通信线连接,然后打开实验仪电源。 ② 测试实验仪中涉及本次实验的电路是否完好。 I. 利用 C2 区的逻辑笔测试 D1 区的 SW1 和 SW3 信号完好。 操作方法: 分别将 SW1 或 SW3 连接到 C2 区的 TEST,上下拨动开关,通过观察逻辑笔的 指示灯是否正常变化来判别被测信号的完好。 (发现有问题,应马上关闭实验仪电 源,然后告知老师解决) II. 利用测试程序检测单片机的外部中断和步进电机及其驱动实验电路完好。
P10 P11 BA BB BC BD

A2 区

P12 P13

C8 区

图 2.7 中断实验连接线路 1

操作方法: i. ii. iii. iv. 关闭实验仪电源,按图 2.7 连接电路后重新打开实验仪电源。 双击 S: \ STUDY \ Keil \ Ex04 \ Test4 \ Test4_0.Uv2 文件。 在新窗口中进入调试,然后连续运行程序。 在实验仪上观察连接到 P1 端口的 8 个 LED 是否循环向左或向右依次熄灭,同 时观察步进电机的转动情况。如果发现某个 LED 常亮或常灭,则意味着 P1 端 口的对应位损坏;如果发现 LED 不能向右依次熄灭,说明 INT1 损坏,反之, INT0 损坏,此时应向教师示意 此时应向教师示意。 此时应向教师示意 v. 测试完成后退出调试,然后关闭这个用于测试的 Keil 窗口。 vi. 连接线路保留(在后面将会使用) 。 注意: 注意:

I. 在本次实验中如果发现 P1.0 ~ 3 有损坏,可用 P1 其它完好的位替代完成实 . 有损坏, . 实验程序及其他相关操作都应做出调整) 验(实验程序及其他相关操作都应做出调整) 。 II. 检测中如果步进电机不转动, . 检测中如果步进电机不转动, 说明电机或其驱动电路损坏, 说明电机或其驱动电路损坏, 实验时仍然可通 的工作情况来推断步进电机的转动情况。 过观察与 P1 端口连接的 LED 的工作情况来推断步进电机的转动情况。 ③ 关闭实验仪电源,按图 2.8 连接电路(图 2.7 的电路连线仍然保留)后重新打开 实验仪电源。
SW1 INT0 INT1

D1 区

SW3

A2 区

图 2.8 中断实验连接线路 2

④ 运行实验程序,观察真实的步进电机转动与开关拨动的关系(操作方法参见实验 1 中步骤 7) 。 选作] 8) [选作 观察在真实环境中,由普通按钮开关直接产生中断现象的不同。 选作 操作方法: ① 关闭实验仪电源,将图 2.8 中的 SW1 和 SW2 分别替换成 KEY1 和 KEY3 重新连 线,再次打开实验仪电源,用逻辑笔测试 KEY1、KEY3 信号的完好。 ② 运行实验程序,分别按动 KEY1 和 KEY3,观察此时步进电机的转动现象(特别 是 LED 的工作情况变化与单脉冲中断时的不同) 。

四、 实验报告要求
1、 工整书写实验程序并画出其流程图。 2、 叙述步骤 6、7 中观察到的现象,分析原因。 3、 [选作 选作]叙述步骤 8 中观察到的现象,分析原因。 选作

五、 参考
实验程序架构(汇编) 实验程序架构(汇编) :
;资源定义 ************************************** ;位变量 ******************************** ;字节变量 ****************************** PHASE_OUT EQU 30H ;步进电机相位通电状态 ;最后一个字节变量的位置, ;应根据实际需要修改 ;堆栈定义 ****************************** STACK_INI EQU VAR_END+1 ;须保证足够的空间 ;程序 ****************************************** ORG 0000H ;复位入口 LJMP RESET ORG 0003H ;外部中断 0 服务程序入口 VAR_END EQU 30H

LJMP INT_EX0 ORG 000BH ;定时器/计数器 0 溢出中断服务程序入口 RETI ORG 0013H ;外部中断 1 服务程序入口 LJMP INT_EX1 ORG 001BH ;定时器/计数器 1 溢出中断服务程序入口 RETI ORG 0023H ;串行口中断服务程序入口 RETI ORG 040H ;复位处理程序 RESET: MOV SP,#STACK_INI ;设置栈底指针 ;初始化外部设备 ******************************** ;中断设置 ****************************** ;此处添加设置中断触发方式的指令(IT0, IT1) ;此处添加设置中断许可的指令(ET0, ET1) ;此处添加设置中断优先的指令(PT0, PT1) ;初始化变量 **************************** ;如果定义了变量, 此处添加对变量的初始化指令 ;开中断 ******************************** SETB EA ;主程序 **************************************** MAIN: SJMP MAIN ;INT0 中断服务程序 ************************** INT_EX0: ;此处添加保护现场内容的指令(如果需要) ;此处添加正向步进驱动的指令(A→B→C→D→A→B…) ;此处添加恢复现场内容的指令(如果需要) RETI ;INT1 中断服务程序 ************************** INT_EX1: ;此处添加保护现场内容的指令(如果需要) ;此处添加反向步进驱动的指令(A→D→C→B→A→D…) ;此处添加恢复现场内容的指令(如果需要) RETI ;程序结束 ************************************** END


网站首页 | 网站地图
All rights reserved Powered by 酷我资料网 koorio.com
copyright ©right 2014-2019。
文档资料库内容来自网络,如有侵犯请联系客服。3088529994@qq.com