大连理工大学计算机原理实验步进电机Word文档下载推荐.docx
《大连理工大学计算机原理实验步进电机Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《大连理工大学计算机原理实验步进电机Word文档下载推荐.docx(13页珍藏版)》请在冰点文库上搜索。
5.在中断服务程序中实现对步进电机的转速、转向实时控制。
实现方法如下:
在ISR中,对ADC0809的输出进行一次输入操作,并根据输入的数据:
判断ADC0809输出的值,根据相应的值来判断步进电机的方向和转速;
2设计分析及系统方案设计
1.首先参照实验教材的相关内容,将步进电机运转起来。
在原有的参考程序中使用的是“输出立即数”方式来输出步进电机的相序,建议进行修改,以方便电机的转向控制。
使用“寄存器间接寻址”的方式输出相序信号:
将步进电机的相序数据定义在数据段当中,使用SI或DI查表(间接寻址)获取相序数据。
其中查表顺序决定着电机转动方向。
2.对8253进行编程,使OUT1输出秒脉冲方波信号,为了便于调试,建议使用逻辑笔监测OUT1的输出状态是否正常;
3.编制与中断相关的程序。
包括中断屏蔽字的设定、中断向量表的创建以及开中断的操作,以上这些都应当加到程序的初始化中;
4.编写中断服务程序ISR。
在ISR中读取ADC0809转换后的数据,然后进行数据分析、根据数据来调整CX寄存器中的数据,因而改变步进电机的转速。
3系统电路图
8253
OUT1
CLK1
GATE1
/CS
OUT0
CLK0
GATE0
1MHZ脉冲
Vcc
210H
图1.1实验参考逻辑电路
MIR5
8255A
PA3
PA2
PA1
PA0
D7
·
D0
A1
A0
/CS
LED3
LED2
LED1
LED0
200H
步进
电机
5~12V
BJ_IN4
BJ_IN3
BJ_IN2
BJ_IN1
系统总线
0.5HZ方波
4外围接口模块硬件电路功能描述
8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。
单个的8259A能管理8级向量优先级中断。
8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片
5主程序中主要变量说明
变量名称
内存单元
功能
SPEED2
DS:
0001
存储不同状态下对应的CX值
SPEED
0000
延时程序中dh的值
flag
0003
控制步进电机转动的方向和速度值
6系统软件中各个子程序的功能描述
子程序名称
入口参数
出口参数
功能描述
delay
cx要改变的值存放在SPEED2中
延时子程序,用来延时,改变步进电机的转速。
int_proc
将转速和转向存放在flag中
中断控制程序,通过中断改变延时程序中CX
7主程序程序流程图
从AD0809读入转换后的数字量
中断结束命令
AL=1000000?
N
建立方向标志
A
Y
根据不用的AL
设定CX值
ISR
D8255A的初始化
PA、PB输出
AD0809初始化
8253初始化
CNT0方式3、初值
CNT1方式2、初值
主片8259初始化
设置屏蔽字
创建35H的中断向量表
开中断
开始
(a)主程序流程图
IRET
B
方向标志?
顺时驱动
(等待中断)
逆时驱动
(b)中断服务程序流程图
图1.2程序的参考流程图
8程序清单
.modelsmall
.386
IO_8255EQU200H
IO_8253EQU210H
AD_IOEQU220H
DATASEGMENT
SPEEDDB6
SPEED2DB70H
FLAGDB00H
ZZDB01H,03H,02H,06H,04H,0CH,08H,09H
FZDB09H,08H,0CH,04H,06H,02H,03H,01H
STOPDB00H,00H,00H,00H,00H,00H,00H,00H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
;
-------设置8253CNT0,CNT1----------
MOVDX,IO_8253
ADDDX,3
MOVAL,00110111B
OUTDX,AL
MOVAL,0
MOVAL,01010110B
INCDX
MOVAL,20
-------设置8255----------
MOVDX,IO_8255
ADDDX,03
MOVAL,82H;
A口作为输出B口作为输入
-------设置386EX主8259中断屏蔽字----------
INAL,21H
ANDAL,11011111B
OUT21H,AL
-------设置中断向量表----------
PUSHDS
MOVAX,0
LEAAX,CS:
INT_PROC;
AX指向中断程序入口地址
MOVSI,35H;
类型码=35H
ADDSI,SI
ADDSI,SI;
35*4
MOVDS:
[SI],AX;
中断向量表的IP值
PUSHCS
POPAX
[SI+2],AX;
中断向量表的CS值
POPDS
STI
步进电机转向
L1:
MOVAL,FLAG
MOVAH,AL
ANDAH,80H
CMPAH,00H
JEL2
LEADI,ZZ
JMPL3
L2:
LEADI,FZ
速度
L3:
ANDAL,7FH
CMPAL,00H
JNEL4
LEADI,STOP
L4:
MOVSPEED2,AL
MOVCX,08H
LP:
MOVAL,[DI]
CALLDELAY
INCDI
LOOPLP
JMPL1
-------中断服务子程序----------
INT_PROCPROCfar
PUSHAX
PUSHCX
MOVDX,AD_IO
OUTDX,AL;
启动ADC
MOVDX,AD_IO;
获取ADCEOC状态地址
ADDDX,2
L5:
INAL,DX
TESTAL,01H;
测试EOC=1?
JZL5
读数据地址
MOVBL,AL
ANDBL,80H
CMPBL,00H
JNZL6
JMPL7
L6:
NEGAL
L7:
LEASI,FLAG
MOV[SI],AL
MOVAL,20H;
发送中断结束指令
OUT20H,AL
POPCX
STI;
允许中断发生
IRET
INT_PROCENDP
DELAYPROC
PUSHDX
MOVDH,SPEED
XORCX,CX
X1:
MOVCL,SPEED2
ADDCX,CX
ADDCX,CX;
增大相序步长
ADDCX,00F5H
X2:
LOOPX2
DECDH
JNZX1
POPDX
RET
DELAYENDP
CODEENDS
ENDSTART
9系统调试运行结果说明、分析所出现得问题,设计体会与建议
硬件环境:
386EX实验箱
软件环境:
HQFC
设计语言:
汇编语言
本次实验将设计后的程序下载到386EX实验箱上,运行程序,旋转滑动变阻器,可以看到在滑到中间位置时,步进电动机会停止运行;
滑过中间位置时,步进电机的转向发生了改变。
滑动变阻器在两端时,步进电机转速最快,在中间时,转速最慢,总体的设计效果已经实现。
在实验过程中,我还遇到了许多问题,最终解决问题,成功实现了设计要求的功能。
在实验中遇到的问题如下:
1)对8253,8255,8259芯片的初始化,以及中断屏蔽字和中断向量表的设置不太熟悉,经过对以前实验的复习,该问题得到解决。
2)对于程序的跳转不熟悉,时常出现死循环的现象。
3)在中断子程序的编写中注意关闭中断。
在解决了上述问题之后成功的实现了设计要求的实验现象。
10结论及设计体会
本次实验总体来说是成功的。
实现了设计要求的所有实验现象。
在实验的开始阶段我感到一筹莫展,不知道该从哪下手。
老师指导我们从基础程序做起,先把基础程序编好在逐渐的往上增加功能。
编好基本程序后,我逐渐找到了感觉,结合前几次做的实验,我成功的加入了8253芯片实现了脉冲,加入8259芯片实现了中断功能,加入了电位器,实现了通过电位器改变转速和转向的功能,完成了设计目标。
这次试验让我对汇编和硬件的结合有了深入的了解,也让我明白每次成功都是一点一滴的积累,最后非常感谢陈老师的耐心教导。
参考文献
[1]秦晓梅陈育斌,计算机原理综合实验教程,大连理工大学,2011