西南科技大学单片机原理实实验四及代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 (插孔)输入为高时,对应的A 相通电。
2) SW 电路
开关SW X 拨在下方时,输出端SWX 输出低电平,开关SW X 拨在上方时,输出端SWX 输出高电平。其中SW1和SW3具备消除抖动电路,这样,SW1或SW3每上下拨动一次,输出端产生单一的正脉冲(上升沿在前,下降沿在后)。
3) LED 和KEY 电路
步骤:
1) 在S : \ STUDY \ Keil 文件夹中新建Ex04文件夹(该文件夹用于保存本次实验的所
有容),通过网上邻居将服务器上本次实验共享文件夹下的所有文件拷贝到S : \ STUDY \ Keil \ Ex04文件夹中。 2) 在Keil C 中创建一个新工程,新工程保存为S : \ STUDY \ Keil \ Ex04\Ex04.uv2,
然后选择单片机型号为Generic 中的8051。 3) 设置工程选项,将工程选项设置如下:
图2.5 单脉冲电路原理图
+5V
+5V
图2.4 步进电机驱动电路原理图
LED1 LED8
+5V
图2.6 LED 和KEY 电路
+5V
Target页夹:Xtal= 12 MHz
Output页夹:Create HEX File
Debug页夹:根据步骤的需要正确设定(参见实验1中步骤5、6、7)
BL51 Locate页夹:取消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.利用测试程序检测单片机的外部中断和步进电机及其驱动实验电路完好。
图2.7 中断实验连接线路1
操作方法:
i.关闭实验仪电源,按图2.7连接电路后重新打开实验仪电源。
ii.双击S: \ STUDY \ Keil \ Ex04 \ Test4 \ Test4_0.Uv2文件。
iii.在新窗口中进入调试,然后连续运行程序。
iv.在实验仪上观察连接到P1端口的8个LED是否循环向左或向右依次熄灭,同时观察步进电机的转动情况。如果发现某个LED常亮或常灭,则意味着P1端
口的对应位损坏;如果发现LED不能向右依次熄灭,说明INT1损坏,反之,
INT0损坏,此时应向教师示意。
v.测试完成后退出调试,然后关闭这个用于测试的Keil窗口。
vi.连接线路保留(在后面将会使用)。
注意:
I.在本次实验中如果发现P1.0 ~ 3有损坏,可用P1其它完好的位替代完成实验(实验程序及其他相关操作都应做出调整)。
II.检测中如果步进电机不转动,说明电机或其驱动电路损坏,实验时仍然可通过观察与P1端口连接的LED的工作情况来推断步进电机的转动情况。
③关闭实验仪电源,按图2.8连接电路(图2.7的电路连线仍然保留)后重新打开
实验仪电源。
图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 ;步进电机相位通电状态
VAR_END EQU 30H ;最后一个字节变量的位置,
;应根据实际需要修改
;堆栈定义 ******************************
STACK_INI EQU VAR_END+1 ;须保证足够的空间
;程序 ******************************************
ORG 0000H ;复位入口
LJMP RESET
ORG 0003H ;外部中断0 服务程序入口