《计算机控制》课程设计步进电机角度控制设计

上传人:仙*** 文档编号:33676884 上传时间:2021-10-18 格式:DOC 页数:26 大小:454.50KB
收藏 版权申诉 举报 下载
《计算机控制》课程设计步进电机角度控制设计_第1页
第1页 / 共26页
《计算机控制》课程设计步进电机角度控制设计_第2页
第2页 / 共26页
《计算机控制》课程设计步进电机角度控制设计_第3页
第3页 / 共26页
资源描述:

《《计算机控制》课程设计步进电机角度控制设计》由会员分享,可在线阅读,更多相关《《计算机控制》课程设计步进电机角度控制设计(26页珍藏版)》请在装配图网上搜索。

1、武汉理工大学计算机控制课程设计说明书目录摘要11设计任务与要求22 硬件设计33 硬件系统基本原理43.1 8086功能简介43.2 步进电机结构及工作原理43.3 8255A可编程并行接口芯片73.4 74LS373功能说明83.5 ULN2003A简介93.6 LED显示器说明113.7 键盘控制子模块123.8 74LS48功能简介123.9 硬件原理总图144 系统软件设计155 收获及体会16参考文献17附录1 proteus仿真原理图18附录2 源程序19摘要步进电机在控制系统中具有很广泛的应用。它可以把脉冲信号转换成角位移,并且可用作电磁制动轮、电磁差分器或角位移发生器等。步进电

2、机是一种用电脉冲进行控制,将电脉冲信号转换成相应角位移的电机,其机械位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成正比,每一个脉冲信号可使步进电机旋转一个固定的角度,脉冲的数量,决定了旋转的总角度,脉冲的频率决定了电机运转的速度。此次设计通过8086对步电机进行控制,用ULN2003A为步进电动机驱动电路主芯片,以8255A作为8086并行输出接口,8086对步进电机的控制信号则通过8255A送到ULN2003A并通过8255A输出到LED灯显示步进电机转动角度。关键词:步进电机 8086 8255A ULN2003A 转动角度步进电机角度控制1 设计任务与要求1.1 设计目的 设计制作和

3、调试一个由8086组成步进电机角度测控系统。通过这个过程学习熟悉键盘控制和七段数码管的使用,掌握步进电机的角度控制和角度显示方法。1.2 设计要求和设计指标1在显示器上显示任意四位十进制数2将8个键定义键值为07,按任意键在显示器上显示对应键值3实现:(1) 定义键盘按键:5个为数字键15;3个功能键:设置SET、清零 CLR、开始START;(2) 显示器上第一位显示次数,后三位显示每次行走的角度;(3) 通过键盘的按键,设置步进电机各次的角度值;第一位设置次数,后三位设置角度值。(4) 按START键启动步进电机开始转动,按SET键停止;按CLR键清零。2 硬件设计本次设计要求通过键盘按键

4、实现对步进电机的转动次数和每次转动的角度的控制,并通过数码管显示出来。本方案中通过按键对步进电机的转动角度进行设定,给各个按键设置不同的键值。按下按键时,给8255A一个信号设定步进电机下一步的动作。8086通过8255A的数据总线读取该信号,并作出反应,通过给8255A一系列的指令驱动其工作,从而驱动步进电机和LED显示器。硬件总设计框图如图2-1所示。 图2-1 硬件设计框图 3 硬件系统基本原理3.1 8086功能简介 Intel 8086是一个由Intel于1978年所设计的16位微处理器芯片,是x86架构的鼻祖。不久,Intel 8088就推出了,拥有一个外部的8位数据总线,允许便宜

5、的芯片用途。它是以8080和8085(它与8080有组合语言上的原始码兼容性)的设计为基础,拥有类似的寄存器组,但是数据总线扩充为16位。总线界面单元(Bus Interface Unit)透过6字节预存(prefecth) 的队列(queue)喂指令给执行单元(Execution Unit),所以取指令和执行是同步的,8086 CPU有20条地址线,可直接寻址1MB的存储空间,每一个存储单元可以存放一个字节(8位)二进制信息。为了便于对存储器进行存取操作,每一个存储单元都有一个惟一的地址与之对应,其地址范围用十进制表示为01048575,用十六进制表示为00000HFFFFFH。Intel

6、8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器(包含了堆栈指标)。资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。它提供64K 8 位元的输出输入(或32K 16 位元),以及固定的向量中断。大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。运算结果会储存在操作数中的一个。 Intel 8086有四个 内存区段(segment) 寄存器,可以从索引寄存器来设定。区段寄存器可以让 CPU 利用特殊的方式存取1 MB内存。8086 把段地址左移 4 位然后把它加上偏移地址。大部分的人都认为这是一个很不好的设计,因为

7、这样的结果是会让各分段有重叠。尽管这样对组合语言而言大部分被接受(也甚至有用),可以完全地控制分段,使在编程中使用指针 (如C 编程语言) 变得困难。它导致指针的高效率表示变得困难,且有可能产生两个指向同一个地方的指针拥有不同的地址。更坏的是,这种方式产生要让内存扩充到大于 1 MB 的困难。而 8086 的寻址方式改变让内存扩充较有效率。在这个系统中,8086作为整个系统的主控芯片,用来控制协调整个系统的工作。3.2 步进电机结构及工作原理步进电机又叫脉冲电机,它是一种将电脉冲信号转换为角位移的机电式数模转换器。在开环数字程序控制系统中,输出控制部分常采用步进电机作为驱动元件。步进电机控制线

8、路接受计算机发来的指令脉冲,控制步进电机作为驱动元件。步进电机控制线路接收计算机发来的指令脉冲,控制步进电机做相应的转动。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。步进电机的驱动电路根据控制信号工作,控制信号由8086通过8255A产生。此次设计采用四相式步进电机。(1) 励磁线圈如图3-1所示。图3-1 步进电机励磁线圈(2) 步进电机工作原理说明步进电机由转子和定子组成

9、。转子由一个永久磁铁构成,定子分别由四组绕组 组成。步进电机组成和电气连接分别如图3-2和3-3所示。 图3-2 转子和定子示意图 图3-3 电气连接示意图当S1连通电源后,定子磁场将产生一个靠近转子为N极,远离转子为S极才磁场,这样的定子磁场和转子的固有磁场发生作用,转子就会转动,正确地S1、S4的送电次序,就能控制转子旋转的方向。例如:若送电的顺序为S1闭合断开S2闭合断开S3闭合断开S4闭合断开,周而复始的循环,在定子和转子共同作用下,电机就瞬时针旋转:若送电的顺序为S4闭合断开S3闭合断开S2闭合断开S1闭合断开,周而复始的循环,则电机就逆时针旋转,原理同理。(3) 步进电机与8255

10、A接口关系如图3-4所示。5+12AMT2步进电机驱动电路 PB0PB1PB2PB38255 4AB3BC2DCD1 图3-4 步进电机与8255A接口关系3.3 8255A可编程并行接口芯片Intel 8086/8088 系列的可编程外设接口电路(Programmable Peripheral Interface)简称 PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。 8255A在使用前要写入一

11、个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种; 方式0 :基本的输入输出方式,即无须联络就可以直接进行的 I/O方式。其中A、B、C口的高四位或低四位可分别设置成输入或输出。 方式1 :选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0. 方式2: 双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。

12、 8255A是一个并行输入、输出器件,具有24个可编程设置的I/O口,包括3组8位的I/O为PA口、PB口、PC口,又可分为2组12位的I/O口:A组包括A口及C口高4位,B组包括B口及C组的低4位。 8255A引脚功能:RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。 CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输. RD:读信号线,当这个输入引脚为低电平时,即RD=0且CS=0时,允许8255通过数据总线向CPU发送

13、数据或状态信息,即CPU从8255读取信息或数据。 WR:写入信号,当这个输入引脚为低电平时,即WR=0且CS=0时,允许CPU将数据或控制字写入8255。 D0D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。 PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。 PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。 PC0PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C

14、可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。A0,A1:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器.当A0=0,A1=0时,PA口被选择;当A0=0,A1=1时,PB口被选择;当A0=1,A1=0时,PC口被选择;当A0=1.A1=1时,控制寄存器被选择。8255A工作方式控制字如图3-5所示。图3-5 8255A工作方式控制字3.4 74LS373功能说明 74LS373为三态输出的八 D 透明锁存器,共有 54S373 和 74LS373 两种线路。74LS373

15、的输出端 O0O7 可直接与总线相连。当三态允许控制端 OE 为低电平时,O0O7 为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,O0O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为低电平时,O 被锁存在已建立的数据电平。当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。74LS373引脚图如图3-6所示。图3-6 74LS373引脚图引出端符号:D0D7 数据输入端OE 三态允许控制端(低电平有效)LE 锁存允许端O0O7 输出端74LS373真值表

16、如表3-1所示。表3-1 74LS373真值表DnLEOEOnHHLHLHLLXLLQ0XXH高阻态3.5 ULN2003A简介 ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003A管脚如图3-7所示。图3-7 ULN2003管脚图ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003

17、工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。 ULN2003内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE约1V左右,耐压BVCEO约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动

18、低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。由于ULN2003有这些特点,所以经常作为显示驱动、继电器驱动、照明灯驱动、电磁阀驱动、伺服电机、步进电机驱动等电路中。 ULN2003A内部结构如图3-8所示。 图3-8 ULN2003内部结构图 3.6 LED显示器说明数码管是数码显示器的俗称。常用的数码显示器有半导体数码管,荧光数码管,辉光数码管和液晶显示器等。译码和数码显示电路是将数字钟和计时状态直观清晰的反映出来,被人们的视觉器官所接受。

19、显示器件采用七段数码管。在译码显示电路输出的驱动下,显示出直观、清晰的数字符号。本设计所采用的是半导体数码管,是用发光二极管(简称LED)组成的字形来显示数字,七个条形发光二极管排列成七段组合字形,便构成了半导体数码管。半导体数码管有共阳极和共阴极两种类型,共阳极数码管的七个发光二极管的阳极连在一起,而七个阴极则是独立的。共阴极数码管与共阳极数码管相反,七个发光二极管的阴极连在一起,而阳极是独立的。 当共阳极数码管的某一阴极接低电平时,相应的二极管发光,可根据字形使某几段二极管发光,所以共阳极数码管需要输出低电平有效的译码器去驱动。共阴极数码管则需要输出高电平有效的译码器去驱动。七段显示数码管

20、的外部引线排列如图3-9,共阳极和共阴极数码管结构示意图分别如图3-10、3-11所示。 图3-9 数码管外引线排列图3-10 共阳极数码管结构示意图 图3-11 共阴极数码管结构示意图 在多位LED显示时,为了节省I/O口线,简化电路,降低成本,一般采用动态显示方式。动态显示方式是一位一位地分时轮流各位显示器,对每一位显示器来说,每隔一段时间轮流点亮一次。3.7 键盘接口 在微机化仪器仪表中,键盘是最常用的一种输入设备,用于输入数据和命令。键盘的每一个按键都被赋予一个代码,称为键码。键盘系统的主要工作包括及时发现有键闭合,求闭合键的键码。根据这一过程的不同,键盘可以分为两种,即全编码键盘和非

21、编码键盘。全编码键盘多是商品化的计算机输入设备,自动提供对应于被安检的ASCII码,且能同时产生一个控制信号通知微处理器。此外,这种键盘具有处理抖动和多键串键的保护电路,具有使用方便、价格较贵、体积较大、按键较多等特点。非编码键盘恰如一组开关,一般组成行和列矩阵。其全部工作过程,如按键的识别、键的代码获取、防止串键及消抖等问题,都靠程序完成。因此,它所需要的硬件少,价格便宜,一般作为单板机、智能仪表等简单的输入设备。键盘电路常用的有两种,一种是独立式键盘电路,另一种是矩阵式键盘。独立式键盘每个按键独占一根I/O线。因此键识别软件非常简单。对于只有几个按键的系统,常采用这种电路。对于多按键系统来

22、讲,这种电路忧郁将占用更多的I/O线而变得无法实用。矩阵式键盘电路将I/O口线的一部分作为行线,另一部分作为列线,按键设置在行线和列线的交叉点上,这就构成了行列式键盘。行列式键盘中按键的数量可达行线数n乘以列线数m。由此可以看到行列式键盘在按键较多时,可以节省I/O线。按键开关的两端分别接在行线和列线上。行线通过一个电阻接到+5V电源上,在没有键按下时,行线处于高电平状态。判断是否有键按下的方法是:向所有的列线I/O口输出低电平,然后将行线的电平状态读入累加器中,若无键按下,行线仍保持高电平状态,若有键按下,行线至少应有一条为低电平。当确定有键按下后,即可进行求键码的过程。其方法是:依次从一条

23、列线上输出低电平,然后检查各行线的状态,若全为高电平,说明闭合键不在该列;若不全为1,则说明闭合键在该列,且在变为低电平的行的交点上。在键盘处理程序中,每个键都被赋予了一个键号,由从列线I/O口输出的数据和从行线I/O口读入的数据可以求出闭合键的键号。3.8 74LS48功能简介 74LS48芯片是一种常用的七段数码管译码驱动器,常用在各种数字电路和单片机系统的显示系统中,输出高电平有效。引脚如图3-12所示,功能表如表3-2所示。74LS48图3-12 74LS48管脚图表3-2 74LS48功能表十进制数或功能输 入BI/RBO输 出说明LIRBIA3 A2 A1 A0a b c d e

24、f g012345678910111213141511111111111111111ddddddddddddddd000000001111111100001111000011110011001100100011010101010101010111111111111111011011010111000100111110011100100011011111110100001011011010100110101000101010001010001110110011100011111011111110译码显示消隐脉冲消隐灯测试d10d0dd0dd0dd0dd0d00100100100100100100

25、1001熄灭灭零测试3.9 硬件原理总图 根据设计要求及要实现的功能,综合各芯片的具体功能,完成了对系统总体原理电路的设计,如图3-13所示。图3-13 硬件设计原理图4 系统软件设计显示模块设计说明:为使显示程序具有通用性和灵活性,在8086内设置一个显示缓冲区,显示缓冲区的每个单元与LED的各位一一对应。当主程序需要显示,只需将要显示的字符送入显示缓冲区,然后调用显示子程序。显示子程序的任务则是逐一取出显示缓冲区中的字符、查字形表转换成相应字型码,然后通过字段口输出显示。显示模块是用四位七段数码管来显示转动次数和每次转动的角度。给八个按键设置不同的子程序,当按下按键时,根据事先设定好的各个

26、按键对应的转动角度的值输出到数码管进行显示。四相步进电机模块设计说明:在此设计中,采用的是四相步进电机。步进电机控制程序就是完成环形分配器的任务,从而控制电动机的转动,以达到控制转动角度和位移的目的。控制模型可以以立即数的形式一一给出。对于步进电机模块的程序设计采用循环程序设计方法。先把转动的次数和角度的控制模型存放在内存单元中,然后再逐一从单元中取出控制模块并输出。首先启动,按下按键选择步进电机的角度,然后读入转动的控制模型驱动步进电机转动。软件设计流程图如图4-1所示。判断键值开始延时驱动电机动作LED显示返回调用延时设定8255A工作方式,A、B口输出,C口输入扫描键盘否是否有键按下 是

27、判断键值图4-1 软件设计流程图5 收获及体会此次课程设计可以说是获益匪浅。通过这次课程设计,我了解了步进电动机的工作原理及接口电路原理,掌握了8255的各种工作方式及其应用。对汇编语言有了更深一层的了解,平时在书本学习的都是一条一条的指令,没有很清楚地理解指令的真正含义。在这次课程设计中我们在老师的指导下学习了很多课堂上没有学习到的知识,体会到只有平时多练习,多看程序才能自己编写程序,自己调试程序。通过此次的课程设计,我了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简单的程序,而且更重要的是明白写程序的态度:仔细谨慎,精益求精。同时我认识到汇编语言的精妙,也认识到了汇编

28、语言的重要性:汇编作为一种低级语言,与计算机硬件紧密相关,他能解决很多高级语言所不能解决的问题,所以,掌握汇编语言程序设计方法是非常必要的。在这次的课程设计过程中,借助现代的网络技术,有什么不懂得马上上Baidu,不让问题遗留到下一天,极大地加快的进度,在上Baidu的过程中也让我对汇编有了更深一层的认识,并且还让我初步领略到计算机控制的魅力,可谓一举多得。课程设计是我从书本到时间非常关键的一步,当代大学生动手创新能力是社会所急需的,所以我不要做象牙塔里的秀才,一定要努力吧此次的课程设计做好。正如课程设计的任务和地位中所说的那样,计算机科学在应用上得到飞速发展,因此,学习这方面的知识必须紧密联

29、系实际:掌握这方面的知识更要强调解决实际问题的能力。同学们要着重学会面对一个实际问题,如何去自己收集资料,如何自己去学习新的知识,如何自己去制定解决问题的方案并通过实践不断地去分析和解决前进道路上的一切问题,最终到达胜利的彼岸。在实际的操作过程中,能把理论中所学的知识灵活地运用起来,并在调试中会遇到各种各样的问题,程序的调试提高了我们解决问题的能力,学会了在设计中独立解决问题,也包括怎样去查找问题。通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。在此次课程设计的过程中,我深深地感受到了自己所学知识的有限,明白了只学课本

30、上的只是是不够的,要通过图书馆和互联网等各种渠道来扩充自己的知识。进一步培养了我们一丝不苟的科学态度和不厌其烦的耐心,团结就是力量。参考文献1 于海生.微型计算机控制技术.清华大学出版社,20072 彭虎,周佩玲,傅忠谦.微机原理与接口技术.电子工业出版社,20083 庚华光.电子技术基础.高等教育出版社,20064 伍时和.数字电子技术基础.清华大学出版社,2009 5 G.F.Franklin,J.D.Powell and M.Workman.Digital control of dynamic systems,3rd ed .Addison Wesley Longman,Inc.,199

31、86 王自强.步进电机应用技术.科学出版社,20107 程树康,刘宝延.步进电机及其驱动控制系统.哈尔滨工业大学出版社,2007 8 徐仁贵.微型计算机接口技术及应用.机械工业出版社,19969 Barry B.Brey. Intel微处理器全系列:结构、编程与接口.电子工业出版社,200110 Haisheng Yu,Qinggwei Wei,Dongqing Wang.Adaptive Speed Control for PMSM Drive Based on Neuron and Direct MRAC Method.The 6th World Congress on Intellige

32、nt Control and Automation,Dalian,200611 Brey,B.B.THE INTEL MICROPROCESSORS.机械工业出版社,2006附录1 proteus仿真原理图 附录2 源程序25DATAS SEGMENTdata db 0 DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS a_port equ 8000hb_port equ 8002hc_port equ 8004hcontrl_port equ 8006hSTART: MOV AX,DATAS MOV DS,AXmain:mov al,10001

33、001bmov dx,contrl_portout dx,alno_key:;键盘扫描mov dx,c_portin al,dxnopin al,dxcmp al,11111111b;如果无按键则继续扫描jz no_keyk_1:cmp al,11110111b;“1”是否被按下jnz k_2mov data,1k_1_0:mov dx,b_portmov al,11100001b;第一位1out dx,almov al,11010000b;第二位0out dx,almov al,10110100b;第三位4out dx,almov al,01110101b;第四位5out dx,almov

34、dx,c_portin al,dxnopin al,dxcmp al,0ffhjnz k_1jmp k_1_0k_2:cmp al,11101111b;“2”是否被按下jnz k_3mov data,2k_2_0:mov dx,b_portmov al,11100011b;3out dx,almov al,11010000b;0out dx,almov al,10111001b;9out dx,almov al,01110000b;0out dx,almov dx,c_portin al,dxnopin al,dxcmp al,0ffhjnz k_1jmp k_2_0k_3:cmp al,11

35、011111b;“3”是否被按下jnz k_4mov data,3k_3_0:mov dx,b_portmov al,11100101b;5out dx,almov al,11010001b;1out dx,almov al,10110011b;3out dx,almov al,01110101b;5out dx,almov dx,c_portin al,dxnopin al,dxcmp al,0ffhjnz k_1jmp k_3_0k_4:cmp al,10111111b;“4”是否被按下jnz k_5mov data,4k_4_0:mov dx,b_portmov al,11100111b

36、;7out dx,almov al,11010000b;0out dx,almov al,10111001b;9out dx,almov al,01110000b;0out dx,almov dx,c_portin al,dxnopin al,dxcmp al,0ffhjnz k_1jmp k_4_0k_5:cmp al,01111111b;“5”是否被按下jnz k_clearmov data,5k_5_0:mov dx,b_portmov al,11101001b;9out dx,almov al,11010000b;0out dx,almov al,10110100b;4out dx,a

37、lmov al,01110101b;5out dx,almov dx,c_portin al,dxnopin al,dxcmp al,0ffhjnz k_1jmp k_5_0k_clear:cmp al,11111011b;“clear”是否被按下jnz k_startmov data,0k_clear_0:mov dx,b_portmov al,11100000b;0out dx,almov al,11010000b;0out dx,almov al,10110000b;0out dx,almov al,01110000b;0out dx,almov dx,c_portin al,dxnop

38、in al,dxcmp al,0ffhjnz k_1jmp k_clear_0k_start:cmp al,11111110b;“start”是否被按下jnz k_setjmp motor_startk_set:cmp al,11111101b;“set”是否被按下jnz no_keyjmp no_key;*步进电机程序段*;motor_start:mov al,datas_1:cmp al,1jnz s_2mov dx,a_portmov al,03hout dx,aljmp no_keys_2:cmp al,2jnz s_3call s_0_90;第一步call delaycall s_9

39、0_180;第二步call delaycall s_0_90;第三步jmp no_keys_3:cmp al,3jnz s_4call s_0_90;第一步call delay0mov al,0chout dx,alcall delaymov dx,a_port;第二步mov al,06hout dx,almov al,03hout dx,alcall delay0mov al,09hout dx,alcall delaycall s_90_180;第三步call delay0mov al,03hout dx,alcall delaymov dx,a_port;第四步mov al,09hout

40、 dx,almov al,0chout dx,alcall delay0mov al,06hout dx,alcall delaycall s_0_90;第五步call delay0mov al,0chout dx,aljmp no_keys_4:cmp al,4jnz s_5call s_0_90;第一步call delaycall s_90_180;第二步call delaycall s_0_90;第三步call delaycall s_90_180;第四步call delaycall s_0_90;第五步call delaycall s_90_180;第六步call delaycall

41、s_0_90;第七步jmp no_keys_5:cmp al,5jnz no_keymov dx,a_port;第一步mov al,03hout dx,alcall delaymov dx,a_port;第二步mov al,09hout dx,alcall delaymov dx,a_port;第三步mov al,0chout dx,alcall delaymov dx,a_port;第四步mov al,06hout dx,alcall delaymov dx,a_port;第五步mov al,03hout dx,alcall delaymov dx,a_port;第六步mov al,09ho

42、ut dx,alcall delaymov dx,a_port;第七步mov al,0chout dx,alcall delaymov dx,a_port;第八步mov al,06hout dx,alcall delaymov dx,a_port;第九步mov al,03hout dx,aljmp no_key;*延时子程序1*;delay:mov ah,05fhloop0: mov cx,0ffhloop1:mov dx,c_portin al,dxcmp al,11111101b;判断set是否按下jz no_key loop loop1 dec ah cmp ah,0 jnz loop0 ret;*延时子程序2*;delay0:mov ah,04fhloop2:mov cx,0ffhloop3:noploop loop3dec ahcmp ah,0jnz loop2ret;*090度子程序*; s_0_90:mov dx,a_portmov al,03hout dx,almov al,09hout dx,alret;*90180度子程序*;s_90_180:mov dx,a_portmov al,0chout dx,almov al,06hout dx,alret mov ah,4chint 21h CODES ENDS END START

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!