西南科技大学单片机原理实实验四及代码(共7页)_第1页
西南科技大学单片机原理实实验四及代码(共7页)_第2页
西南科技大学单片机原理实实验四及代码(共7页)_第3页
西南科技大学单片机原理实实验四及代码(共7页)_第4页
西南科技大学单片机原理实实验四及代码(共7页)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上2.1 实验四 中断实验一、 实验目的加深对MCS-51单片机中断系统基础知识的理解。二、 实验设备Keil C单片机程序开发软件。Proteus仿真软件DP51-PROC单片机综合实验仪。三、 实验内容和步骤内容:利用外部中断输入引脚(以中断方式)控制步进电机的转动。要求:每产生1次中断,步进电机只能步进1步。实验程序:使用INT0的中断服务程序控制步进电机正向步进;使用INT1中断服务程序控制步进电机反向步进。设计思路: 主程序在完成对INT0和INT1的设置后,可进入死循环(等待中断请求)。 为便于实验观察和操作,设INT0和INT1中断触发方式为边沿。 步进电

2、机的转动控制由外部中断的服务程序来实现。 当前步进电机的相位通电状态信息可以使用片内RAM中的一个字节单元来存储。设计参考: 主程序需要设置的中断控制位如下:IT0和IT1外部中断触发方式控制0=电平1=边沿(下降沿)EX0和EX1外部中断允许控制0=屏蔽1=允许PX0和PX1中断优先级级别控制0=低级1=高级在同级别(PX0=PX1)时INT0的优先级高于INT1EA中断允许总控制0=屏蔽1=允许 外部中断服务程序的入口地址:0003H外部中断00013H外部中断1预习:1) 编写好实验程序。2) 根据编写的程序和实验步骤的要求制定调试仿真的操作方案。实验单元电路:1) 步进电机驱动电路。B

3、ABBBCBDIN 1OUT 1IN 3OUT 3IN 5OUT 5IN 7OUT 7COMMONULN2003ASTEPV+V+图2.4 步进电机驱动电路原理图ABCD步进电机共有4相,当以ABCDAB的顺序依次通电时,电机就会正转,若按相反的顺序依次通电,电机就会反转。每顺序切换一相(1步),电机旋转18°,切换的频率决定电机的转速(切换的频率不能超过电机的最大响应频率)。根据图2.4中的电路,当BA(插孔)输入为高时,对应的A相通电。2) SW电路图2.5 单脉冲电路原理图+5VRRSW1SW1+5VRRSW3SW3开关SWX拨在下方时,输出端SWX输出低电平,开关SWX拨在上

4、方时,输出端SWX输出高电平。其中SW1和SW3具备消除抖动电路,这样,SW1或SW3每上下拨动一次,输出端产生单一的正脉冲(上升沿在前,下降沿在后)。LED1LED8+5V´8图2.6 LED和KEY电路+5V´8KEY8KEY13) LED和KEY电路步骤:1) 在S: STUDY Keil文件夹中新建Ex04文件夹(该文件夹用于保存本次实验的所有内容),通过网上邻居将服务器上本次实验共享文件夹下的所有文件拷贝到S: STUDY Keil Ex04文件夹中。2) 在Keil C中创建一个新工程,新工程保存为S: STUDY Keil Ex04Ex04.uv2,然后选择单

5、片机型号为Generic中的8051。3) 设置工程选项,将工程选项设置如下:Target页夹:Xtal= 12 MHzOutput页夹:Create HEX FileDebug页夹:根据步骤的需要正确设定(参见实验1中步骤5、6、7)BL51 Locate页夹:取消Use Memory Layout from Target Dialog设置Code Range属性为0x40-0xFFF如用C51编程,才需设置此页夹。4) 创建新文件并输入编写的实验程序,然后保存在与工程相同的文件夹中(文件名为Ex04 . ASM或Ex04 . C),最后将其加入到工程中并通过编译。5) 按预习制定的调试方案

6、利用Keil自身的软件仿真功能调试程序,确认实验程序能够运行(操作方法参见实验1中步骤5,此步骤建议在预习时完成)。6) 利用Proteus调试程序,确认实验程序能够实现功能(操作方法参见实验1中步骤6,此步骤建议在预习时完成)。7) 利用实验仪运行程序,观察真实环境的工作现象。 检查实验仪与计算机之间的通信线连接,然后打开实验仪电源。 测试实验仪中涉及本次实验的电路是否完好。I 利用C2区的逻辑笔测试D1区的SW1和SW3信号完好。操作方法:分别将SW1或SW3连接到C2区的TEST,上下拨动开关,通过观察逻辑笔的指示灯是否正常变化来判别被测信号的完好。(发现有问题,应马上关闭实验仪电源,然

7、后告知老师解决)图2.7 中断实验连接线路1C8区A2区P10BAP11BBP12BCP13BDII 利用测试程序检测单片机的外部中断和步进电机及其驱动实验电路完好。操作方法:i. 关闭实验仪电源,按图2.7连接电路后重新打开实验仪电源。ii. 双击S: STUDY Keil Ex04 Test4 Test4_0.Uv2文件。iii. 在新窗口中进入调试,然后连续运行程序。iv. 在实验仪上观察连接到P1端口的8个LED是否循环向左或向右依次熄灭,同时观察步进电机的转动情况。如果发现某个LED常亮或常灭,则意味着P1端口的对应位损坏;如果发现LED不能向右依次熄灭,说明INT1损坏,反之,IN

8、T0损坏,此时应向教师示意。v. 测试完成后退出调试,然后关闭这个用于测试的Keil窗口。vi. 连接线路保留(在后面将会使用)。注意: I 在本次实验中如果发现P1.0 3有损坏,可用P1其它完好的位替代完成实验(实验程序及其他相关操作都应做出调整)。II 检测中如果步进电机不转动,说明电机或其驱动电路损坏,实验时仍然可通过观察与P1端口连接的LED的工作情况来推断步进电机的转动情况。图2.8 中断实验连接线路2D1区SW3INT1SW1INT0A2区 关闭实验仪电源,按图2.8连接电路(图2.7的电路连线仍然保留)后重新打开实验仪电源。 运行实验程序,观察真实的步进电机转动与开关拨动的关系

9、(操作方法参见实验1中步骤7)。8) 选作 观察在真实环境中,由普通按钮开关直接产生中断现象的不同。操作方法: 关闭实验仪电源,将图2.8中的SW1和SW2分别替换成KEY1和KEY3重新连线,再次打开实验仪电源,用逻辑笔测试KEY1、KEY3信号的完好。 运行实验程序,分别按动KEY1和KEY3,观察此时步进电机的转动现象(特别是LED的工作情况变化与单脉冲中断时的不同)。四、 实验报告要求1、 工整书写实验程序并画出其流程图。2、 叙述步骤6、7中观察到的现象,分析原因。3、 选作叙述步骤8中观察到的现象,分析原因。五、 参考实验程序架构(汇编):;资源定义 *;位变量 *;字节变量 *P

10、HASE_OUTEQU30H;步进电机相位通电状态VAR_ENDEQU30H;最后一个字节变量的位置,;应根据实际需要修改;堆栈定义 *STACK_INIEQUVAR_END+1;须保证足够的空间;程序 *ORG0000H;复位入口LJMPRESETORG0003H;外部中断0 服务程序入口LJMPINT_EX0ORG000BH;定时器/计数器0 溢出中断服务程序入口 RETIORG0013H;外部中断1 服务程序入口LJMPINT_EX1ORG001BH;定时器/计数器1 溢出中断服务程序入口 RETIORG0023H;串行口中断服务程序入口RETIORG040H;复位处理程序RESET:M

11、OVSP,#STACK_INI;设置栈底指针;初始化外部设备 *;中断设置 *;此处添加设置中断触发方式的指令(IT0, IT1);此处添加设置中断许可的指令(EX0, EX1);此处添加设置中断优先的指令(PX0, PX1);初始化变量 *;如果定义了变量, 此处添加对变量的初始化指令;开中断 *SETBEA;主程序 *MAIN:SJMPMAIN;INT0中断服务程序 *INT_EX0:;此处添加保护现场内容的指令(如果需要);此处添加正向步进驱动的指令(ABCDAB);此处添加恢复现场内容的指令(如果需要)RETI;INT1中断服务程序 *INT_EX1:;此处添加保护现场内容的指令(如果

12、需要);此处添加反向步进驱动的指令(ADCBAD);此处添加恢复现场内容的指令(如果需要)RETI;程序结束 *END代码:/* 文件名:Demo_Ex04.C(C51程序框架) 功 能:在DP_51PRO实验仪上利用外部中断控制步进电机转动:每中断一次电机步进1步。*/#include <reg51.h>/全局变量定义unsigned charbPhaseOut;/ 步进电机相位通电状态/* 函数名称:main()* 入口参数:无* 出口参数:无*/void main(void)TCON = 0x00;IT1 = 1;IT0 = 1; /下降沿触发中断IE = 0x00;EX0

13、= 1;EX1 = 1;/允许外部中断IP = 0x00; /中断优先级(设置低级):INT0高于INT1 bPhaseOut = 1 << 3;EA = 1; /总中断while( 1 );/ 等待typedef unsigned int uint;typedef unsigned char uchar;void delay1ms(uint p)/12mhz uchar j;uint i; for(i=0;i<p;i+)for(j=0;j<124;j+);void INT_INT0(void)interrupt 0 using 1P1 = bPhaseOut;bPhaseOut >>= 1;if(!bPhaseOut)bPhaseOut = 0x80;/P3 &= (1<<2);/delay1ms(10);/P3 |= 1<<2;/delay1ms(10);/P3 &= (1<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论