- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编--输入输出程序设计
一、实验目的和内容
1. 掌握输入输出指令的使用;
2. 上网查3相步进电机的工作原理;
3. 用emu8086工具运行步进电机程序;
4. 对步进电机程序进行改进,精确控制其转速。
二、实验原理及基本技术路线图(方框原理图)
步进电机的工作原理:
三、所用仪器、材料(设备名称、型号、规格等)
1. 操作系统平台:Windows 7
2. 汇编环境:emu8086
四、实验方法、步骤
1. 打开emu8086汇编开发环境;
2. 打开emu8086例子程序中的步进电机的源程序:
D:\emu8086\examples\stepper_motor.asm
3. 运行该程序,观察运行情况,并结合步进电机的工作原理,阅读并理解程序的执行逻辑,读懂程序中的注释;
4. 尝试修改该程序,以精确控制步进电机的转速;
5. 运行修改后的程序,观察运行结果,并分析;
6. 记录实验过程,并完成实验报告。
五、实验过程原始记录(数据、图表、计算等)
1. 打开步进电机的控制程序:
2. 运行调试该程序,观察结果:
3. 阅读该程序,并添加注释(下面为了保存原版程序,打开程序的一个副本进行修改):
添加注释后的源代码如下:
; 这是一个输出控制的例子
; 它向虚拟的I/O端口输出值
; 以控制步进电机
; d:\emu8086\devices\stepper_motor.exe 在7号端口
#start=stepper_motor.exe#
name stepper
#make_bin#
steps_before_direction_change = 20h ; 十进制的32
jmp start
; ========= 数据 ===============
; 二进制的数据用以控制步进电机
; 顺时针以半步循环方式(半个步距角)转动:
datcw db 0000_0110b ;BC--C--AB--B--BC
db 0000_0100b
db 0000_0011b
db 0000_0010b
; 二进制的数据用以控制步进电机
; 逆时针以半步循环方式(半个步距角)转动:
datccw db 0000_0011b ;AB--A--BC--B--AB
db 0000_0001b
db 0000_0110b
db 0000_0010b
; 二进制的数据用以控制步进电机
; 顺时针以整步循环方式(一个步距角)转动:
datcw_fs db 0000_0001b ;A--AB--BC--0--A
db 0000_0011b
db 0000_0110b
db 0000_0000b
; 二进制的数据用以控制步进电机
; 逆时针以整步循环方式(一个步距角)转动:
datccw_fs db 0000_0100b ;C--BC--AB--0--C
db 0000_0110b
db 0000_0011b
db 0000_0000b
start:
mov bx, offset datcw ; 开始以顺时针半步循环方式执行
mov si, 0
mov cx, 0 ; 初始化计数器
next_step:
; 获取步进电机控制信号最高位, 若为1, 则表示就绪
wait: in al, 7
test al,
jz wait
mov al, [bx][si]
out 7, al
inc si
cmp si, 4
jb next_step
mov si, 0
inc cx
cmp cx, steps_before_direction_change
jb next_step
mov cx, 0
add bx, 4 ; 下一组控制数据
cmp bx, offset datccw_fs
jbe next_step
mov bx, offset datcw ; 返回顺时针半步循环方式执行
jmp next_step
修改说明:在原程序的OUT 7, AL一句后面加入如上图所示的代码,试图通过调用DOS系统中的INT 15H的86H号功能,即延时功能来控制步进电机每一步转动的时间,这里为了观察方便,设置每一秒转动一步(半步或整步)。
5. 运行调试修改后的程序,观察运行结果:
(1)当程序运行起来之后,在程序进入延时程序时,暂停:
(2)当然在运行调试之前首先要把emu8086的调试的延时设为零(如下图)。如下图所示,此时延时程序即将完成,可以看到:当前步进电机正在以半步
文档评论(0)