当前位置:文档之家› 西南科技大学单片机原理实实验四及代码

西南科技大学单片机原理实实验四及代码

0003H外部中断0
0013H外部中断1
预习:
1)编写好实验程序。
2)根据编写的程序和实验步骤的要求制定调试仿真的操作方案。
实验单元电路:
1)步进电机驱动电路。
步进电机共有4相,当以A→B→C→D→A→B…的顺序依次通电时,电机就会正转,若按相反的顺序依次通电,电机就会反转。每顺序切换一相(1步),电机旋转18°,切换的频率决定电机的转速(切换的频率不能超过电机的最大响应频率)。根据图2.4中的电路,当BA(插孔)输入为高时,对应的A相通电。
使用INT0的中断服务程序控制步进电机正向步进;使用INT1中断服务程序控制步进电机反向步进。
设计思路:
主程序在完成对INT0和INT1的设置后,可进入死循环(等待中断请求)。
为便于实验观察和操作,设INT0和INT1中断触发方式为边沿。
步进电机的转动控制由外部中断的服务程序来实现。
当前步进电机的相位通电状态信息可以使用片内RAM中的一个字节单元来存储。
2)在Keil C中创建一个新工程,新工程保存为S:\ STUDY \ Keil \ Ex04\Ex04.uv2,然后选择单片机型号为Generic中的8051。
3)设置工程选项,将工程选项设置如下:
Target页夹:Xtal= 12 MHz
Output页夹:Create HEX File
Debug页夹:根据步骤的需要正确设定(参见实验1中步骤5、6、7)
设计参考:
主程序需要设置的中断控制位如沿(下降沿)
EX0和EX1外部中断允许控制0=屏蔽1=允许
PX0和PX1中断优先级级别控制0=低级1=高级
在同级别(PX0=PX1)时INT0的优先级高于INT1
EA中断允许总控制0=屏蔽1=允许
外部中断服务程序的入口地址:
RETI
ORG0013H;外部中断1服务程序入口
LJMPINT_EX1
ORG001BH;定时器/计数器1溢出中断服务程序入口
RETI
ORG0023H;串行口中断服务程序入口
RETI
ORG040H;复位处理程序
RESET:MOVSP,#STACK_INI;设置栈底指针
;初始化外部设备********************************
;中断设置******************************
;此处添加设置中断触发方式的指令(IT0, IT1)
;此处添加设置中断许可的指令(EX0, EX1)
;此处添加设置中断优先的指令(PX0, PX1)
;初始化变量****************************
;如果定义了变量,此处添加对变量的初始化指令
RETI
;程序结束**************************************
END
代码:
/***********************************************************************
文件名:Demo_Ex04.C(C51程序框架)
功能:在DP_51PRO实验仪上利用外部中断控制步进电机转动:每中断一次电机步进1步。
}
void INT_INT1(void)interrupt 2 using 1
{
P1 = bPhaseOut;
bPhaseOut <<= 1;
if(!bPhaseOut)
bPhaseOut = 1;
//P3 &= ~(1 << 3);
delay1ms(10);
}
;位变量********************************
;字节变量******************************
PHASE_OUTEQU30H;步进电机相位通电状态
VAR_ENDEQU30H;最后一个字节变量的位置,
;应根据实际需要修改
;堆栈定义******************************
if(!bPhaseOut)
bPhaseOut = 0x80;
//P3 &= (1<<2);
//delay1ms(10);
//P3 |= 1<<2;
//delay1ms(10);
//P3 &= (1<<2);
//delay1ms(10);
//P3 |= 1<<2;
delay1ms(10);
//INT0 = 1;
运行实验程序,分别按动KEY1和KEY3,观察此时步进电机的转动现象(特别是LED的工作情况变化与单脉冲中断时的不同)。
四、实验报告要求
1、工整书写实验程序并画出其流程图。
2、叙述步骤6、7中观察到的现象,分析原因。
3、[选作]叙述步骤8中观察到的现象,分析原因。
五、参考
实验程序架构(汇编):
;资源定义**************************************
II. 利用测试程序检测单片机的外部中断和步进电机及其驱动实验电路完好。
操作方法:
i.关闭实验仪电源,按图2.7连接电路后重新打开实验仪电源。
ii.双击S:\ STUDY \ Keil \ Ex04 \ Test4 \ Test4_0.Uv2文件。
iii.在新窗口中进入调试,然后连续运行程序。
iv.在实验仪上观察连接到P1端口的8个LED是否循环向左或向右依次熄灭,同时观察步进电机的转动情况。如果发现某个LED常亮或常灭,则意味着P1端口的对应位损坏;如果发现LED不能向右依次熄灭,说明INT1损坏,反之,INT0损坏,此时应向教师示意。
2.1
一、实验目的
加深对MCS-51单片机中断系统基础知识的理解。
二、实验设备
Keil C单片机程序开发软件。
Proteus仿真软件
DP51-PROC单片机综合实验仪。
三、实验内容和步骤
内容:
利用外部中断输入引脚(以中断方式)控制步进电机的转动。要求:每产生1次中断,步进电机只能步进1步。
实验程序:
STACK_INIEQUVAR_END+1;须保证足够的空间
;程序******************************************
ORG0000H;复位入口
LJMPRESET
ORG0003H;外部中断0服务程序入口
LJMPINT_EX0
ORG000BH;定时器/计数器0溢出中断服务程序入口
III. 关闭实验仪电源,按图2.8连接电路(图2.7的电路连线仍然保留)后重新打开实验仪电源。
运行实验程序,观察真实的步进电机转动与开关拨动的关系(操作方法参见实验1中步骤7)。
8)[选作]观察在真实环境中,由普通按钮开关直接产生中断现象的不同。
操作方法:
关闭实验仪电源,将图2.8中的SW1和SW2分别替换成KEY1和KEY3重新连线,再次打开实验仪电源,用逻辑笔测试KEY1、KEY3信号的完好。
检查实验仪与计算机之间的通信线连接,然后打开实验仪电源。
测试实验仪中涉及本次实验的电路是否完好。
I.利用C2区的逻辑笔测试D1区的SW1和SW3信号完好。
操作方法:
分别将SW1或SW3连接到C2区的TEST,上下拨动开关,通过观察逻辑笔的指示灯是否正常变化来判别被测信号的完好。(发现有问题,应马上关闭实验仪电源,然后告知老师解决)
BL51 Locate页夹:取消Use Memory Layout from Target Dialog
设置Code Range属性为0x40-0xFFF
如用C51编程,才需设置此页夹。
4)创建新文件并输入编写的实验程序,然后保存在与工程相同的文件夹中(文件名为Ex04.ASM或Ex04. C),最后将其加入到工程中并通过编译。
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 1
{
P1 = bPhaseOut;
bPhaseOut >>= 1;
IE = 0x00;
EX0 = 1;
EX1 = 1;//允许外部中断
IP = 0x00; //中断优先级(设置低级):INT0高于INT1
bPhaseOut = 1 << 3;
EA = 1;//总中断
while( 1 );//等待
}
typedef unsigned int uint;
typedef unsigned char uchar;
;此处添加正向步进驱动的指令(A→B→C→D→A→B…)
;此处添加恢复现场内容的指令(如果需要)
RETI
;INT1中断服务程序**************************
INT_EX1:
;此处添加保护现场内容的指令(如果需要)
;此处添加反向步进驱动的指令(A→D→C→B→A→D…)
;此处添加恢复现场内容的指令(如果需要)
5)按预习制定的调试方案利用Keil自身的软件仿真功能调试程序,确认实验程序能够运行(操作方法参见实验1中步骤5,此步骤建议在预习时完成)。
6)利用Proteus调试程序,确认实验程序能够实现功能(操作方法参见实验1中步骤6,此步骤建议在预习时完成)。
7)利用实验仪运行程序,观察真实环境的工作现象。
**函数名称:main()
**入口参数:无
**出口参数:无
***********************************************************************/
相关主题