汇编中IN指令是什么意思

作者&投稿:易马 (若有异议请与网页底部的电邮联系)
汇编中指令IN245是什么意思~


转载
用单片机控制步进电机
步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
一、步进电机常识
常见的步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB),永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为0.72度。这种步进电机的应用最为广泛。
二、永磁式步进电机的控制
下面以电子爱好者业余制作中常用的永磁式步进电机为例,来介绍如何用单片机控制步进电机。
图1是35BY型永磁步进电机的外形图,图2是该电机的接线图,从图中可以看出,电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有5根引出线。要使用步进电机转动,只要轮流给各引出端通电即可。将COM端标识为C,只要AC、C、BC、C,轮流加电就能驱动步进电机运转,加电的方式可以有多种,如果将COM端接正电源,那么只要用开关元件(如三极管),将A、B、 轮流接地。
下表列出了该电机的一些典型参数:
表1 35BY48S03型步机电机参数型号 步距角 相数 电压 电流 电阻 最大静转距 定位转距 转动惯量35BY48S03 7.5 4 12 0.26 47 180 65 2.5
有了这些参数,不难设计出控制电路,因其工作电压为12V,最大电流为0.26A,因此用一块开路输出达林顿驱动器(ULN2003)来作为驱动,通过P1.4~P1.7来控制各线圈的接通与切断,电路如图3所示。开机时,P1.4~P1.7均为高电平,依次将P1.4~P1.7切换为低电平即可驱动步进电机运行,注意在切换之前将前一个输出引脚变为高电平。如果要改变电机的转动速度只要改变两次接通之间的时间,而要改变电机的转动方向,只要改变各线圈接通的顺序。
图1 35BY48S03型步进电机外形图
图2 35BY48S03型步进电机的接线图
图3 单片机控制35BY48S03型步进电机的电路原理图
三、步进电机的驱动实例
要求:控制电路如图3所示,开机后,电机不转,按下启动键,电机旋转,速度为25转/分,按下加1键,速度增加,按下减1键,速度降低,最高速度为100转/分,最低转带为25转/分,按下停止键,电机停转。速度值要求在数码管上显示出来。
1.要求分析
按上面的分析,改变转速,只要改变P1.0~P1.3轮流变低电平的时间即可达到要求,这个时间不应采用延时来实现,因为会影响到其他功能的实现。这里以定时的方式来实现。下面首先计算一下定时时间。
按要求,最低转速为25转/分,而上述步进电机的步距角为7.5,即每48个脉冲为1周,即在最低转速时,要求为1200脉冲/分,相当于50ms/脉冲。而在最高转速时,要求为100转/分,即48000脉冲/分,相当于12.5ms/脉冲。可以列出下表
表1 步进电机转速与定时器定时常数关系
速度 单步时间(us) TH1 TL1 实际定时(us)
25 50000 76 0 49996.8
26 48077 82 236 48074.18
27 46296 89 86 46292.61
28 44643 95 73 44640.155
⋯ … … … …
100 12500 211 0 12499.2
  表中不仅计算出了TH1和TL1,而且还计算出了在这个定时常数下,真实的定时时间,可以根据这个计算值来估算真实速度与理论速度的误差值。
表中TH1和TL1是根据定时时间算出来的定时初值,这里用到的晶振是11.0592M。有了上述表格,程序就不难实现了,使用定时/计数器T1为定时器,定时时间到后切换输出脚即可。
2.程序实现
  定义DSB-1A实验板的S1为启动键,S2为停止键,S3为加1键,S4为减1键,程序如下:
StartEnd bit 01H ;起动及停止标志
MinSpd EQU 25 ;起始转动速度
MaxSpd EQU 100 ;最高转动速度
Speed DATA 23H ;流动速度计数
DjCount DATA 24H ;控制电机输出的一个值,初始为11110 111
Hidden EQU 10H ;消隐码
Counter DATA 57H ;显示计数器
DISPBUF DATA 58H ;显示缓冲区
ORG 0000H
AJMP MAIN
ORG 000BH
JMP DISP
ORG 001BH
JMP DJZD
ORG 30H
MAIN:
MOV SP,#5FH
MOV P1,#0FFH
MOV A,#Hidden
MOV DispBuf,A
MOV DispBuf+1,A
MOV DispBuf+2,A
MOV DjCount,#11110111B
MOV SPEED,#MinSpd;起始转动速度送入计数器
CLR StartEnd;停转状态
MOV TMOD,#00010001B ;
MOV TH0,#HIGH(65536-3000)
MOV TL0,#LOW(65536-3000)
MOV TH1,#0FFH;
MOV TL1,#0FFH
SETB TR0
SETB EA
SETB ET0
SETB ET1
LOOP: ACALL KEY ;键盘程序
JNB F0,m_NEXT1 ;无键继续
ACALL KEYPROC ;否则调用键盘处理程序
m_NEXT1:
MOV A,Speed
MOV B,#10
DIV AB
MOV DispBuf+5,B ;最低位
MOV B,#10
DIV AB
MOV DispBuf+4,B
MOV DispBuf+3,A
JB StartEnd,m_Next2
CLR TR1 ;关闭电机
JMP LOOP
ORL P1,#11110000B
m_Next2:
SETB TR1 ;启动电机
AJMP LOOP ;主程序结束
;---------------------------------------
D10ms:
⋯⋯
;---------延时程序,键盘处理中调用
KEYPROC:
MOV A,B ;获取键值
JB ACC.2,StartStop ;分析键的代码,某位被按下,则该位为1
JB ACC.3,KeySty
JB ACC.4,UpSpd
JB ACC.5,DowSpd
AJMP KEY_RET
StartStop:
SETB StartEnd 启动
AJMP KEY_RET
KeySty:
CLR StartEnd; ;停止
AJMP KEY_RET
UpSpd:
INC SPEED;
MOV A,SPEED
CJNE A,#MaxSpd,K1 ;到了最多的次数
DEC SPEED ;是则减去1,保证下次仍为该值
K1:
AJMP KEY_RET
DowSpd:
DEC SPEED
MOV A,SPEED
CJNE A,#MAXSPD,KEY_RET;不等(未到最大值),返回
MOV SPEED,#MinSpd;
KEY_RET:
RET
KEY:
⋯⋯获取键值的程序
RET
DjZd: ;定时器T1用于电机转速控制
PUSH ACC
PUSH PSW
MOV A,Speed
SUBB A,#MinSpd ;减基准数
MOV DPTR,#DjH
MOVC A,@A+DPTR
MOV TH1,A
MOV A,Speed
SUBB A,#MinSpd
MOV DPTR,#DjL
MOVC A,@A+DPTR
MOV TL1,A
MOV A,DjCount
CPL A
ORL P1,A
MOV A,DjCount
JNB ACC.7,d_Next1
JMP d_Next2
d_Next1:
MOV DjCount,#11110111B
d_Next2:
MOV A,DjCount
RL A
MOV DjCount,A ;回存
ANL P1,A
POP PSW
POP ACC
RETI
DjH: DB 76,82,89,95,100,106,110,115,119,123,12……
DjL: DB 0,236,86,73,212,0,214,96,163,165
⋯⋯
DISP: ;显示程序
POP PSW
POP ACC
⋯⋯
RETI
BitTab: DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBH
DISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
END
3.程序分析
本程序主要由键盘程序、显示器程序、步进电机驱动程序三部份组成,主程序首先初始化各变量,将显示器的高3位消隐,步进电机驱动的各引脚均输出高电平,然后调用键盘程序,并作判断,如果有键按下,则调用键盘处理程序,否则直接转下一步。下一步是将当前的转速值转换为BCD码,送入显示缓冲区;接着判断StartEnd这个位变量,是“1”还是“0”,如果是“1”,则开启定时器T1,否则关闭定时器T1,为防止关闭时某一相线圈长期通电,因此,在关闭定时器T1时,将P1.0~P1.3均置高。至此,主程序的工作即结束。这里为简便起见,这里没有做高位“0”消隐的工作,即如果速度为10转/分,则显示值“010”,读者可以自行加入相关的代码来处理这一工作。
步进电机的驱动工作是在定时器T1的中断服务程序中实现的,由前述分析,每次的定时时间到达以后,需要将P1.0~P1.3依次接通,程度中用了一个变量DjCntr来实现这一功能,在主程序初始化时,该变量被赋予初值11110111B,进入到定时中断以后,将该变量取出送ACC累加器,并在累加器中进行左移,这样,该数值就变为11101111,然后将该数与P1相“与”,此时,P1.4即输出低电平,第二次进入中断时,先将该数取反,成为0001 0000,然后将该数与P1相“或”,这样,P1.4即输出高电平,关断了相应的线圈,然后将该数重新取出,并作左移,即 1110,1111右移成为1101 1111,将该数与P1相“与”,这样P1.5即输出低电平,依次类推,P1.7~P1.4即循环输出低电平。当这一数据变为01111111后,需要作适当的改动,将数据重新变回 1111 0111,进行第二次循环,相关代码,请读者自行分析。
  定时时间又是如何确定的呢?这里用的是查表的方法,首先用Excel计算得出在每一种转速下的TH值和TL值,然后,分别放入DjH和DjL表中,在进入T1中断程序之后,将速度值变量Speed送入累加器ACC,然后减去基数25,使其基数从0开始计数,然后分别查表,送入TH1和TL1,实现重置定时初值的目的。
看完这一部份内容以后,请读者自行完成以下工作:
1. 更改程序,将S1定义为“启动/停止”,而S2定义为“方向”,按下S2,切换电机旋转方向。
2. 更改程序,要求转速从1到100。
3. 更改程序,实现首位无效零消隐。

十进制数加调整指令DAA(Decimal Adjust After Addition)
该指令是用于调整AL的值,该值是由指令ADD或ADC运算二个压缩型BCD码所得到的结果。
压缩型BCD码是一个字节存放二个BCD码,低四位和高四位都是一个BCD码。
其调整规则如下:
1、如果AL的低四位大于9,或标志位AF=1,那么,AL=AL+6,并置AF=1;
2、如果AL的高四位大于9,或CF=1,那么,AL=AL+60H,并置CF=1;
3、如果以上两点都不成立,则,清除标志位AF和CF。
经过调整后,AL的值仍是压缩型BCD码,即:二个压缩型BCD码相加,并进行调整后,得到的结果还是压缩型BCD码。

OUT 和 IN 在汇编中是端口读写操作指令。端口是主机与外设进行 数据交换 使用的,分为 数据端口 ,状态端口和控制端口三种 例如: IN AL, 21H 表示从21H端口读一个字节数据到AL;

IN 在汇编中是端口读操作指令。IN AL, 92H 表示从端口92H读一个字节数据到AL;


字节传送指令的操作数in和out可寻址的寄存器不包括
字节传送指令的操作数IN和OUT在可寻址的寄存器方面有一定的限制。具体来说,它们可以寻址的寄存器类型通常包括V(数据寄存器)、I(输入寄存器)和Q(输出寄存器),但并不包括AI(模拟输入寄存器)。在工业自动化和PLC(可编程逻辑控制器)编程中,字节传送指令用于在不同的寄存器之间传输数据。V寄存器通常...

西门子plc字节传送指令in的位置写的数字代表什么意思?
西门子的PLC的数据一般是以字节为单位,一个字节就包含8位数据位,IB0(表示I0.0-I0.7这8个位)QB0就表示Q0.0-Q0.7这8个位)。同时:MOV块有一个输入IN,有一个输出OUTIN是源数据,可以是立即数,可以是地址,OUT是目标地址,就是要将IN的数据放到什么地方。QB0是一个地址,其中:Q是表示...

西门子PLC比较指令中IN1个IN2是什么意思
分别指你要比较的第1个变量(数据)和第2个变量(数据)。西门子的帮助做的很不错,你在指令上点一下F1,就可以了解该指令的基本功能和具体实例了。

在X86系列芯片中,mov指令与IN\/OUT指令有什么区别?
x86有不少带io的设备,这些设备和系统的memory是共享一个地址空间的。x86用in来读那些io的设备,用out来对外面写。mov主要是对memory什么之类的访问。

汇编incsi是什么意思?
对于汇编语言中的incsi,它是一种对汇编器命令的简化形式。incsi的全称是increment and skip if zero,即在执行完加一操作后,如果结果为零则跳过下一个操作。这种简化形式可以使程序的编写变得更加简单和高效。incsi在汇编语言中有着广泛的应用,其中最常见的就是在循环中使用。比如,我们想要对一个...

s7-200 传送指令IN常数是什么意思
要传送的值 传送指令在不改变原存储单元值(内容)的情况下,将 IN(输入端存储单元)的值复制到 OUT(输出端存储单元)中。可用于存储单元的清零、程序初始化等场合。

微机题,编制完成EAX*5\/8的程序段。要求:1.用乘法指令实现。2.用移位和...
3.7 假如想从200中减去AL中的内容,用SUB 200,AL是否正确?如果不正确,应该用什么方法?解:不正确。正确的方法是:MOV BL, 200SUB BL, AL3.8 试用两种方法写出从8OH端口读入信息的指令。再用两种方法写出从4OH口输出10OH的指令。解:(1)IN AL, 80H (2)MOV DX, 8OHIN AL, DX(3)MOV, AL, lOOHOUT ...

PLC中的MOV-W什么意思
PLC机编程中,MOV-W是移动字指令。功能与作用简述如下,因不同PLC的编程指令格式不完全相同,如需要详细了解请参考相应PLC机的编程手册。移动字节(MOVE)指令将输入字节(IN)移至输出字节(OUT),不改变原来的数值。移动字(MOVW)指令将输入字(IN)移至输出字(OUT),不改变原来的数值。右移字节...

字节传送指令的操作数in和out可寻址的寄存器不包括
字节传送指令的操作数in和out可寻址的寄存器通常不包括程序计数器和状态寄存器。在计算机体系结构中,字节传送指令是用于将数据从一个内存位置或寄存器移动到另一个内存位置或寄存器的指令。这些指令通常非常灵活,允许操作数来自多种不同的源并可以传送到多种不同的目标。然而,并非所有的寄存器都可以作为字节...

西门子中编码指令ENCO 3,out怎么理解,等于几,请指教?
enco是编码指令,试将输入in的最低有效位,也就是为1的位的位号写入到输出out里,因此如果in的值为3,二进制就是0000 0000 0000 0011,最低为1的位是第0位(从0位开始的,最右侧为第 0位,最左侧为第15位),因此out就等于0。望采纳。。。

霞浦县18989332329: 汇编中IN指令是什么意思 -
宫怡小儿: OUT 和 IN 在汇编中是端口读写操作指令.端口是主机与外设进行数据交换使用的,分为数据端口,状态端口和控制端口三种 例如: IN AL, 21H 表示从21H端口读一个字节数据到AL;

霞浦县18989332329: 16/32位汇编语言中" in al ,dx"啥意思 -
宫怡小儿: IN AL,DX:DX是源操作数. AL是8位寄存器,作为目的操作数,IN指令是端口操作指令. 作用:将源操作数代表的端口的内容送给目的操作数,所以整条指令是将端口的内容送给AL寄存器.

霞浦县18989332329: 汇编语言中的in 和out -
宫怡小儿: in out指的是输入输出,是相对于内存而言的,输入就是将外设的数据读入写到内存中,因此为读操作,输出就是指将内存的数据写到外设中,因此为写操作.

霞浦县18989332329: 汇编语言 in和mov的区别
宫怡小儿: in 输入指令,读的是端口,而且目的操作数一定是ax或者al 而mov 则是普通的传送指令,可以对寄存器,存储器,立即数等进行传送.

霞浦县18989332329: 输入指令IN输出指令OUT -
宫怡小儿: 1、输入指令IN输出指令OUT都是累加器专用指令. 2、用法: (1)IN AX/AL,I/O端口地址;表示从外部设备输入数据给累加器,如果从外设端口中输入一个字节则给8位累加器AL,若输入一个字则给16位累加器AX. 如 IN AL,80H (2)OUT I/O端口地址,AX/AL;表示将累加器的数据输出给外部设备,如果向外设端口输出一个字节则用8位累加器AL,若输出一个字则用16位累加器AX. 如OUT 81H,AL 说明:当I/O端口地址不超过8位时,则直接放在指令中,若超过8位,则用DX间址.如MOV DX,8080H IN AL,DX

霞浦县18989332329: 求汇编语言指令:IN 和OUT的实例???? -
宫怡小儿: 端口是主机与外设进行数据交换的.(外设接口电路有专用于数据交互的寄存器.为了与CPU中的寄存器相区别,称之为“端口”).端口有数据端口,状态端口和控制端口3种.PC机给予每一个端口分配了一个地址(称为端口号),形成一个...

霞浦县18989332329: 汇编语言:IN AL,DX -
宫怡小儿: 意思是从 dx 的端口中输入一个8位的值放在al中同样的还有 in ax,dx 这样的

霞浦县18989332329: 汇编语言中的 IN 和OUT 指令是什么功能? -
宫怡小儿: 你用的什么单片机,一般没有这两个指令.你可能需要看下你用的芯片的DATASHEET. 最好把程序贴出来看看.

霞浦县18989332329: 汇编语言中 OUT DX,AL 指令操作过程是什么? OUT操作码实现的功能是什么? -
宫怡小儿: in和Out都是IO操作指令 , 例如out指令:OUT PortNo/DX, AL/AX 功能为把AL/AX的数据送到IO地址,IO地址如果大于FFH,则地址需要放入DX,要输出字节,默认使用AL寄存器,要输出字,默认使用AX寄存器. 例如:MOV AL,10H //(将字...

霞浦县18989332329: 汇编语言 in out -
宫怡小儿: 是将AL中的内容转到DX的内容对应的地址当中.如MOV DX,22H OUT DX,A 就是AL中的内容送到地址为22H的M中.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网